转向角超过规定值

时间:2019-06-01 10:47:05

标签: ros webots

我在Webots中模拟了一个机器人。该机器人有一个主动脚轮。脚轮有两个电机,一个用于转向,另一个用于线速度。我正在使用Webots ROS控件,该控件以ROS服务的形式提供所有内容。

对于线性(车轮旋转),我在velocity control中使用它,而转向控制在position control中进行。速度控制按预期工作,但转向位置控制无法正常工作。每当向机器人发出转向命令时,车轮都会旋转360度。但不止于指定的值并超过。这些命令采用rostopics的形式,在其回调中称为webots rosservices。

作为调试,我在终端中调用了服务,并转到了指定的值,并且不会对同一电动机的多个服务调用产生超调。但是在下面的脚本中,调用相同的服务(通过速度和转向主题)会导致问题。

代码


def velocityBridgeCallback(msg, args):
    base_name = '/AGV01'
    if args == 'velocity':
        device = base_name + '/wheel_main_rotation_motor'
        rospy.wait_for_service(device + '/set_position')
        set_position = rospy.ServiceProxy(device+'/set_position',set_float)
        set_position(float('inf'))
        rospy.wait_for_service(device + '/set_velocity')
        set_velocity = rospy.ServiceProxy(device+'/set_velocity',set_float)
        set_velocity(msg.data)
    elif args == 'steer':
        device_steer = base_name+'/wheel_main_steer_motor'
        rospy.wait_for_service(device_steer+'/set_position')
        set_position = rospy.ServiceProxy(device_steer+'/set_position',set_float)
        set_position(msg.data)
if __name__ == '__main__':
    rospy.init_node('AGV_velocity_bridge', anonymous = False, log_level = rospy.INFO)
    rospy.Subscriber('/velocity_filter/command', Float64, velocityBridgeCallback, ('velocity'))
    rospy.Subscriber('/steer_filter/command', Float64, velocityBridgeCallback, ('steer'))
    rospy.spin()

This是车轮的初始位置,可以看到车轮的期望位置here。但是,电动机并没有停止在期望的位置,而是一直到joint

的硬极限。

0 个答案:

没有答案