Stark3 (Revo 3) 通信协议
1. 文档说明
1.1 文档目的
本文档用于指导用户通过 RS485 或 CAN FD 接口与 Stark3 (Revo 3) 灵巧手进行通信,实现设备配置、运动控制、状态获取及触觉数据读取等功能。
1.2 支持通信接口
- RS485
- CAN FD
2. Modbus RTU 通信协议
Stark3 灵巧手的 RS485 通信采用标准的 Modbus RTU 协议格式。
2.1 数据帧格式
| Header / Device ID | Function Code | Data | CRC16 |
|---|---|---|---|
| 1 Byte | 1 Byte | N Bytes | 2 Bytes |
2.2 字段说明
| 字段 | 说明 |
|---|---|
| Header/Device ID | 从机设备地址(ID) |
| Function Code | Modbus 功能码(如 03H:读保持寄存器;04H:读输入寄存器;06H:写单个保持寄存器;10H:写多个保持寄存器) |
| Data | 数据区,具体取决于功能码和寄存器地址 |
| CRC16 | CRC-16 (Modbus) 校验和,低字节在前,高字节在后 |
3. CAN FD 封装格式
当使用 CAN FD 接口时,底层仍采用 Modbus 协议的数据,并封装在 CAN FD 扩展帧(29-bit 标识符)中传输。
3.1 CAN FD ID 格式
CAN FD 29-bit ID 按如下位域分配:
| Bit 位 | 内容 | 说明 |
|---|---|---|
| 28 ~ 24 | 保留位 | 固定为 0 |
| 23 ~ 16 | Device ID | 从机设备 ID |
| 15 ~ 8 | Master ID | 主机 ID(由主机自行定义) |
| 7 ~ 0 | Payload Length | 实际发送的有效数据长度(Byte) |
Device ID 默认值
| 设备类型 | 默认 Device ID (十进制) | 默认 Device ID (十六进制) |
|---|---|---|
| 左手 | 126 | 0x7E |
| 右手 | 127 | 0x7F |
3.2 帧格式定义
主机发送帧
| CAN FD ID(29-bit) | 数据段(Payload, ≤ 64 Bytes) |
|---|---|
| Device ID + Master ID + Payload Length | 完整的 Modbus RTU 数据帧(包含校验等内容) |
设备回复帧
| CAN FD ID(29-bit) | 数据段(Payload, ≤ 64 Bytes) |
|---|---|
| Device ID + Master ID + Payload Length | 完整的 Modbus RTU 响应数据帧 |
4. 寄存器规划
Stark3 的寄存器按功能划分为以下区间:
| 地址范围 | 寄存器类型 | 功能类别 |
|---|---|---|
| 0 ~ 199 | Holding Register | 系统配置 |
| 200 ~ 399 | Holding Register | 电机参数 |
| 1000 ~ 1599 | Holding Register | 控制指令 |
| 1800 ~ 1999 | Input Register | 系统状态 |
| 2030 ~ 2999 | Input Register | 电机反馈 |
| 3000 ~ 3999 | Input Register | 设备信息 |
| 4000 ~ 5000 | Input Register | 触觉数据 |
5. 系统配置寄存器
系统配置相关寄存器(地址范围 0~199)支持读写属性配置。
| 地址 | 名称 | 属性 | 说明 |
|---|---|---|---|
| 60 ~ 80 | 电机零点偏置 | RW | 单位:0.01°(实际值 × 100 传输)。共 21 个关节。 |
| 101 | 左右手标识 | RO | 1 = 右手,2 = 左手 |
| 102 | 手指恢复默认 | WO | 写入特定值恢复手指默认参数 |
| 105 | 蜂鸣器开关 | RW | 0 = 关闭,1 = 开启 |
| 106 | 振动马达开关 | RW | 0 = 关闭,1 = 开启 |
| 107 | 触屏功能开关 | RW | 0 = 关闭,1 = 开启 |
| 108 | 设备 ID | RW | 默认左手 126,右手 127 |
| 109 | RS485 波特率 | RW | 参见 5.1 RS485 波特率配置 |
| 110 | CAN FD 波特率 | RW | 参见 5.2 CAN FD 波特率配置 |
| 112 | 开机自动校准 | RW | 0 = 关闭,1 = 开启 |
| 118 | 示教模式 | RW | 写入 1 进入,写入 0 退出 |
| 119 | 软件急停 | RW | 写入 1 急停,写入 0 恢复 |
| 131 | 电机错误自动清除 | RW | 0 = 关闭(默认),1 = 开启 |
5.1 RS485 波特率配置
| 寄存器值 | 波特率 |
|---|---|
| 0 | 1 Mbps |
| 1 | 2 Mbps |
| 2 | 3 Mbps |
| 3 | 5 Mbps |
5.2 CAN FD 波特率配置
| 寄存器值 | 波特率 |
|---|---|
| 0 | 1 Mbps |
| 1 | 2 Mbps |
| 2 | 4 Mbps |
| 3 | 5 Mbps |
6. 电机参数
电机相关参数的数据单位规范如下:
- 位置单位:度(°)
- 速度单位:转每分(rpm)
- 电流单位:毫安(mA)
💡 数值传输缩放说明
为了保证传输精度,位置和速度数值均采用 实际值 × 100 的整数形式进行传输。
- 角度示例:目标位置为
90.00°→ 寄存器传输数值为9000。 - 速度示例:目标速度为
50.00 rpm→ 寄存器传输数值为5000。 - 电流示例:保护电流直接使用物理值(mA),不进行放大。
6.1 全局保护电流
| 地址 | 内容 | 属性 | 说明 |
|---|---|---|---|
| 200 | 所有关节保护电流(mA) | WO | 一键配置所有 21 个关节的保护电流阈值 |
6.2 单关节保护电流
| 地址 | 内容 | 属性 | 说明 |
|---|---|---|---|
| 201 ~ 221 | 单关节保护电流(mA) | RW | 对应关节 0 至 20 的最大允许电流阈值 |
6.3 关节运动限制
| 地址 | 内容 | 属性 | 说明 |
|---|---|---|---|
| 240 ~ 260 | 关节最小位置限制(° × 100) | RW | 对应关节 0 至 20 的物理最小位置 |
| 270 ~ 290 | 关节最大位置限制(° × 100) | RW | 对应关节 0 至 20 的物理最大位置 |
| 300 ~ 320 | 关节最小速度限制(rpm × 100) | RW | 对应关节 0 至 20 的最小速度阈值 |
| 321 ~ 341 | 关节最大速度限制(rpm × 100) | RW | 对应关节 0 至 20 的最大速度阈值 |
7. 控制指令
Stark3 灵巧手支持 MIT 阻抗控制模式。
7.1 MIT 控制公式
数据缩放格式
, , Position, Velocity 均采用 实际值 × 100 传输。- Current (
) 采用实际物理值(mA)直接传输,不进行放大。
控制参量传输示例:
期望值 = 15.00 传输值 = 1500 期望值 = 0.50 传输值 = 50- Position 期望值 = 90.00°
传输值 = 9000 - Velocity 期望值 = 50.00 rpm
传输值 = 5000 - Current (
) 期望值 = 1000 mA 传输值 = 1000
7.2 单关节 MIT 控制
可以通过写入特定的寄存器独立控制某个关节的 MIT 参数:
| 地址 | 参数名称 | 说明 |
|---|---|---|
| 1050 | 关节 ID | 目标控制关节的编号 (0 ~ 20) |
| 1051 | 比例刚度系数(实际值 × 100) | |
| 1052 | 微分阻尼系数(实际值 × 100) | |
| 1053 | Position | 期望位置(° × 100) |
| 1054 | Velocity | 期望速度(rpm × 100) |
| 1055 | Current ( | 前馈电流(mA) |
7.3 多关节 MIT 控制
可以通过连续的寄存器区域一次性下发多个或全部关节的 MIT 控制参数:
| 地址范围 | 对应关节 | 参数内容 | 说明 |
|---|---|---|---|
| 1100 ~ 1104 | 关节 0 | [Kp, Kd, Pos, Vel, τ_ff] | 包含 5 个连续寄存器 |
| 1105 ~ 1109 | 关节 1 | [Kp, Kd, Pos, Vel, τ_ff] | 包含 5 个连续寄存器 |
| ... | ... | ... | ... |
| 1195 ~ 1199 | 关节 19 | [Kp, Kd, Pos, Vel, τ_ff] | 包含 5 个连续寄存器 |
| 1200 ~ 1204 | 关节 20 | [Kp, Kd, Pos, Vel, τ_ff] | 包含 5 个连续寄存器 |
7.4 多关节单参数控制
如果只想批量修改所有关节的某一个特定 MIT 参数,可以使用以下连续的寄存器列表:
| 地址范围 | 参数类别 | 内容说明 |
|---|---|---|
| 1300 ~ 1320 | 21 个手指关节的比例系数 | |
| 1321 ~ 1341 | 21 个手指关节的阻尼系数 | |
| 1342 ~ 1362 | POS 列表 | 21 个手指关节的期望位置 |
| 1363 ~ 1383 | Vel 列表 | 21 个手指关节的期望速度 |
| 1384 ~ 1404 | 21 个手指关节的前馈电流值 |
7.5 四指 MIT 控制
用于独立且高效地更新食指、中指、无名指或小指的控制参数:
| 地址 | 参数名称 | 说明与取值内容 |
|---|---|---|
| 1520 | 手指索引 | 1 = 食指,2 = 中指,3 = 无名指,4 = 小指 |
| 1521 ~ 1540 | 参数列表 | 共 20 个寄存器,包含四个关节的参数: 1. 侧摆 MCP [Kp, Kd, Pos, Vel, τ_ff] (5 寄存器)2. MCP屈伸 [Kp, Kd, Pos, Vel, τ_ff] (5 寄存器)3. PIP屈伸 [Kp, Kd, Pos, Vel, τ_ff] (5 寄存器)4. DIP屈伸 [Kp, Kd, Pos, Vel, τ_ff] (5 寄存器) |
7.6 拇指 MIT 控制
用于控制拥有 5 个自由度(5 DOF)的拇指结构:
| 地址范围 | 参数内容 | 说明 |
|---|---|---|
| 1550 ~ 1574 | 参数列表 (5 DOF) | 共 25 个寄存器,顺序为: 1. CMC 屈伸 [Kp, Kd, Pos, Vel, τ_ff] (5 寄存器)2. CMC 外展 [Kp, Kd, Pos, Vel, τ_ff] (5 寄存器)3. MCP 屈伸 [Kp, Kd, Pos, Vel, τ_ff] (5 寄存器)4. IP 屈伸 [Kp, Kd, Pos, Vel, τ_ff] (5 寄存器)5. DIP 屈伸 [Kp, Kd, Pos, Vel, τ_ff] (5 寄存器) |
8. 系统状态
系统状态相关寄存器(地址范围 1800~1999,只读输入寄存器)。
| 地址 | 内容 | 单位 | 说明 |
|---|---|---|---|
| 1800 | 系统状态码 | — | 参见下方 8.1 系统状态码说明 |
| 1801 | 整机电流 | mA | 灵巧手当前的整机输入总电流 |
| 1802 | 整机电压 | V | 灵巧手当前的供电电压 |
| 1803 | 整机功率 | W | 灵巧手当前的整机消耗功率 |
| 1804 | 系统温度 | ℃ | 灵巧手主控板的温度 |
8.1 系统状态码说明
系统状态码寄存器(1800)通过高低字节组合表示状态:
- 高 8 位 (High Byte): 核心故障标志
0= 正常1= 故障
- 低 8 位 (Low Byte): 详细异常类别
0= 正常1= 通信异常2= 未校准3= 温度异常
9. 电机反馈
通过读取输入寄存器(2030~2999)来实时监测 21 个电机关节的状态。
| 地址范围 | 内容 | 单位 | 说明 |
|---|---|---|---|
| 2030 ~ 2050 | 电机实际速度 | rpm × 100 | 对应电机 0 ~ 20 的当前转速 |
| 2060 ~ 2080 | 电机实际位置 | ° × 100 | 对应电机 0 ~ 20 的当前角度位置 |
| 2090 ~ 2110 | 电机实际电流 | mA | 对应电机 0 ~ 20 的当前驱动电流大小 |
| 2120 ~ 2140 | 电机状态码 | Bit 定义 | 参见下方 9.1 电机状态码定义 |
| 2150 ~ 2170 | 电机当前温度 | ℃ | 对应电机 0 ~ 20 内部或驱动芯片的温度 |
9.1 电机状态码定义
状态码寄存器(2120~2140)采用按位(Bit)指示故障:
| Bit 位 | 描述 |
|---|---|
| 0 | 过流 (Over-current) |
| 1 | 过压 (Over-voltage) |
| 2 | 欠压 (Under-voltage) |
| 3 | 过温 (Over-temperature) |
| 4 | 电流突增 (Current Spike) |
| 5 | 校准失败 (Calibration Failed) |
| 8 | 电机堵转 (Stall) |
| 9 | 校准状态中 (Calibrating) |
| 11 | 电机运行中 (Running) |
10. 设备信息
设备基本信息(地址范围 3000~3999)均只读。
| 地址范围 | 内容名称 | 数据属性 |
|---|---|---|
| 3030 ~ 3039 | 固件版本 | RO,大端 ASCII 字符串 |
| 3040 ~ 3049 | 硬件版本 | RO,大端 ASCII 字符串 |
| 3050 ~ 3059 | 整机 SN | RO,大端 ASCII 字符串 |
| 3060 ~ 3269 | 电机 SN | RO,大端 ASCII 字符串,共 21 个电机(每个占用 10 个寄存器) |
| 3300 ~ 3320 | 电机固件版本 | RO,二进制版本信息 |
10.1 编码格式说明
固件版本、硬件版本及整机/电机 SN 码
这些信息均采用 ASCII 字符串编码 存储。在寄存器中按 Big-Endian(大端)字节序 存储,其中每个 uint16_t 寄存器包含 2 个字符:
- 高字节(High Byte):存储前一个字符;
- 低字节(Low Byte):存储后一个字符。
每个字段占用 10 个寄存器,最大支持 20 个字符。
解析示例:
| 寄存器内容(大端 uint16_t 数组) | 十六进制字节序列 | 解析后的 ASCII 字符串 |
|---|---|---|
0x534E, 0x3132, 0x3334, 0x3536, 0x3738, 0x3930, 0x3132, 0x3334, 0x3500 | 53 4E 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 00 | "SN123456789012345" |
电机固件版本号
电机固件版本号为 uint16_t 类型,拆分为高低字节:
- 高字节 (High Byte): 主版本号 (Major)
- 低字节 (Low Byte): 子版本号 (Minor)
解析格式: Version = V[Major].[Minor]
- 例如:寄存器读出值为
0x0105,表示版本号为V1.5。
11. 电阻式触觉模块
Stark3 支持 触觉压力阵列模块,包含手掌触觉和五指触觉传感器。
11.1 触觉模块参数总览
| 模块种类 | 传感器压力点数 | 标定合力数 |
|---|---|---|
| 手掌 | 36 | 1 |
| 拇指尖 | 31 | 3 |
| 拇指指腹 | 57 | 6 |
| 四指指尖(食指、中指、无名指、小指) | 每个指尖 21 | 每个指尖 3 |
| 四指指腹(食指、中指、无名指、小指) | 每个指腹 52 | 每个指腹 5 |
11.2 触觉控制寄存器
| 地址 | 功能描述 |
|---|---|
| 4000 ~ 4010 | 触觉模块使能(对应模块编号 0 ~ 10) |
| 4011 | 所有模块压力清零 (WO) |
| 4012 ~ 4022 | 指定模块清零 (WO, 对应模块编号 0 ~ 10) |
| 4023 | 触觉数据类型 (0 = 点阵原始压力值,1 = 标定压力值) |
11.3 触觉标定合力数据
💡 合力计算说明
合力 = 该触觉模块内所有区域对应的标定压力值之和。
手掌与拇指标定合力
| 地址 | 内容名称 | 说明 |
|---|---|---|
| 4100 | 手掌合力 | 手掌区域 |
| 4101 ~ 4103 | 拇指尖合力 1 ~ 3 | 拇指尖部的 3 个分区合力 |
| 4104 ~ 4109 | 拇指指腹合力 1 ~ 6 | 拇指指腹的 6 个分区合力 |
食指标定合力
| 地址 | 内容名称 | 说明 |
|---|---|---|
| 4110 ~ 4112 | 食指尖合力 1 ~ 3 | 食指尖分区合力 |
| 4113 ~ 4117 | 食指指腹合力 1 ~ 5 | 食指指腹分区合力 |
中指标定合力
| 地址 | 内容名称 | 说明 |
|---|---|---|
| 4118 ~ 4120 | 中指尖合力 1 ~ 3 | 中指尖分区合力 |
| 4121 ~ 4125 | 中指指腹合力 1 ~ 5 | 中指指腹分区合力 |
无名指标定合力
| 地址 | 内容名称 | 说明 |
|---|---|---|
| 4126 ~ 4128 | 无名指尖合力 1 ~ 3 | 无名指尖分区合力 |
| 4129 ~ 4133 | 无名指指腹合力 1 ~ 5 | 无名指指腹分区合力 |
小指标定合力
| 地址 | 内容名称 | 说明 |
|---|---|---|
| 4134 ~ 4136 | 小指尖合力 1 ~ 3 | 小指尖分区合力 |
| 4137 ~ 4141 | 小指指腹合力 1 ~ 5 | 小指指腹分区合力 |
11.4 触觉阵列点阵数据
实时读取对应地址以获取触觉压力值阵列数据:
| 模块类别 | 地址范围 | 点数说明 |
|---|---|---|
| 手掌 | 4200 ~ 4235 | 36 点 |
| 拇指尖 | 4250 ~ 4280 | 31 点 |
| 拇指指腹 | 4290 ~ 4346 | 57 点 |
| 食指尖 | 4350 ~ 4370 | 21 点 |
| 食指指腹 | 4400 ~ 4451 | 52 点 |
| 中指尖 | 4460 ~ 4480 | 21 点 |
| 中指指腹 | 4500 ~ 4551 | 52 点 |
| 无名指尖 | 4560 ~ 4580 | 21 点 |
| 无名指指腹 | 4600 ~ 4651 | 52 点 |
| 小指尖 | 4660 ~ 4680 | 21 点 |
| 小指指腹 | 4700 ~ 4751 | 52 点 |
11.5 触觉模块编号定义
| 模块编号 | 模块名称 |
|---|---|
| 0 | 手掌触觉 |
| 1 | 拇指尖 |
| 2 | 拇指指腹 |
| 3 | 食指尖 |
| 4 | 食指指腹 |
| 5 | 中指尖 |
| 6 | 中指指腹 |
| 7 | 无名指尖 |
| 8 | 无名指指腹 |
| 9 | 小指尖 |
| 10 | 小指指腹 |
12. 关节 ID 定义
Stark3 灵巧手共包含 21 个活动关节。关于具体物理关节对应的 ID,请参考下图定义:
Stark3 (Revo 3) 智能灵巧手 21 个全主动独立电机关节的 ID 分布示意图