说明
底盘驱动板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]; //个轮子输出值 }
网友评论