ROS交流群
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; 
    

Log in to reply