コード例 #1
0
ファイル: human.py プロジェクト: neilpradhan/cops_and_robots
    def __init__(self,
                 map_=None,
                 web_interface_topic='python',
                 false_alarm_prob=0.2):
        self.update_rate = None
        self.has_physical_dimensions = False
        self.speed_model = speed_model()
        self.false_alarm_prob = false_alarm_prob

        super(Human, self).__init__(self.update_rate,
                                    self.has_physical_dimensions)

        # self.certainties = ['think', 'know']
        self.certainties = ['know']
        self.positivities = ['is not',
                             'is']  # <>TODO: oh god wtf why does order matter
        self.relations = {
            'object': [
                'behind',
                'in front of',
                'left of',
                'right of',
                'near',
            ],
            'area': ['inside', 'near', 'outside']
        }
        self.movement_types = ['moving', 'stopped']
        self.movement_qualities = ['slowly', 'moderately', 'quickly']

        self.groundings = {}
        self.groundings['area'] = map_.areas

        self.groundings['object'] = {}
        for cop_name, cop in map_.cops.iteritems():
            # if cop.has_relations:
            self.groundings['object'][cop_name] = cop
        for object_name, obj in map_.objects.iteritems():
            if obj.has_relations:
                self.groundings['object'][object_name] = obj

        self.target_names = ['nothing', 'a robot'] + map_.robbers.keys()
        self.utterance = ''
        self.new_update = False

        # Set up the VB fusion parameters
        self.vb = VariationalBayes()

        if web_interface_topic != 'python':
            # Subscribe to web interface
            print web_interface_topic
            import rospy
            from std_msgs.msg import String
            rospy.Subscriber(web_interface_topic, String, self.callback)
コード例 #2
0
ファイル: human.py プロジェクト: COHRINT/cops_and_robots
    def __init__(self, map_=None, web_interface_topic='python',
                 false_alarm_prob=0.2):
        self.update_rate = None
        self.has_physical_dimensions = False
        self.speed_model = speed_model()
        self.false_alarm_prob = false_alarm_prob

        super(Human, self).__init__(self.update_rate,
                                    self.has_physical_dimensions)

        # self.certainties = ['think', 'know']
        self.certainties = ['know']
        self.positivities = ['is not', 'is']  # <>TODO: oh god wtf why does order matter
        self.relations = {'object': ['behind',
                                     'in front of',
                                     'left of',
                                     'right of',
                                     'near',
                                     ],
                          'area': ['inside',
                                   'near',
                                   'outside'
                                   ]}
        self.movement_types = ['moving', 'stopped']
        self.movement_qualities = ['slowly', 'moderately', 'quickly']

        self.groundings = {}
        self.groundings['area'] = map_.areas

        self.groundings['object'] = {}
        for cop_name, cop in map_.cops.iteritems():
            # if cop.has_relations:
            self.groundings['object'][cop_name] = cop
        for object_name, obj in map_.objects.iteritems():
            if obj.has_relations:
                self.groundings['object'][object_name] = obj

        self.target_names = ['nothing', 'a robot'] + map_.robbers.keys()
        self.utterance = ''
        self.new_update = False

        # Set up the VB fusion parameters
        self.vb = VariationalBayes()

        if web_interface_topic != 'python':
            # Subscribe to web interface
            print web_interface_topic
            import rospy
            from std_msgs.msg import String
            rospy.Subscriber(web_interface_topic, String, self.callback)
コード例 #3
0
def comparison_1d():

    # Define prior
    prior_mean, prior_var = 0.3, 0.01
    min_x, max_x = -5, 5
    res = 10000

    prior = GaussianMixture(1, prior_mean, prior_var)
    x_space = np.linspace(min_x, max_x, res)

    # Define sensor likelihood
    sm = speed_model()
    measurement = 'Slow'
    measurement_i = sm.class_labels.index(measurement)

    # Do a VB update
    init_mean, init_var = 0, 1
    init_alpha, init_xi = 0.5, np.ones(4)

    vb = VariationalBayes()
    vb_mean, vb_var, _ = vb.vb_update(measurement, sm, prior, init_mean,
                                      init_var, init_alpha, init_xi)
    vb_posterior = GaussianMixture(1, vb_mean, vb_var)

    nisar_vb_mean = 0.131005297841171
    nisar_vb_var = 6.43335516254277e-05
    diff_vb_mean = vb_mean - nisar_vb_mean
    diff_vb_var = vb_var - nisar_vb_var
    logging.info(
        'Nisar\'s VB update had mean difference {} and var difference {}\n'.
        format(diff_vb_mean, diff_vb_var))

    # Do a VBIS update
    vbis_mean, vbis_var, _ = vb.vbis_update(measurement, sm, prior, init_mean,
                                            init_var, init_alpha, init_xi)
    vbis_posterior = GaussianMixture(1, vbis_mean, vbis_var)

    nisar_vbis_mean = 0.154223416817080
    nisar_vbis_var = 0.00346064073274943
    diff_vbis_mean = vbis_mean - nisar_vbis_mean
    diff_vbis_var = vbis_var - nisar_vbis_var
    logging.info(
        'Nisar\'s VBIS update had mean difference {} and var difference {}\n'.
        format(diff_vbis_mean, diff_vbis_var))

    # Plot results
    likelihood_label = 'Likelihood of \'{}\''.format(measurement)
    fig = plt.figure()
    ax = fig.add_subplot(111)
    sm.classes[measurement].plot(ax=ax,
                                 fill_between=False,
                                 label=likelihood_label,
                                 ls='--')
    ax.plot(x_space,
            prior.pdf(x_space),
            lw=1,
            label='prior pdf',
            c='grey',
            ls='--')

    ax.plot(x_space,
            vb_posterior.pdf(x_space),
            lw=2,
            label='VB posterior',
            c='r')
    ax.fill_between(x_space,
                    0,
                    vb_posterior.pdf(x_space),
                    alpha=0.2,
                    facecolor='r')
    ax.plot(x_space,
            vbis_posterior.pdf(x_space),
            lw=2,
            label='VBIS Posterior',
            c='g')
    ax.fill_between(x_space,
                    0,
                    vbis_posterior.pdf(x_space),
                    alpha=0.2,
                    facecolor='g')

    ax.set_title('VBIS Update')
    ax.legend()
    ax.set_xlim([0, 0.4])
    ax.set_ylim([0, 7])
    plt.show()