[无人驾驶系列] autoware与底盘CAN通讯实现
本文介绍在使用autoware时,如何将autoware发送的消息传输给底盘,实现对线控底盘的控制。
准备工作:
1、系统具备ROS和autoware
2、根据之前的教程安装好了ros_canopen
1、订阅话题
话题:/vehicle_cmd
消息类型:autoware_msgs/VehicleCmd
在这个消息类型中有很多的数据,控制线控底盘仅需取x轴方向的线速度和z轴方向的角速度。
线速度(m/s)、角速度(rad/s)
speed_ms = twist_cmd.twist.linear.x;
omega = twist_cmd.twist.angular.z;
获取线速度和角速度后计算出转弯的角度和车辆行驶速度:
/*
计算过程
转弯的角度 = arctan(( 角速度 / 线速度 ) × 车长 ) ;
线速度(km/h) = 线速度(m/s) × 3.6 ;
*/
steer_degree = atan((-omega/speed_ms)*1) * 180/3.14;
speed_value = (speed_ms * 3.6);
2、发布话题(发布CAN数据)
话题:/sent_messages
消息类型: firecar_can/Frame
在 std_msgs/Header header 的数据格式中,主要是给 id dlc data 赋值再发布数据,具体所需传递的 id 和 data 根据线控底盘的can协议取值。
3、canopen/Frame消息格式
Header header
uint32 id
bool is_rtr
bool is_extended
bool is_error
uint8 dlc
uint8[8] data