Skip to content

Revo 3 通信协议

本文面向通过 RS485 或 CAN FD 直接访问 Revo 3 寄存器的开发者。若使用 Revo3 SDK,请直接使用 API 定义的物理单位;SDK 已处理寄存器缩放、字节序、CRC 和 CAN FD 帧封装,无需重复转换。

本文公开的运动寄存器以 Revo3 Ultra(21 DOF)为基线。接入其他 Revo 3 型号时,必须先读取并确认 JointLayout 中的关节数量和顺序;未经验证,不得按 21 关节布局下发控制帧。

写寄存器前

请确认设备 ID、型号、固件版本和关节布局。写入配置或运动寄存器前,确保灵巧手活动范围内没有人员或障碍物,并准备独立于软件控制的动力电源切断方式。

1. 支持的接口

接口传输方式
RS485Modbus RTU
CAN FD在 CAN FD 扩展帧中封装完整的 Modbus RTU 帧

2. Modbus RTU

Revo 3 的 RS485 通信采用标准 Modbus RTU 帧格式。

2.1 数据帧格式

Header / Device IDFunction CodeDataCRC16
1 Byte1 ByteN Bytes2 Bytes

2.2 字段说明

字段说明
Header/Device ID从机设备地址(ID)
Function CodeModbus 功能码(如 03H:读保持寄存器;04H:读输入寄存器;06H:写单个保持寄存器;10H:写多个保持寄存器)
Data数据区,具体取决于功能码和寄存器地址
CRC16CRC-16 (Modbus) 校验和,低字节在前,高字节在后

支持的常用功能码为:0x03(读保持寄存器)、0x04(读输入寄存器)、0x06(写单个保持寄存器)和 0x10(写多个保持寄存器)。多寄存器命令必须在一次 0x10 请求中完整写入,不应拆分为可能被设备分别执行的多个单寄存器请求。


3. CAN FD 封装格式

当使用 CAN FD 接口时,底层仍采用 Modbus 协议的数据,并封装在 CAN FD 扩展帧(29-bit 标识符)中传输。

CAN FD 仲裁速率固定为 1 Mbps,数据段速率支持 1、2、4、5 Mbps。默认数据段速率为 5 Mbps

3.1 CAN FD ID 格式

CAN FD 29-bit ID 按如下位域分配:

Bit 位内容说明
28 ~ 24保留位固定为 0
23 ~ 16Device ID从机设备 ID
15 ~ 8Master ID主机 ID(由主机自行定义)
7 ~ 0Payload Length实际发送的有效数据长度(Byte)

Device ID 默认值

设备类型默认 Device ID (十进制)默认 Device ID (十六进制)
左手1260x7E
右手1270x7F

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 响应数据帧

Payload Length 表示 CAN FD 数据段内完整 Modbus RTU 帧的实际字节数,包含 Device ID、功能码、数据和 CRC16,最大为 64 Bytes。

使用广播 ID 通信时,设备回复帧中的 Device ID 使用设备自身 ID,不使用广播 ID。广播仅适用于明确支持该能力的 RS485 集成;CAN FD 使用左右手独立的 0x7E / 0x7F Device ID,不支持 Device ID 0 广播。


4. 寄存器规划

Revo 3 寄存器按功能划分为以下区间:

地址范围寄存器类型功能类别
0 ~ 199Holding Register系统配置
200 ~ 399Holding Register电机参数
500 ~ 573Holding Register固件更新(SDK 管理,不公开底层分包流程)
1000 ~ 1599Holding Register控制指令
1800 ~ 1999Input Register系统状态
2030 ~ 2999Input Register电机反馈
3000 ~ 3999Input Register设备信息
4000 ~ 4751Holding / Input Registermt_* 压阻阵列触觉模组
5003 ~ 5910Holding / Input Registermx_* 高密矩阵触觉模组
6500 ~ 6709Holding / Input Registerhp_* 指尖六维力触觉模组

5. 系统配置寄存器

系统配置相关寄存器(地址范围 0~199)支持读写属性配置。

