一、硬件控制协议
对于不同的设备,底层的通讯方式都不一致,因此需要根据具体硬件具体分析。本系统 采用了1个CAN盒子控制转向,1路DA控制油门,另外一路DA控制刹车。
1,转向协议
CAN协议获取当前状态的帧ID是0x322,发送控制指令的ID是0x215。500kbps。
一条十六进制控制码是 00 31 X1 X2 Y1 00 00 00。
其中X1*256+X2=控制角度 Y1控制角速度。
2,油门协议
串口转DA控制模块,设置波特率9600bps。
一条十六进制控制码是 01 06 00 00 X1 X2 Y1 Y2。
其中,X1*256+X2控制DA输出电压。空载测试大约 5km/h对应 01 99,10km/h对应 03 33。
Y1和Y2分别是对前八位数据进行CRC校验后的输出结果。
3,刹车协议
串口转DA控制模块,设置波特率9600bps。
启动刹车:01 06 00 00 0c cd 4d 5f。
取消刹车:01 06 00 00 00 00 89 ca。
二、ROS节点接收速度控制消息
对于ROS节点的编写规则,可以参考本系列第二讲中推荐的ros基本教程。
首先创建功能包,实现监听cmd_vel消息,命名为bjtucar:
cd ~/catkin_ws/src
catkin_create_pkg bjtucar std_msgs std_msgs roscpp

创建节点订阅文件myCar.cpp
cd ~/catkin_ws/src/bjtucar/src/
gedit myCar.cpp
在文件中粘贴以下内容:
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
void cmd_vel_callback(const geometry_msgs::Twist& vel_cmd)
{
ROS_INFO("I heard: [%f]", vel_cmd.linear.y);
ROS_INFO("I heard: [%f]", vel_cmd.linear.x);
std::cout <

本文详细介绍了使用ROS(Robot Operating System)与特定硬件交互的过程,包括CAN控制转向、串口控制油门和刹车的协议设计,以及如何在ROS节点中实现这些功能的代码示例。通过实际操作步骤,展示了如何编写节点监听速度指令并转化为控制信号发送到硬件设备上。
最低0.47元/天 解锁文章
2574





