导航

    蓝鲸ROS机器人论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 热门
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

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

    产品服务
    小强 串口 通讯协议
    2
    2
    4998
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • frank
      frank 最后由 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 条回复 最后回复 回复 引用 0
      • haowwuu
        haowwuu 最后由 编辑

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

        1 条回复 最后回复 回复 引用 0
        • 1 / 1
        • First post
          Last post
        Copyright © 2015-2023 BlueWhale community