6. PIBOT的通讯协议

来源:互联网 发布:编程一小时网站登录 编辑:程序博客网 时间:2024/06/05 15:48

说明

底盘驱动板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
- 内容:
C
{
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]; //个轮子输出值}
原创粉丝点击