예제 #1
0
    def update(self,time_delta):
        T_sonar_map = self.robot.get_robot_map_transform()*self.robot.get_sonar_robot_transform()
        
        # Get sonar x and y for center point of sonar in map frame. 
        #print(T_sonar_map)
        #print(T_sonar_map.item(2))
        #print(T_sonar_map.item(5))
        x = T_sonar_map.item(2)
        y = T_sonar_map.item(5)

        if self.sparki.port == '':
            # calculate sonar distance from map
            self.robot.sonar_distance = self.omap.get_first_hit(T_sonar_map)
            
            # Send range finder measurement to RangeFinder class
            #print(self.robot.sonar_distance)
            #print(self.omap.log_odds)
            rangefinder = RangeFinder(self.robot.sonar_distance, self.omap.log_odds, x, y)
            log_odds = rangefinder.update(self.robot.sonar_distance, self.omap.log_odds, x, y)
            self.omap.log_odds = log_odds
            
	else:
            # get current rangefinder reading
            self.robot.sonar_distance = self.sparki.dist
        
        # calculate servo setting
        servo = int(self.robot.sonar_angle*180./math.pi)

        # calculate motor settings
        left_speed, left_dir, right_speed, right_dir = self.robot.compute_motors()

        # send command
        self.sparki.send_command(left_speed,left_dir,right_speed,right_dir,servo)
        
        # update robot position
        self.robot.update(time_delta)