- 本协议适用于云擎(Alicia-M)系列相关产品。
- 本协议中的数值统一采用十进制或十六进制表示,以
0x 标识的为十六进制数。
云擎按键功能:
- 单击:切换电机模式,mit mode ↔ pv mode(掉电保存)
- 双击:按键灯快速闪烁,回放记录的动作(期间任意键停止回放)
- 长按:1~2s 内切换重力补偿模式(仅 mit 模式有效)
- 超长按:2s 以上按键灯慢闪烁,记录按键灯闪烁期间的动作(期间任意键停止记录)
串口通信参数:
- 有重力补偿帧率:830 Hz
- 无重力补偿帧率:1000 Hz
- 极限帧率:1630 Hz(适用于 C/C++)
上一次修改时间:2026年1月27日 19:00
注:该通讯协议文档及其相关功能的最终解释权由 玄雅科技有限公司 所有。
1. 协议基本构成
云系列产品的通讯协议由帧头、指令ID、功能码、有效数据长度、有效数据、校验位、帧尾 依次构成,各字段定义如下:
| 字段 | 定义说明 |
|---|
| 帧头 | 固定为 0xAA,标识数据帧的起始位置 |
| 指令ID | 控制指令唯一标识,每个ID对应特定控制逻辑或数据格式,便于接收端匹配处理流程 |
| 功能码 | 细化指令功能,区分读写操作、指定操作部位/功能类型,部分包含反馈标识 |
| 有效数据长度 | 后续"有效数据"字段的字节数 |
| 有效数据 | 关节位置、速度、加速度、力矩等业务数据,或配置参数信息 |
| 校验位 | CRC32校验,计算范围为「帧头之后、校验位之前的所有字节」,取低8位(1字节) |
| 帧尾 | 固定为 0xFF,标识数据帧的结束位置 |
校验位计算规则:Check = CRC32(指令ID + 功能码 + 有效数据长度 + 有效数据) & 0xFF
2. 指令ID目录
| 指令ID | 指令功能 |
|---|
| 0x01 | 获得固件版本、硬件版本和唯一标识码(机械类型) |
| 0x02 | 用户个性化设置(夹爪行程、定时上传电机姿态等) |
| 0x03 | 设置机械当前位姿为初始位姿 |
| 0x05 | 机械锁控制、重力补偿(关节力矩开关) |
| 0x06 | 关节数据获取与控制(MIT模式、线性轨迹速度等) |
| 0x09 | 机器人部位的失能和使能 |
| 0x11 | 关节控制幅值和驱动参数设置 |
| 0xEE | 错误反馈(数据帧校验、系统模式等错误提示) |
3. 详细指令说明
3.1 指令ID 0x01:版本与设备信息获取
获取设备固件版本、硬件版本和唯一标识码(含机械类型)。
字段定义
| 字段 | 取值/说明 |
|---|
| 指令ID | 0x01 |
| 功能码 | 0x7E(请求)、0xFE(反馈,即 0x80 + 0x7E) |
| 有效数据 | 唯一序列号(16字节 ASCII)+ 硬件版本(4字节)+ 固件版本(4字节) |
有效数据说明
| 项目 | 说明 |
|---|
| 唯一序列号(16字节 ASCII) | 格式为 AMFS 2511 29X1 0L23 |
| 硬件版本 | 4字节,如 v1.0.0 对应 0x00 00 00 64 |
| 固件版本 | 4字节,如 v1.1.0 对应 0x00 00 00 6E |
序列号格式说明:
| 字段片段 | 含义 |
|---|
AM | 云擎(产品系列代号) |
FS | 操作臂标准版(设备类型代号) |
2511 29 | 2025年11月29日(生产日期) |
X1 0L23 | 唯一代号(初始烧录时上位机赋予) |
云系列产品代号表
| 产品类别 | 代号 |
|---|
| 云擎 | AM |
| 云弈 | BM |
| 云犀 | GM |
| 示教臂 | L |
| 操作臂 | F |
| 标准款 | S |
| 强力款 | X |
| 夹爪行程100mm | H |
发送帧示例
注:占位符0xFE为固定填充值,无实际业务含义,仅用于满足帧结构完整性
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 占位符 | 校验位 | 帧尾 |
|---|
| 0xAA | 0x01 | 0x7E | 0x01 | 0xFE | crc32&0xFF | 0xFF |
返回帧示例
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 有效数据(24字节) | 校验位 | 帧尾 |
|---|
| 0xAA | 0x01 | 0xFE | 0x18 | 唯一序列号+硬件版本+固件版本 | crc32&0xFF | 0xFF |
3.2 指令ID 0x02:个性化设置
功能说明
支持用户个性化信息的读取与设置(掉电保存),包括夹爪行程、定时上传电机姿态等功能。
字段定义
| 字段 | 取值/说明 |
|---|
| 指令ID | 0x02 |
| 功能码 | 1字节;最高 bit 位区分读写,低7 bit 位指定功能类型 |
| 有效数据长度 | 根据操作类型和功能数量确定 |
| 有效数据 | 4字节小端序(功能当前值/目标值) |
功能码说明
| 位段 | 含义 |
|---|
| bit7 | 区分读写操作(0=读取,1=写入) |
| bit0 | 保留 |
| bit1 | 夹爪行程 |
| bit2 | 定时上传电机姿态 |
| bit3-bit6 | 待定 |
个性化功能 addr 表
| 功能名称 | addr | 默认值 |
|---|
| 夹爪量程 | 0x01 | 0x00 95mm(对应4字节小端序数据) |
| 定时上传电机姿态 | 0x02 | 0x00(不定时上传)/ 0x01(定时上传) |
发送帧示例1:读取前3个个性化设置值
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 占位符 | 校验位 | 帧尾 |
|---|
| 0xAA | 0x02 | 0x03 | 0x01 | 0xFE | crc32&0xFF | 0xFF |
返回帧示例1:读取反馈
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 有效数据(12字节) | 校验位 | 帧尾 |
|---|
| 0xAA | 0x02 | 0x03 | 0x08 | 功能1+功能2 | crc32&0xFF | 0xFF |
发送帧示例2:同时设置夹爪行程和定时上传电机姿态
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 夹爪行程值(4字节) | 定时上传值(4字节) | 校验位 | 帧尾 |
|---|
| 0xAA | 0x02 | 0x83 | 0x08 | 4字节小端序 | 4字节小端序 | crc32&0xFF | 0xFF |
返回帧示例2:设置反馈
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 接收结果(0x01=成功,0x00=失败) | 校验位 | 帧尾 |
|---|
| 0xAA | 0x02 | 0x83 | 0x01 | 0x01 | crc32&0xFF | 0xFF |
3.3 指令ID 0x03:位姿重置
设置指定部位的关节以当前位姿为初始位姿。
字段定义
| 字段 | 取值/说明 |
|---|
| 指令ID | 0x03 |
| 功能码 | 1字节,低8 bit 位表示目标部位 |
| 有效数据长度 | 2 × N(N 为功能码中置 1 的 bit 位数量,每个置 1 bit 对应2字节数据) |
| 有效数据 | 每个置 1 bit 对应2字节:起始关节ID + 起始关节的正方向偏移数量 |
| 反馈 | 成功返回 0x01,失败返回 0xEE 错误指令 |
功能码说明
有效数据说明
| 字节位置 | 含义 |
|---|
| 第1字节 | 起始关节ID |
| 第2字节 | 起始关节的正方向偏移数量 |
发送帧示例
设置示教臂(bit0=1)1~7关节、操作臂(bit1=1)2~5关节以当前位姿为初始位姿:
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 起始关节(示教) | 偏移数量(示教) | 起始关节(操作) | 偏移数量(操作) | 校验位 | 帧尾 |
|---|
| 0xAA | 0x03 | 0x03 | 0x04 | 0x00 | 0x07 | 0x01 | 0x04 | crc32&0xFF | 0xFF |
返回帧示例
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 接收状态 | 校验位 | 帧尾 |
|---|
| 0xAA | 0x03 | 0x83 | 0x01 | 0x01 | crc32&0xFF | 0xFF |
3.4 指令ID 0x05:肢体力矩控制
设置指定部位关节的力矩状态(关节力矩开关),卸力后设备进入重力补偿状态。
字段定义
| 字段 | 取值/说明 |
|---|
| 指令ID | 0x05 |
| 功能码 | 1字节,低8 bit 位表示目标部位 |
| 有效数据长度 | 2 × N(N 为功能码中置 1 的 bit 位数量,不含 bit7) |
| 有效数据 | 每个置 1 bit 对应2字节:起始关节ID + 起始关节的正方向偏移数量 |
| 云擎关节数量 | 7 个 |
| 反馈 | 成功返回 0x01,失败返回 0xEE 错误指令 |
功能码说明
有效数据说明
| 字节位置 | 含义 |
|---|
| 第1字节 | 起始关节ID |
| 第2字节 | 起始关节的正方向偏移数量 |
发送帧示例
设置示教臂(bit0=1)1~6关节锁定、操作臂(bit1=1)2~5关节锁定:
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 起始关节(示教) | 偏移数量(示教) | 起始关节(操作) | 偏移数量(操作) | 校验位 | 帧尾 |
|---|
| 0xAA | 0x05 | 0x03 | 0x04 | 0x01 | 0x06 | 0x02 | 0x04 | crc32&0xFF | 0xFF |
返回帧示例
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 接收状态 | 校验位 | 帧尾 |
|---|
| 0xAA | 0x05 | 0x83 | 0x01 | 0x01 | crc32&0xFF | 0xFF |
3.5 指令ID 0x06:关节与夹具状态控制
功能说明
分为「状态获取」和「状态控制」两类操作,支持获取/设置所有关节和夹具的指定数据(位置、速度、力矩等)及外设运行状态。
字段定义
| 字段 | 取值/说明 |
|---|
| 指令ID | 0x06 |
| 功能码 | 1字节;最高 bit 位区分读写,低7 bit 位指定部位类型 |
| 有效数据长度 | 2字节(偏移属性)+ 偏移数量 × 关节数量 × 数据字节数 + 1字节(运行状态) |
| 有效数据 | 数据帧属性 + 偏移数量 + 关节数据 + 运行状态 |
功能码说明
| 位段 | 含义 |
|---|
| bit7 | 区分读写操作(0=读取,1=写入) |
| bit0 | 示教臂 |
| bit1 | 操作臂 |
有效数据说明
| 顺序 | 字段 | 说明 |
|---|
| 1 | 数据帧属性(1字节) | 最高 bit 位 = 反馈帧标识(0=非反馈,1=反馈),用于防止数据混淆 |
| 2 | 偏移数量(1字节) | 指定起始地址的正方向偏移数量 |
| 3 | 关节数据 | 根据自定义数据表的 addr 和数据位数确定,12位数据采用2字节存储(高4位保留,低12位为有效数据) |
| 4 | 运行状态(1字节) | 各 bit 位定义见下表 |
运行状态说明
| 部位 | bit位含义 |
|---|
| 示教臂 | bit0=锁定,bit1=同步,bit2-bit5=待定,bit6=夹具过高力矩运动方向锁定(0x07),bit7=电机错误(0x08) |
| 操作臂 | bit0=单击,bit1=双击,bit2=长按,bit3=重复长按,bit4-bit5=待定,bit6=夹具过高力矩运动方向锁定(0x07),bit7=电机错误(0x08) |
自定义数据 addr 表
| 目标数据 | 数据位数 | addr | 数据单位 |
|---|
| 当前位置/期望位置 | 16 | 0x00 | rad |
| 当前速度/期望速度 | 12 | 0x01 | rad/s |
| 当前力矩/额外力矩 | 12 | 0x02 | N/m |
| 位置环kp | 16 | 0x03 | 0~500 |
| 速度环kd | 16 | 0x04 | 0~5 |
| 线性轨迹速度 | 12 | 0x05 | rad/s |
发送帧示例1:状态获取(读取示教臂每个关节0~4地址数据)
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 起始地址 | 偏移数量 | 校验位 | 帧尾 |
|---|
| 0xAA | 0x06 | 0x02 | 0x02 | 0x00 | 0x05 | crc32&0xFF | 0xFF |
返回帧示例1:状态获取反馈
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 起始地址 | 偏移数量 | 关节数据(70字节) | 运行状态 | 校验位 | 帧尾 |
|---|
| 0xAA | 0x06 | 0x02 | 0x49 | 0x80 | 0x05 | motor1~motor7的Pos/Vel/力矩/kp/kd | 0x00 | crc32&0xFF | 0xFF |
发送帧示例2:状态控制(设置操作臂关节数据)
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 起始地址 | 偏移数量 | 关节数据(70字节) | 校验位 | 帧尾 |
|---|
| 0xAA | 0x06 | 0x82 | 0x48 | 0x00 | 0x05 | motor1~motor7的目标Pos/Vel等 | crc32&0xFF | 0xFF |
返回帧示例2:状态控制反馈
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 起始地址 | 偏移数量 | 接收结果(0x01=成功,0x00=失败) | 校验位 | 帧尾 |
|---|
| 0xAA | 0x06 | 0x82 | 0x03 | 0x80 | 0x05 | 0x01 | crc32&0xFF | 0xFF |
3.6 指令ID 0x09:机器人部位失能/使能
设置指定部位的关节使能或失能状态。
字段定义
| 字段 | 取值/说明 |
|---|
| 指令ID | 0x09 |
| 功能码 | 1字节;最高 bit 位区分读写,低7 bit 位指定部位类型 |
| 有效数据长度 | 0x01(仅状态值) |
| 有效数据 | 使能=0x01,失能=0x00 |
| 校验位 | CRC32计算帧头之后、校验位之前的所有字节,取低8位 |
功能码说明
| 位段 | 含义 |
|---|
| bit7 | 区分读写操作(0=读取,1=写入) |
| bit0 | 示教臂 |
| bit1 | 操作臂 |
发送帧示例
设置操作臂(bit1=1)的1~7号电机为使能(请求帧):
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 设置的部位状态 | 校验位 | 帧尾 |
|---|
| 0xAA | 0x09 | 0x82 | 0x01 | 0x01 | crc32&0xFF | 0xFF |
返回帧示例
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 设置结果 | 校验位 | 帧尾 |
|---|
| 0xAA | 0x09 | 0x82 | 0x01 | 0x01 | crc32&0xFF | 0xFF |
3.7 指令ID 0x11:关节控制幅值和驱动参数设置
控制指定关节的控制幅值(加速度、减速度等)和驱动参数(PID参数、控制模式等)。
字段定义
| 字段 | 取值/说明 |
|---|
| 指令ID | 0x11 |
| 功能码 | 1字节;最高 bit 位区分读写,低7 bit 位指定部位类型 |
| 有效数据长度 | 0x07(起始电机ID + 偏移数量 + 参数地址 + 4字节参数) |
| 有效数据 | 起始电机ID索引 + 偏移电机数量 + 指定参数地址 + 4字节小端序参数 |
功能码说明
| 位段 | 含义 |
|---|
| bit7 | 区分读写操作(0=读取,1=写入) |
| bit0 | 示教臂 |
| bit1 | 操作臂 |
有效数据说明
| 顺序 | 字段 | 说明 |
|---|
| 1 | 起始电机ID索引(1字节) | 起始电机编号 |
| 2 | 偏移电机数量(1字节) | 指定连续设置的电机数量 |
| 3 | 指定参数地址(1字节) | 见下方电机参数 addr 表 |
| 4 | 4字节小端序参数 | uint32_t 或 float 类型 |
电机参数 addr 表
| 电机参数内容 | 数据类型 | addr | 取值范围/说明 |
|---|
| 加速度 | float | 0x05 | - |
| 减速度 | float | 0x06 | - |
| MID 反馈ID | uint32_t | 0x08 | - |
| 接收ID | uint32_t | 0x09 | - |
| 控制模式 | uint32_t | 0x0B | 0x01=MIT模式,0x02=位置速度模式 |
| 位置映射范围 | float | 0x16 | - |
| 速度映射范围 | float | 0x17 | - |
| 扭矩映射范围 | float | 0x18 | - |
| 速度环Kp | float | 0x1A | - |
| 速度环Ki | float | 0x1B | - |
| 位置环Kp | float | 0x1C | - |
| 位置环Ki | float | 0x1D | - |
发送帧示例:更改电机模式为位置速度模式(0x02)
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 起始电机ID索引 | 偏移电机数量 | 指定的参数地址 | 4字节小端序参数 | 校验位 | 帧尾 |
|---|
| 0xAA | 0x11 | 0x82 | 0x07 | 0x01 | 0x07 | 0x0B | 02 00 00 00 | crc32&0xFF | 0xFF |
返回帧示例
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 起始电机ID索引 | 偏移电机数量 | 指定的参数地址 | 设置状态(0x01=成功) | 校验位 | 帧尾 |
|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 | 0x07 | 0x8B | 0x01 | crc32&0xFF | 0xFF |
3.8 指令ID 0xEE:错误反馈
反馈数据帧处理过程中的错误(校验错误、系统模式错误等)。
字段定义
| 字段 | 取值/说明 |
|---|
| 指令ID | 0xEE |
| 功能码 | 错误类型对应的 addr 地址 |
| 有效数据长度 | 根据错误类型确定 |
| 有效数据 | 错误相关的辅助信息(如错误数据帧长度、校验位值等) |
错误类型 addr 表
| 错误描述 | 功能码(addr) | 有效数据(携带提示词) |
|---|
| 数据头/尾校验错误(帧头≠0xAA或帧尾≠0xFF) | 0x00 | 错误数据帧的实际长度 |
| 数据长度校验错误(有效数据长度与实际不符) | 0x01 | 错误数据帧的实际长度 |
| 数据帧校验错误(CRC32校验不通过) | 0x02 | 下位机计算的校验位值 |
| 系统模式错误(检测机械臂类型失败) | 0x03 | 当前下位机检测到的机械臂类型 |
| 电机角度限位中 | 0x04 | 角度限位的电机ID号 |
| 设定的motorData偏移与部位数量不符 | 0x05 | 有效数据的当前数据块长度 |
| 设定的insID偏移超过可设定的最大地址 | 0x06 | 起始地址+偏移的计算结果 |
返回帧示例:数据帧校验位错误(下位机计算校验位为0xF1)
| 帧头 | 指令ID | 功能码 | 有效数据长度 | 携带数据(校验位值) | 校验位 | 帧尾 |
|---|
| 0xAA | 0xEE | 0x02 | 0x01 | 0xF1 | crc32&0xFF | 0xFF |