Navigation

    蓝鲸ROS机器人论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

    小强电脑与stm32底层串口通讯协议

    产品服务
    小强 串口 通讯协议
    2
    2
    4255
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • frank
      frank last edited by xiaoqiang

      串口波特率为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; 
      
      1 Reply Last reply Reply Quote 0
      • haowwuu
        haowwuu last edited by

        新买的BW-DR03只能使用单独电机控制指令控制,无法使用前进、后退、左转、右转命令。请问DR03版都是这样的了吗?

        1 Reply Last reply Reply Quote 0
        • First post
          Last post
        Copyright © 2015-2021 BlueWhale community