Пример #1
0
class CarNode():
    def __init__(self):
        rospy.init_node('car_sim')
        rospy.Subscriber('twist2d', Twist, self.update_command)
        dt = rospy.get_param('~dt', default=0.05)
        noisy = rospy.get_param('~noisy', default=False)
        self.rate = rospy.Rate(1. / dt)
        self.car = CarModel(dt=dt)
        self.speed, self.steering = 0, 0
        self.last_time = rospy.Time.now()
        self.pose_pub = rospy.Publisher('car_pose', Pose2D, queue_size=1)

    def update_command(self, msg):
        self.last_time = rospy.Time.now()
        self.speed = msg.linear.x
        self.steering = msg.angular.z

    def check_command_validity(self):
        """
        Check if the command is not too old, else resets it to 0
        """
        if rospy.Time.now() - self.last_time > rospy.Duration(2):
            self.speed = 0
            self.steering = 0

    def work(self):
        while not rospy.is_shutdown():
            self.check_command_validity()
            self.car.sim_step(speed=self.speed, steering=self.steering)
            self.pose_pub.publish(Pose2D(*self.car.X))
            self.rate.sleep()