ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
小强电脑与stm32底层串口通讯协议
-
串口波特率为115200,8个数据位,1个停止位,无奇偶校验。
第一部分是上位机对底层下发的控制指令:
每个指令构成一个数据帧,可以同时下发多个数据帧,帧内容是:包头+长度+内容,包头为3个u8字符:205 235 215 长度是1个u8字符,长度不包括包头和长度字符自身,内容为命令+参数。
单字符命令,即一个字符完成的命令:
调试模式 ‘T’
运行模式 ‘R’
软件复位 ‘I’例如,让stm32软件复位,下发的数据帧hex内容为:0xcd 0xeb 0xd7 0x01 0x49
双字符命令,即一个字符加一个参数X完成的命令:
前进 'f‘X , X数值范围为0~100
后退 'b’X , X数值范围为0~100
刹车 's’X , X数值任意
左转 'c’X , X数值范围为0~100
右转 'd’X , X数值范围为0~100例如: 以80%的制动量制动小车: 0xcd 0xeb 0xd7 0x02 0x73 0x50 以16%的速度左转: 0xcd 0xeb 0xd7 0x02 0x63 0x10 以16%的速度右转: 0xcd 0xeb 0xd7 0x02 0x64 0x10
多字符带参数命令:
设置电机 't’XXXXxxxx
命令说明:完整命令格式tABCDabcd,总共9个字符。t为命令标识,表示设置电机命令
ABCD分别为1–4个电机的状态,每个字符有三种状态,F:向前,B:向后,S:刹车,
其他字符无效。abcd为四个电机的速度等级,范围0~100,即以字符的数值表示速度例如: 让四个电机全部以0%的制动量刹车 tSSSS0000 对应帧内容为 0xcd 0xeb 0xd7 0x09 0x74 0x53 0x53 0x53 0x53 0x00 0x00 0x00 0x00 对于小强硬件,只有前两个电机有效,第一个电机对应右轮,第二个电机对应左轮
第二部分是底层给上位机上传的数据:
也是数据帧的形式上传,上传频率为50HZ。帧格式和上面的命令帧一样,只是把命令内容换成了数据。
数据内容是由23个4字节小端模式二进制表示的数字组成,数字之间用空格0x20分开。这23个数字可以构成如下结构体,建议使用内存拷贝的方式直接将数据内容拷贝给这个结构体,然后以结构体形式访问数据,这样可以避免浮点数转换问题。具体代码请参考我们git开源仓库中的上位机ros驱动。typedef struct { int status;//小车状态,0表示未初始化,1表示正常,-1表示error float power;//电源电压【9 13】v float theta;//方位角,【0 360)° int encoder_ppr;//车轮1转对应的编码器个数 int encoder_delta_r;//右轮编码器增量, 个为单位 int encoder_delta_l;//左轮编码器增量, 个为单位 int encoder_delta_car;//两车轮中心位移,个为单位 int omga_r;//右轮转速 个每秒 int omga_l;//左轮转速 个每秒 float distance1;//第一个超声模块距离值 单位cm float distance2;//第二个超声模块距离值 单位cm float distance3;//第三个超声模块距离值 单位cm float distance4;//第四个超声模块距离值 单位cm float IMU[9];//mpu9250 9轴数据 unsigned int time_stamp;//时间戳 }UPLOAD_STATUS;
-
新买的BW-DR03只能使用单独电机控制指令控制,无法使用前进、后退、左转、右转命令。请问DR03版都是这样的了吗?