ROS机器人底盘(3)-通讯协议

作者: PIBOT导航机器人 | 来源:发表于2017-08-02 09:44 被阅读371次

    说明

    底盘驱动板Ardunio Mega2560与树莓派通过串口通讯

    硬件板卡通讯协议

    板卡通讯协议使用串口进行通信,每条消息包含消息头和消息体校验码三部分,所有数字采用小端序传递

    消息定义

    每条消息都由 [消息头]+[消息体]+[校验码] 3部分组成,每条消息最大长度为3+255+1字节,消息体最大255字节

    消息头

    消息头C风格定义如下:

    struct head
    {
        unsigned char flag;// 头部标记,固定值:0X5A
        unsigned char msg_id;// 消息ID,表示消息具体作用,决定消息体具体格式
        unsigned char length;// 消息体长度
    }
    

    校验码

    校验码固定占一个字节空间,为消息头+消息体 每个字节相加得到的结果取低8位的值

    消息定义

    主板

    msg id name
    0 请求:固件版本
    1 请求:设置机器人配置参数
    2 请求:获取机器人配置参数
    3 请求:初始化里程
    4 请求:设置机器人实时速度
    5 请求:获取里程计信息
    6 请求:获取PID调速数据
    • 请求:固件信息

      • 方向:MASTER->Board
      • 内容:
      • 回应:固件信息
        • 方向:Board->MASTER
        • 内容:
        {
            char version[16]; //固件版本
            char time[16];  //构建时间
        }
        
    • 请求:设置机器人配置参数(出厂配置)

      • 方向:MASTER->Board
      • 内容:
      {
          union
          {
              char buff[64];
              struct
              {   
                  unsigned short wheel_diameter;   //轮子直径  mm
                  unsigned short wheel_track;      //差分:轮距, 三全向轮:直径,四全向:前后轮距+左右轮距 mm
                  unsigned short encoder_resolution;  //编码器分辨率
                  unsigned char do_pid_interval;         //pid间隔 (ms)
                  unsigned short kp;
                  unsigned short ki;
                  unsigned short kd;
                  unsigned short ko;                  //pid参数比例
                  unsigned short cmd_last_time;       //命令持久时间ms 超过该时间会自动停止运动
              }
          }
      }
      
      • 回应:设置机器人配置参数
        • 方向:Board->MASTER
        • 内容:无
    • 请求:获取机器人配置参数(出厂配置)

      • 方向:MASTER->Board
      • 内容:
        • 方向:MASTER->Board
        • 内容:同设置
    • 请求:初始化里程

      • 方向:MASTER->Board
      • 内容:
      • 回应:初始化里程结果
        • 方向:Board->MASTER
        • 内容:无
    • 请求:设置机器人实时速度

      • 方向:MASTER->Board
      • 内容:
      {
          short v_liner_x; //线速度 前>0 cm/s
          short v_liner_y; //差分轮 为0  cm/s
          short v_angular_z; //角速度 左>0 0.01rad/s  100 means 1 rad/s
      }
      
      • 回应:设置机器人实时速度结果
        • 方向:Board->MASTER
        • 内容:无
    • 请求:里程计信息

      • 方向:MASTER->Board
      • 内容:
    • 回应:里程计信息

      • 方向:Board->MASTER
      • 内容:
      {
          short v_liner_x;      //线速度 前>0 后<0  cm/s
          short v_liner_y;      //差分轮 为0        cm/s
          short v_angular_z;    //角速度 左>0 右<0  0.01rad/s   100 means 1 rad/s
          long x;              //里程计坐标x       cm (这里long为4字节,下同)
          long y;              //里程计坐标y       cm
          short yaw;            //里程计航角        0.01rad     100 means 1 rad
      }
      
    • 请求:获取PID调速数据

      • 方向:MASTER->Board
      • 内容:
      • 回应:PID调速数据
        • 方向:Board->MASTER
        • 内容:
        {
            long input[4];  //各轮子驱动输入值
            long output[4]; //个轮子输出值
        }
        

    相关文章

      网友评论

        本文标题:ROS机器人底盘(3)-通讯协议

        本文链接:https://www.haomeiwen.com/subject/vrcjlxtx.html