机器人控制 · 10 字节二进制通信协议
机器人控制小程序与设备之间使用固定 10 字节的二进制帧通信,BLE 蓝牙与 WiFi(WebSocket)两种链路共用同一套帧格式。帧结构为 0xAA 0x55 帧头 + 1 字节命令码 + 1 字节序列号 + 5 字节数据 + 1 字节校验和,共 18 条命令,分控制、校准、上报、参数四组。
机器人控制小程序与设备之间使用固定 10 字节的二进制帧通信,BLE 蓝牙与 WiFi(WebSocket)两种链路共用同一套帧格式,共 18 条命令。
一、帧结构(10 字节)
每一帧固定 10 字节,结构如下:
| 偏移 | 字段 | 长度 | 说明 |
|---|---|---|---|
| 0 | 帧头 | 1 | 固定 0xAA |
| 1 | 帧头 | 1 | 固定 0x55 |
| 2 | 命令码 | 1 | 见下方命令表(18 条) |
| 3 | 序列号 | 1 | 自增,0~255 循环 |
| 4-8 | 数据区 | 5 | 数据区,各命令含义不同 |
| 9 | 校验和 | 1 | (字节 2~8 累加) & 0xFF |
帧头
0xAA 0x55 用于帧同步;序列号用于匹配请求与响应;校验和只覆盖字节 2~8(命令码、序列号、数据区),不包含帧头。二、校验和算法
校验和为命令码、序列号与 5 字节数据区共 7 个字节累加后取低 8 位:
// JavaScript 参考实现
function checksum(frame) {
let sum = 0;
for (let i = 2; i <= 8; i++) sum += frame[i];
return sum & 0xFF;
}
// 构造一帧:紧急停止
const frame = [0xAA, 0x55, 0x02, seq, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0];
frame[9] = checksum(frame);
三、命令表(18 条)
按命令码高 4 位分为四组:0x0x 控制、0x1x 校准、0x2x 上报、0x3x 参数。
控制命令
| 命令码 | 方向 | 名称 | 数据格式 |
|---|---|---|---|
0x00 | 双向 | 心跳 / 状态查询 | [0,0,0,0,0] |
0x01 | APP→设备 | 移动控制 | [vx,vy,vr,0,0] |
0x02 | APP→设备 | 紧急停止 | [0xFF,0xFF,0xFF,0xFF,0xFF] |
0x03 | APP→设备 | 步态切换 | [gaitType,0,0,0,0] |
0x04 | APP→设备 | 预设动作 | [actionType,0,0,0,0] |
0x05 | APP→设备 | 设备类型查询 | [0,0,0,0,0] |
0x06 | APP→设备 | 测试开始 | [stepId,0,0,0,0] |
校准命令
| 命令码 | 方向 | 名称 | 数据格式 |
|---|---|---|---|
0x10 | APP→设备 | 0 位校准(粗校准) | [0x01,0,0,0,0] |
0x11 | APP→设备 | 精校准 | [motorId,offsetByte,0,0,0] |
0x12 | APP→设备 | 批量偏移(12 舵机分帧) | [partIdx,off0,off1,off2,off3] |
0x13 | APP→设备 | 读取校准 | [0,0,0,0,0] |
上报命令
| 命令码 | 方向 | 名称 | 数据格式 |
|---|---|---|---|
0x20 | 设备→APP | 状态上报 | [volt/10,curr/10,temp+40,mode,errCode] |
0x21 | 设备→APP | 错误上报 | [errCode,motorId,errLevel,0,0] |
0x22 | 设备→APP | 设备类型上报 | [deviceType,dof,servoCount,0,0] |
0x23 | 设备→APP | 测试结果上报 | [stepId,result,errCode,0,0] |
参数命令
| 命令码 | 方向 | 名称 | 数据格式 |
|---|---|---|---|
0x30 | APP→设备 | 速度设置 | [speed,0,0,0,0] |
0x31 | APP→设备 | 限位设置 | [motorId,minAngle,maxAngle,0,0] |
0x32 | APP→设备 | 参数设置 | [paramId,paramVal,0,0,0] |
四、设备类型编码
设备通过 0x22 设备类型上报帧告知 APP 自身类型:
| 编码 | 类型 |
|---|---|
0x01 | 四足 |
0x02 | 双足 |
0x03 | 轮足 |
0x04 | 机械臂 |
五、值编码
- 速度:
-100 ~ 100映射为0 ~ 255,0x80表示 0 - 偏移:
-90° ~ +90°映射为0 ~ 255 - 电压上报:
volt/10(如 74 表示 7.4V) - 温度上报:
temp+40(如 82 表示 42°C)
六、错误码(0x01 ~ 0x08)
设备通过 0x21 错误上报帧主动上报异常,APP 侧映射为可读提示与排查建议:
| 错误码 | 含义 | 排查提示 |
|---|---|---|
0x01 | 通信超时 | 检查蓝牙 / WiFi 连接是否稳定 |
0x02 | 舵机过载 | 检查舵机是否被卡住,减轻负载 |
0x03 | 舵机堵转 | 检查舵机安装是否正确 |
0x04 | 电压过低 | 请充电后再测试 |
0x05 | 电压过高 | 请检查电源模块 |
0x06 | 温度过高 | 请等待舵机冷却 |
0x07 | 校准失败 | 请重新进行零位校准 |
0x08 | 参数错误 | 请检查设备配置参数 |
七、监控阈值
| 指标 | 警告 | 严重 |
|---|---|---|
| 电压 | < 6.5V | < 6.0V |
| 温度 | > 60°C | > 70°C |
本节协议适用于自研与开源机型设备端。宇树、ANYmal、傅利叶、云深处等商用机型官方走自有 SDK,不在本协议直连范围内,机器人控制平台对其提供 URDF 模型导入、3D 预览与动作编排支持。