Revo 3 通信协议
本文面向通过 RS485 或 CAN FD 直接访问 Revo 3 寄存器的开发者。若使用 Revo3 SDK,请直接使用 API 定义的物理单位;SDK 已处理寄存器缩放、字节序、CRC 和 CAN FD 帧封装,无需重复转换。
本文公开的运动寄存器以 Revo3 Ultra(21 DOF)为基线。接入其他 Revo 3 型号时,必须先读取并确认 JointLayout 中的关节数量和顺序;未经验证,不得按 21 关节布局下发控制帧。
写寄存器前
请确认设备 ID、型号、固件版本和关节布局。写入配置或运动寄存器前,确保灵巧手活动范围内没有人员或障碍物,并准备独立于软件控制的动力电源切断方式。
1. 支持的接口
| 接口 | 传输方式 |
|---|---|
| RS485 | Modbus RTU |
| CAN FD | 在 CAN FD 扩展帧中封装完整的 Modbus RTU 帧 |
2. Modbus RTU
Revo 3 的 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) 校验和,低字节在前,高字节在后 |
支持的常用功能码为: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 ~ 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 响应数据帧 |
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 ~ 199 | Holding Register | 系统配置 |
| 200 ~ 399 | Holding Register | 电机参数 |
| 500 ~ 573 | Holding Register | 固件更新(SDK 管理,不公开底层分包流程) |
| 1000 ~ 1599 | Holding Register | 控制指令 |
| 1800 ~ 1999 | Input Register | 系统状态 |
| 2030 ~ 2999 | Input Register | 电机反馈 |
| 3000 ~ 3999 | Input Register | 设备信息 |
| 4000 ~ 4751 | Holding / Input Register | mt_* 压阻阵列触觉模组 |
| 5003 ~ 5910 | Holding / Input Register | mx_* 高密矩阵触觉模组 |
| 6500 ~ 6709 | Holding / Input Register | hp_* 指尖六维力触觉模组 |
5. 系统配置寄存器
系统配置相关寄存器(地址范围 0~199)支持读写属性配置。
| 地址 | 名称 | 属性 | 说明 |
|---|---|---|---|
| 60 ~ 80 | 电机零点偏置 | RW | 单位:0.01°(实际值 × 100 传输)。共 21 个关节。 |
| 81 | 设置当前位置为零位 | WO | 写入 1 执行;操作前确认机械位置安全。 |
| 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 波特率配置 |
| 111 | 软件重启 | WO | 写入 1 重启设备。 |
| 112 | 开机自动校准 | RW | 0 = 关闭,1 = 开启 |
| 113 | 手指位置校准 | WO | 写入 1 执行;校准期间不得下发运动命令。 |
| 114 | 校准电流 | WO | 写入校准电流值;建议通过 SDK Calibration API 操作。 |
| 117 | 清除电机错误码 | WO | 写入 1 清除;清除前应先排除故障原因。 |
| 118 | 示教模式 | RW | 写入 1 进入,写入 0 退出 |
| 119 | 软件停止 | RW | 写入 1 停止,写入 0 恢复;该功能不是功能安全急停。 |
| 120 | 使用广播 ID | RW | 1 = 使用(默认),0 = 不使用;参见 CAN FD 广播限制。 |
| 131 | 电机错误自动清除 | RW | 0 = 关闭(默认),1 = 开启 |
5.1 RS485 波特率配置
| 寄存器值 | 波特率 |
|---|---|
| 0 | 1 Mbps |
| 1 | 2 Mbps |
| 2 | 3 Mbps |
| 4 | 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. 控制指令
Revo 3 支持位置、速度、电流、阻抗、阻尼和 MIT 控制。控制命令可能立即驱动关节;首次调试应限制电流和速度,并确保活动范围内没有人员或障碍物。
7.1 通用控制模式
| 数值 | 模式 | 控制参数 |
|---|---|---|
| 0 | 位置 | 目标角度(° × 100) |
| 1 | 速度 | 目标速度(rpm × 100) |
| 2 | 电流 | 目标电流(mA) |
| 4 | 阻抗 | 阻抗系数(实际值 × 100) |
| 5 | 阻尼 | 阻尼系数(实际值 × 100) |
7.2 通用控制寄存器
| 地址 | 内容 | 说明 |
|---|---|---|
| 1000 | 关节 ID | Revo3 Ultra 为 0~20 |
| 1001 | 控制模式 | 使用 7.1 的模式值 |
| 1002 | 控制参数 | 编码由控制模式决定 |
| 1010 | 多关节控制模式 | 使用 7.1 的模式值 |
| 1011 ~ 1031 | 21 关节参数 | 按关节 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 控制公式
数据缩放格式
- 、、Position、Velocity 均采用 实际值 × 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) | |
| 1053 | Position | 期望位置(° × 100) |
| 1054 | Velocity | 期望速度(rpm × 100) |
| 1055 | Current () | 前馈电流(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 ~ 1362 | Position 列表 | 21 个手指关节的期望位置 |
| 1363 ~ 1383 | Velocity 列表 | 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 | 整机 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. 触觉协议
集成在手部主通信链路中的触觉模组使用以下技术代号。实际设备只支持其已安装布局声明的能力,应用不得仅根据产品名称猜测触觉类型或点数。
| 技术代号 | 功能类型 | 寄存器区域 |
|---|---|---|
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 ~ 4010 | RW | 模组使能;0 = 关闭,1 = 开启 |
| 4011 | WO | 所有模组压力零点校准;写入非零值执行 |
| 4012 ~ 4022 | WO | 指定模组压力零点校准;写入 1 执行 |
| 4023 | RW | 读取模式;0 = 点阵,1 = 兼容性区域合力 |
| 4024 | RW | 点阵数值模式;0 = ADC,1 = 保留,2 = 力值 |
| 4025 | WO | 所有模组区域合力:2 = 清零,3 = 恢复出厂基线 |
| 4026 ~ 4036 | WO | 指定模组区域合力: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 ~ 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.3 mx_* 高密矩阵触觉
| 地址 | 类型 / 属性 | 功能 |
|---|---|---|
| 5003 ~ 5178 | Input / RO | 11 个模组 SN;每模组 16 个寄存器、32 Bytes,高字节在前 |
| 5179 | Holding / WO | 重启全部模组;写入 1 |
| 5180 ~ 5190 | Holding / WO | 重启指定模组;写入 1 |
| 5191 ~ 5201 | Input / RO | 各模组实际点数 |
| 5202 | Holding / RW | 全部模组输出模式;0 = ADC,1 = 力值 |
| 5203 ~ 5213 | Holding / RW | 指定模组输出模式 |
| 5214 | Holding / WO | 全部模组清零命令;1 = 清零,2 = 取消/恢复默认基线 |
| 5215 ~ 5225 | Holding / WO | 指定模组清零命令 |
| 5226 | Holding / RO | 全局清零状态;0 = 未清零,1 = 已清零,2 = 处理中或失败 |
| 5227 ~ 5237 | Holding / RO | 指定模组清零状态 |
| 5240 ~ 5839 | Input / RO | 点阵数据缓冲区 |
| 5900 ~ 5910 | Holding / RW | 模组使能;0 = 关闭,1 = 开启 |
点阵数据中每个寄存器存放两个 uint8 点值,高字节在前。ADC 模式的原始范围为 0~255;力值模式每个原始单位为 10 mN。各模组的有效点数必须读取 5191~5201,不能使用缓冲区容量代替。
| 模组 | 数据起始地址 | 缓冲区容量(点) |
|---|---|---|
| 手掌 | 5240 | 200 |
| 拇指尖 | 5340 | 80 |
| 拇指指腹 | 5380 | 120 |
| 食指尖 | 5440 | 80 |
| 食指指腹 | 5480 | 120 |
| 中指尖 | 5540 | 80 |
| 中指指腹 | 5580 | 120 |
| 无名指尖 | 5640 | 80 |
| 无名指指腹 | 5680 | 120 |
| 小指尖 | 5740 | 80 |
| 小指指腹 | 5780 | 120 |
当前固件通过功能码 0x04 读取 SN、点数和点阵输入寄存器。部分早期固件存在保持寄存器兼容映射;如需兼容旧设备,应使用 SDK 的自动探测,不要在应用中固定猜测功能码。
11.4 hp_* 指尖六维力触觉
该布局包含 5 个指尖模组,顺序为拇指、食指、中指、无名指、小指。
| 地址 | 属性 | 功能 |
|---|---|---|
| 6500 ~ 6504 | RW | 模组使能;0 = 关闭,1 = 开启 |
| 6510 ~ 6514 | WO | 力/力矩置零;写入 1 |
| 6520 ~ 6709 | RO | 5 个模组数据块,每个占 38 个输入寄存器 |
各模组数据块的起始地址依次为 6520、6558、6596、6634、6672,内部偏移定义如下:
| 块内偏移 | 数据类型 | 内容 |
|---|---|---|
| 0 | uint16 | 模组状态:0 = 预热中,1 = 就绪,2 = 离线 |
| 1 | uint16 | 传感器状态:0 = 正常,非零 = 异常 |
| 2 ~ 11 | 5 × float32 | Fx、Fy、Fz、Mx、My,高 16-bit word 在前 |
| 12 ~ 13 | float32 | 标量合力 Fn,不是 Fz |
| 14 ~ 37 | 48 × uint8 | 膜点位;奇数点在高字节、偶数点在低字节 |
协议中的 Fx、Fy、Fz 单位为 N,Mx、My 单位为 N·m;SDK 对外将力转换为 mN。只有模组和传感器状态均正常时,应用才应使用该帧的力、力矩和点阵数据。
11.5 SDK 使用建议
SDK 会把不同触觉协议归一化为 TouchLayout 和 TouchFrame。应用应从布局读取 module ID、点数、区域和信号能力,并结合每帧的 TouchSampleState 判断数据是否有效。未知布局必须停止解析,不能套用其他设备的固定点序或几何映射。
12. 关节 ID 定义
Revo3 Ultra 包含 21 个活动关节。各关节 ID 与物理位置的对应关系如下:
Revo3 Ultra 21 个活动关节的 ID 分布