ros_controllers里有个four_wheel_steering_controller,可以用于四驱车的控制,可以作为四驱车控制的gazebo plugin使用.
四个轮子的控制,包括轮子速度及轮子摆角
这里的四驱车模型是,每个轮子有独立的转向系统, 有独立的驱动系统. 因此需要地盘单独驱动每个轮子的摆角和速度.
有两种指令方式,一种是普通的geometry_msg::twist, 一种是自定义的four_wheel_steering_msgs,他的具体msg内容如下:
float32 front_steering_angle # position of the virtual angle (radians)
float32 rear_steering_angle # position of the virtual angle (radians)
float32 front_steering_angle_velocity # rate of change (radians/s)
float32 rear_steering_angle_velocity # rate of change (radians/s)float32 speed # forward speed (m/s)
float32 acceleration # acceleration (m/s^2)
float32 jerk # jerk (m/s^3)
可以看出,这个指令,其实也没有具体到每个轮子的摆角和速度.因此也是需要根据地盘的几何信息i进行具体解算的. 那么就来看看他这里是怎么进行解算的.
两种msg类型,分别用了不同的callback: cmdVelCallback和cmdFourWheelSteeringCallback;msg中的数据分别放在了 command_twist_和command_four_wheel_steering_里, 然后在updateCommand中比较二者的stamp,选取时间最新的那个作为指令,同时检查是否超时, 若超时就刹车.
需要解算的量包括8个:
double vel_left_front = 0, vel_right_front = 0;
double vel_left_rear = 0, vel_right_rear = 0;
double front_left_steering = 0, front_right_steeri