无人小车通讯协议

下位机到上位机

日志

帧头(2位) 类型(1位) 数据长度(1位) 数据位(未知) 校验位
0xFE 0xCE 0xf1 数据位+1 0xff

IMU数据传输

帧头(2位) 类型(1位) 数据长度(1位) 数据位(acc, 2位+2位+2位) 数据位(角速度, 2位+2位+2位) 数据位(磁场 2位+2位+2位) 校验位
0xFE 0xCE 0x11 0x13 x,y,z x,y,z x,y,z 0xff

数据说明

  • acc数据获得的是short类型数据,需要进行缩放,除以164.0
  • 角速度数据获得的是short类型数据,需要进行缩放,除以16.4

万向轮结构速度传输

帧头(2位) 类型(1位) 数据长度(1位) 数据位(linear, 2位,short) 数据位(angle,2位,short) 校验位
0xFE 0xCE 0x12 0x05 0x00 0x00 0x00 0x00 0xff

数据说明

  • linear: 线速度,单位m/s,short数据类型, 获得后数据需要除以1000

  • angle: 角速度,单位 rad/s, short数据类型, 获得后数据需要除以1000

电池信息传输

帧头(2位) 类型(1位) 数据长度(1位) 数据位(voltage, 2位,short) 校验位
0xFE 0xCE 0x13 0x03 0x00 0x00 0xff

数据说明

  • voltage: 当前电池电压。单位是v。short数据类型,获得后的数据需要除以100。

格式说明

帧头

下位机向上位机发送消息,统一帧头为0xFE,0xCE

数据类型

表示是什么类型的消息

数据长度

数据长度描述的是数据位和校验位的长度的

校验位

(数据类型+数据长度 + 数据位每位)的结果取低位(&0x00ff)

上位机到下位机

LED灯控制

请求

帧头(2位) 类型(1位) 数据长度(1位) 命令位(1位) 数据位(id, 1位) 校验位
0xAB 0xBC 0x01 0x03 0x00 0x01 0x05

响应

帧头(2位) 类型(1位) 数据长度(1位) 数据位(id,1位) 数据位(状态,1位) 校验位
0xFE 0xCE 0x01 0x03 0x01 0x01 0x06

命令

  • 0x00: 关
  • 0x01: 开
  • 0x02: 获取状态

示例

  • 关: 0xAB 0xBC 0x01 0x03 0x00 0x01 0x05
  • 开: 0xAB 0xBC 0x01 0x03 0x01 0x01 0x06
  • 获取状态: 0xAB 0xBC 0x01 0x03 0x02 0x01 0x07

id

请求的唯一标记,响应时会带这个标记回去

蜂鸣器控制

请求

帧头(2位) 类型(1位) 数据长度(1位) 命令位(1位) 数据位(id, 1位) 校验位
0xAB 0xBC 0x02 0x03 0x00 0x01 0x06

响应

帧头(2位) 类型(1位) 数据长度(1位) 数据位(id,1位) 数据位(状态,1位) 校验位
0xFE 0xCE 0x02 0x03 0x01 0x01 0x07

命令

  • 0x00: 关
  • 0x01: 开
  • 0x02: 获取状态

示例

  • 关: 0xAB 0xBC 0x02 0x03 0x00 0x01 0x06
  • 开: 0xAB 0xBC 0x02 0x03 0x01 0x01 0x07
  • 获取状态: 0xAB 0xBC 0x02 0x03 0x02 0x01 0x08

id

请求的唯一标记,响应时会带这个标记回去

轮子转速控制PWM(用于测试阶段)

请求

帧头(2位) 类型(1位) 数据长度(1位) 数据位(1位,电机编号) 数据位(2位, pwm值, short) 校验位
0xAB 0xBC 0x21 0x04 0x01 0xA0 0x0F 0xD5

响应

电机编号

  • 0x01: 后轮 左侧
  • 0x02: 后轮 右侧
  • 0x03: 前轮 左侧
  • 0x04: 前轮 右侧

万向轮结构速度控制

请求

帧头(2位) 类型(1位) 数据长度(1位) 数据位(2位,线速度, short) 数据位(2位, 角速度, short) 校验位
0xAB 0xBC 0x22 0x05 0x01 0x22 0xA0 0x0F 0xD5

响应

速度单位

  • 线速度:传入的是short类型,是放大1000倍后的数据。速度值本应该是double类型,此处要的是放大1000倍后的short类型数据。
  • 角速度:传入的是short类型,是放大1000倍后的数据。速度值本应该是double类型,此处要的是放大1000倍后的short类型数据。

示例

  • 0xAB 0xBC 0x22 0x05 0xC8 0x00 0x00 0x00 0xEF
  • 0xab 0xbc 0x22 0x5 0xf4 0x1 0x0 0x0 0x1c
  • 0xab 0xbc 0x22 0x5 0xf4 0x1 0xf4 0x1 0x11
  • 0xab 0xbc 0x22 0x5 0x20 0x3 0x0 0x0 0x4a

舵机控制

请求

帧头(2位) 类型(1位) 数据长度(1位) 数据位(1位,舵机编号) 数据位(2位, 角度值, short) 校验位
0xAB 0xBC 0x31 0x01 0xaa 0xbb

响应

舵机编号

  • 0x01: 第一路舵机
  • 0x02: 第二路舵机

角度值

舵机旋转精度为0.1度。此处传入的数据类型为short,如果要旋转30度,传入的值为300。如果旋转22.5度,传入的值为225。此处传入的值放大10倍。