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)
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)
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()