地址名称属性说明
60 ~ 80电机零点偏置RW单位:0.01°(实际值 × 100 传输)。共 21 个关节。
81设置当前位置为零位WO写入 1 执行;操作前确认机械位置安全。
101左右手标识RO1 = 右手,2 = 左手
102手指恢复默认WO写入特定值恢复手指默认参数
105蜂鸣器开关RW0 = 关闭,1 = 开启
106振动马达开关RW0 = 关闭,1 = 开启
107触屏功能开关RW0 = 关闭,1 = 开启
108设备 IDRW默认左手 126,右手 127
109RS485 波特率RW参见 5.1 RS485 波特率配置
110CAN FD 波特率RW参见 5.2 CAN FD 波特率配置
111软件重启WO写入 1 重启设备。
112开机自动校准RW0 = 关闭,1 = 开启
113手指位置校准WO写入 1 执行;校准期间不得下发运动命令。
114校准电流WO写入校准电流值;建议通过 SDK Calibration API 操作。
117清除电机错误码WO写入 1 清除;清除前应先排除故障原因。
118示教模式RW写入 1 进入,写入 0 退出
119软件停止RW写入 1 停止,写入 0 恢复;该功能不是功能安全急停。
120使用广播 IDRW1 = 使用(默认),0 = 不使用;参见 CAN FD 广播限制。
131电机错误自动清除RW0 = 关闭(默认),1 = 开启

5.1 RS485 波特率配置

寄存器值波特率
01 Mbps
12 Mbps
23 Mbps
45 Mbps(默认)

5.2 CAN FD 波特率配置

寄存器值波特率
01 Mbps
12 Mbps
24 Mbps
35 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. 控制指令

Revo 3 支持位置、速度、电流、阻抗、阻尼和 MIT 控制。控制命令可能立即驱动关节;首次调试应限制电流和速度,并确保活动范围内没有人员或障碍物。

7.1 通用控制模式

数值模式控制参数
0位置目标角度(° × 100)
1速度目标速度(rpm × 100)
2电流目标电流(mA)
4阻抗阻抗系数(实际值 × 100)
5阻尼阻尼系数(实际值 × 100)

7.2 通用控制寄存器

地址内容说明
1000关节 IDRevo3 Ultra 为 0~20
1001控制模式使用 7.1 的模式值
1002控制参数编码由控制模式决定
1010多关节控制模式使用 7.1 的模式值
1011 ~ 103121 关节参数按关节 ID 顺序排列,必须按当前 JointLayout 使用
1500四指索引1 = 食指,2 = 中指,3 = 无名指,4 = 小指
1501四指控制模式使用 7.1 的模式值
1502 ~ 1505四指参数[侧摆 MCP, MCP, PIP, DIP]
1510拇指控制模式使用 7.1 的模式值
1511 ~ 1515拇指参数逻辑关节顺序为 [旋转, MCP, IP, 外展, 屈伸],对应 J16~J20

7.3 MIT 控制公式

数据缩放格式

  • PositionVelocity 均采用 实际值 × 100 传输。
  • Current () 采用实际物理值(mA)直接传输,不进行放大。

控制参量传输示例:

  • 期望值 = 5.00 传输值 = 500
  • 期望值 = 0.50 传输值 = 50
  • Position 期望值 = 90.00° 传输值 = 9000
  • Velocity 期望值 = 50.00 rpm 传输值 = 5000
  • Current () 期望值 = 1000 mA 传输值 = 1000

7.4 单关节 MIT 控制

可以通过写入特定的寄存器独立控制某个关节的 MIT 参数:

地址参数名称说明
1050关节 ID目标控制关节的编号 (0 ~ 20)
1051比例刚度系数(实际值 × 100)
1052微分阻尼系数(实际值 × 100)
1053Position期望位置(° × 100)
1054Velocity期望速度(rpm × 100)
1055Current ()前馈电流(mA)

7.5 多关节 MIT 控制

可以通过连续的寄存器区域一次性下发多个或全部关节的 MIT 控制参数:

地址范围对应关节参数内容说明
1100 ~ 1104关节 0包含 5 个连续寄存器
1105 ~ 1109关节 1包含 5 个连续寄存器
............
1195 ~ 1199关节 19包含 5 个连续寄存器
1200 ~ 1204关节 20包含 5 个连续寄存器

7.6 多关节单参数控制

如果只想批量修改所有关节的某一个特定 MIT 参数,可以使用以下连续的寄存器列表:

地址范围参数类别内容说明
1300 ~ 1320 列表21 个手指关节的比例系数
1321 ~ 1341 列表21 个手指关节的阻尼系数
1342 ~ 1362Position 列表21 个手指关节的期望位置
1363 ~ 1383Velocity 列表21 个手指关节的期望速度
1384 ~ 1404 列表21 个手指关节的前馈电流值

7.7 四指 MIT 控制

