机器人控制 · 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]
0x01APP→设备移动控制[vx,vy,vr,0,0]
0x02APP→设备紧急停止[0xFF,0xFF,0xFF,0xFF,0xFF]
0x03APP→设备步态切换[gaitType,0,0,0,0]
0x04APP→设备预设动作[actionType,0,0,0,0]
0x05APP→设备设备类型查询[0,0,0,0,0]
0x06APP→设备测试开始[stepId,0,0,0,0]

校准命令

命令码方向名称数据格式
0x10APP→设备0 位校准(粗校准)[0x01,0,0,0,0]
0x11APP→设备精校准[motorId,offsetByte,0,0,0]
0x12APP→设备批量偏移(12 舵机分帧)[partIdx,off0,off1,off2,off3]
0x13APP→设备读取校准[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]

参数命令

命令码方向名称数据格式
0x30APP→设备速度设置[speed,0,0,0,0]
0x31APP→设备限位设置[motorId,minAngle,maxAngle,0,0]
0x32APP→设备参数设置[paramId,paramVal,0,0,0]

四、设备类型编码

设备通过 0x22 设备类型上报帧告知 APP 自身类型:

编码类型
0x01四足
0x02双足
0x03轮足
0x04机械臂

五、值编码

六、错误码(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 预览与动作编排支持。