用于独立且高效地更新食指、中指、无名指或小指的控制参数:

地址参数名称说明与取值内容
1520手指索引1 = 食指,2 = 中指,3 = 无名指,4 = 小指
1521 ~ 1540参数列表共 20 个寄存器,包含四个关节的参数:
1. 侧摆 MCP (5 寄存器)
2. MCP屈伸 (5 寄存器)
3. PIP屈伸 (5 寄存器)
4. DIP屈伸 (5 寄存器)

7.8 拇指 MIT 控制

用于控制拥有 5 个自由度(5 DOF)的拇指结构:

地址范围参数内容说明
1550 ~ 1574参数列表 (5 DOF)共 25 个寄存器,按逻辑关节 J16~J20 排列:
1. 旋转 (5 寄存器)
2. MCP (5 寄存器)
3. IP (5 寄存器)
4. 外展 (5 寄存器)
5. 屈伸 (5 寄存器)

8. 系统状态

系统状态相关寄存器(地址范围 1800~1999,只读输入寄存器)。

地址内容单位说明
1800系统状态码参见下方 8.1 系统状态码说明
1801整机电流mA灵巧手当前的整机输入总电流
1802整机电压V灵巧手当前的供电电压
1803整机功率W灵巧手当前的整机消耗功率
1804系统温度灵巧手主控板的温度

这些系统参数的设备内部采样率为 5 Hz。上位机建议以不高于 5 Hz 的频率读取,避免无效轮询占用总线带宽。

8.1 系统状态码说明

系统状态码寄存器(1800)通过高低字节组合表示状态:

  • 高 8 位 (High Byte): 核心故障标志
    • 0 = 正常
    • 1 = 故障
  • 低 8 位 (Low Byte): 详细异常类别
    • 0 = 正常
    • 1 = 通信异常
    • 2 = 未校准
    • 3 = 温度异常

9. 电机反馈

通过读取输入寄存器(2030~2999)监测电机关节状态。下表给出 Revo3 Ultra 的 21 关节寄存器布局;其他型号只应读取当前 JointLayout 声明的有效关节。

地址范围内容单位说明
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 ~ 7保留
8电机堵转 (Stall)
9 ~ 10保留
11电机运行中 (Running)
12 ~ 15保留

10. 设备信息

设备基本信息(地址范围 3000~3999)均只读。

地址范围内容名称数据属性
3020 ~ 3021电机在线位图RO,32-bit bitmask;bit 0~20 对应电机 0~20
3030 ~ 3039固件版本RO,大端 ASCII 字符串
3040 ~ 3049硬件版本RO,大端 ASCII 字符串
3050 ~ 3059整机 SNRO,大端 ASCII 字符串
3060 ~ 3269电机 SNRO,大端 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, 0x350053 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. 触觉协议

集成在手部主通信链路中的触觉模组使用以下技术代号。实际设备只支持其已安装布局声明的能力,应用不得仅根据产品名称猜测触觉类型或点数。

技术代号功能类型寄存器区域
mt_*压阻阵列触觉模组4000 系列
mx_*高密矩阵触觉模组5000 系列
hp_*指尖六维力触觉模组6500 系列

Ultra VisionTouch 的独立指尖视触觉通道不经过本页描述的 Modbus/CAN FD 主链路,也不属于以下寄存器协议。同一只手上的主链路 mt_*mx_* 指腹/手掌阵列在探测确认后,按以下寄存器协议读取。

11.1 通用模块编号

mt_*mx_* 使用相同的 11 模组物理编号:

模块编号模块位置
0手掌
1拇指尖
2拇指指腹
3食指尖
4食指指腹
5中指尖
6中指指腹
7无名指尖
8无名指指腹
9小指尖
10小指指腹

组合布局可能使用稀疏 module ID。使用 SDK 时必须按 TouchLayout.modules[*].module_id 匹配数据,不要假设数组下标始终等于 module ID。

11.2 mt_* 压阻阵列触觉

控制寄存器

地址属性功能
4000 ~ 4010RW模组使能;0 = 关闭,1 = 开启
4011WO所有模组压力零点校准;写入非零值执行
4012 ~ 4022WO指定模组压力零点校准;写入 1 执行
4023RW读取模式;0 = 点阵,1 = 兼容性区域合力
4024RW点阵数值模式;0 = ADC,1 = 保留,2 = 力值
4025WO所有模组区域合力:2 = 清零,3 = 恢复出厂基线
4026 ~ 4036WO指定模组区域合力:2 = 清零,3 = 恢复出厂基线

4023 = 1 是为少量已交付设备保留的兼容模式,新应用应优先使用点阵模式和 SDK Touch API。寄存器 4024 的值 1 未使用,不应写入。

区域合力输入寄存器

合力值为相应区域内标定压力点的和。拇指指腹当前提供 5 个合力值;寄存器 4109 为保留地址。

地址内容
4100手掌合力
4101 ~ 4103拇指尖合力 1~3
4104 ~ 4108拇指指腹合力 1~5
4109保留
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

点阵输入寄存器

模组地址范围点数
手掌4200 ~ 423536
拇指尖4250 ~ 428031
拇指指腹4290 ~ 434657
食指尖4350 ~ 437021
食指指腹4400 ~ 445152
中指尖4460 ~ 448021
中指指腹4500 ~ 455152
无名指尖4560 ~ 458021
无名指指腹4600 ~ 465152
小指尖4660 ~ 468021
小指指腹4700 ~ 475152

11.3 mx_* 高密矩阵触觉

地址类型 / 属性功能
5003 ~ 5178Input / RO11 个模组 SN;每模组 16 个寄存器、32 Bytes,高字节在前
5179Holding / WO重启全部模组;写入 1
5180 ~ 5190Holding / WO重启指定模组;写入 1
5191 ~ 5201Input / RO各模组实际点数
5202Holding / RW全部模组输出模式;0 = ADC,1 = 力值
5203 ~ 5213Holding / RW指定模组输出模式
5214Holding / WO全部模组清零命令;1 = 清零,2 = 取消/恢复默认基线
5215 ~ 5225Holding / WO指定模组清零命令
5226Holding / RO全局清零状态;0 = 未清零,1 = 已清零,2 = 处理中或失败
5227 ~ 5237Holding / RO指定模组清零状态
5240 ~ 5839Input / RO点阵数据缓冲区
5900 ~ 5910Holding / RW模组使能;0 = 关闭,1 = 开启

点阵数据中每个寄存器存放两个 uint8 点值,高字节在前。ADC 模式的原始范围为 0~255;力值模式每个原始单位为 10 mN。各模组的有效点数必须读取 5191~5201,不能使用缓冲区容量代替。

模组数据起始地址缓冲区容量(点)
手掌5240200
拇指尖534080
拇指指腹5380120
食指尖544080
食指指腹5480120
中指尖554080
中指指腹5580120
无名指尖564080
无名指指腹5680120
小指尖574080
小指指腹5780120

当前固件通过功能码 0x04 读取 SN、点数和点阵输入寄存器。部分早期固件存在保持寄存器兼容映射;如需兼容旧设备,应使用 SDK 的自动探测,不要在应用中固定猜测功能码。

11.4 hp_* 指尖六维力触觉

该布局包含 5 个指尖模组,顺序为拇指、食指、中指、无名指、小指。

地址属性功能
6500 ~ 6504RW模组使能;0 = 关闭,1 = 开启
6510 ~ 6514WO力/力矩置零;写入 1
6520 ~ 6709RO5 个模组数据块,每个占 38 个输入寄存器

各模组数据块的起始地址依次为 6520、6558、6596、6634、6672,内部偏移定义如下:

块内偏移数据类型内容
0uint16模组状态:0 = 预热中,1 = 就绪,2 = 离线
1uint16传感器状态:0 = 正常,非零 = 异常
2 ~ 115 × float32FxFyFzMxMy,高 16-bit word 在前
12 ~ 13float32标量合力 Fn,不是 Fz
14 ~ 3748 × uint8膜点位;奇数点在高字节、偶数点在低字节

协议中的 FxFyFz 单位为 N,MxMy 单位为 N·m;SDK 对外将力转换为 mN。只有模组和传感器状态均正常时,应用才应使用该帧的力、力矩和点阵数据。

11.5 SDK 使用建议

SDK 会把不同触觉协议归一化为 TouchLayoutTouchFrame。应用应从布局读取 module ID、点数、区域和信号能力,并结合每帧的 TouchSampleState 判断数据是否有效。未知布局必须停止解析,不能套用其他设备的固定点序或几何映射。


12. 关节 ID 定义

Revo3 Ultra 包含 21 个活动关节。各关节 ID 与物理位置的对应关系如下:

Revo3 Ultra 关节 ID 定义Revo3 Ultra 21 个活动关节的 ID 分布
帮助