Revo 2 灵巧手通信协议设计
Revo 2 基础版灵巧手支持 2 种对外通信接口:RS485、CAN FD。设计一套兼容2种通信接口的协议,在兼容不同通信协议的基础上确保通信的高效性、可靠性和易扩展性。
通信接口特点
RS485 特点
- 通信速率:可达 10 Mbps,常用速率为 9600 bps~1 Mbps。
- 帧长:支持不定长帧,帧最大长度受具体应用约束。
- 校验方式:需软件实现 CRC16或者checksum 等校验方式,适应复杂电磁环境。
- 通信模式:半双工通信,需要冲突检测机制。
- 可靠性:抗干扰能力强,适合长距离通信。
CAN FD 特点
- 通信速率:数据段速率可达 5 Mbps,头部保持传统 CAN 速率。
- 帧长:最大支持 64 字节数据段,扩展了 CAN 的数据载荷能力。
- 校验方式:硬件内置校验,无需软件实现。
- 通信模式:兼容传统 CAN 通信设备。
兼容性协议设计
Modbus-RTU 协议是一种主从请求应答通讯协议,广泛应用于工业自动化系统中。协议帧包括了地址、功能码、数据域、和 CRC 校验,以确保通信的可靠性。
数据帧格式:
| Header/Device ID | Function Code | Data | CRC16 |
|---|---|---|---|
| 1byte | 1byte | n bytes | 2 Bytes |
Header/Device ID: 设备标识符,用于区分不同的设备。
Function Code: 功能码,指示请求的操作类型。
Data: 数据域,包含具体操作的数据。
CRC16: CRC 校验,用于校验数据的完整性。
RS485兼容Modbus RTU:
RS485本身不定义具体的通信协议,但通常与Modbus RTU协议搭配使用,广泛用于工业自动化和监控系统中的数据传输。
CANFD 兼容Modbus RTU:
CANFD采用拓展帧,仲裁帧波特率固定位1Mb可将CAN FD协议中的数据字段中帧ID包含Device ID和master ID还有数据长度,数据字段包含整个Modbus RTU格式;
主机发送帧:
| CAN FD ID(29bit) | 数据段 (≤64Bytes) | |||
|---|---|---|---|---|
| 24~28bit 0b00000 16~23bit Device ID 8~15bit Master ID 0 ~7bit Payload len | Header/Device ID | Function Code | Data | CRC16 |
设备应答帧
| CAN FD ID(29bit) | 数据段 (≤64Bytes) | |||
|---|---|---|---|---|
| 24~28bit 0b00000 16~23bit Device ID 8~15bit Master ID 0 ~7bit Payload len | Header/Device ID | Function Code | Data | CRC16 |
功能码
功能码用于标识请求的操作类型,每个功能码对应特定的操作,主要用于从设备中读取数据、写入数据或执行其他控制任务 :
| 功能码 | 描述 |
|---|---|
| 03H | 读保持寄存器 |
| 06H | 写单个保持寄存器 |
| 10H | 写多个保持寄存器 |
| 04H | 读输入寄存器 |
寄存器
| 地址 | 类型 | 描述 | 长度 | 属性 |
|---|---|---|---|---|
| 900 | 保持寄存器 | Entry OTA | 2bytes | W |
| 901 | 保持寄存器 | 左右手读取 | 2bytes | R |
| 902 | 保持寄存器 | 内部手势恢复默认值 | 2byte | W |
| 903 | 保持寄存器 | 恢复出厂设置 | 2bytes | W |
| 904 | 保持寄存器 | 手背灯开关 | 2bytes | W/R |
| 905 | 保持寄存器 | 蜂鸣器开关 | 2bytes | W/R |
| 906 | 保持寄存器 | 震动马达开关 | 2bytes | W/R |
| 910 | 保持寄存器 | Factory KEY | 20Bytes(10 uint16) | W/R |
| 920 | 保持寄存器 | SN | 20Bytes(10 uint16) | W/R |
| 930 | 保持寄存器 | 大拇指Flex保护电流 | 2bytes | W/R |
| 931 | 保持寄存器 | 大拇指Aux保护电流 | 2bytes | W/R |
| 932 | 保持寄存器 | 食指保护电流 | 2bytes | W/R |
| 933 | 保持寄存器 | 中指保护电流 | 2bytes | W/R |
| 934 | 保持寄存器 | 无名指保护电流 | 2bytes | W/R |
| 935 | 保持寄存器 | 小指保护电流 | 2bytes | W/R |
| 936 | 保持寄存器 | 大拇指Aux锁定电流 | 2bytes | W/R |
| 937 | 保持寄存器 | 单位模式设置 | 2bytes | W/R |
| 938 | 保持寄存器 | 手指最小位置设置 | 4bytes | W |
| 940 | 保持寄存器 | 手指最大位置设置 | 4bytes | W |
| 942 | 保持寄存器 | 手指最大速度设置 | 4bytes | W |
| 944 | 保持寄存器 | 手指最大电流设置 | 4bytes | W |
| 946 | 保持寄存器 | 手指最小位置读取 | 12bytes | R |
| 952 | 保持寄存器 | 手指最大位置读取 | 12bytes | R |
| 958 | 保持寄存器 | 手指最大速度读取 | 12bytes | R |
| 964 | 保持寄存器 | 手指最大电流读取 | 12bytes | R |
| 1000 | 保持寄存器 | 设备ID | 2bytes | W/R |
| 1001 | 保持寄存器 | RS485波特率 | 2bytes | W/R |
| 1002 | 保持寄存器 | CANFD波特率 | 2bytes | W/R |
| 1003 | 保持寄存器 | CANFD仲裁域采样点配置 | 2bytes | W/R |
| 1009 | 保持寄存器 | 存储数据/重启 | 2bytes | W/R |
| 1010 | 保持寄存器 | 多个手指位置时间控制 | 24bytes(12 uint16) | W/R |
| 1022 | 保持寄存器 | 多个手指位置速度控制 | 24bytes(12 uint16) | W/R |
| 1034 | 保持寄存器 | 多个手指速度控制 | 12bytes(6 uint16) | W/R |
| 1040 | 保持寄存器 | 多个手指电流控制 | 12bytes(6 uint16) | W/R |
| 1046 | 保持寄存器 | 多个手指PWM控制 | 12bytes(6 uint16) | W/R |
| 1052 | 保持寄存器 | 单个手指位置时间控制 | 6bytes(3 uint16) | W |
| 1055 | 保持寄存器 | 单个手指位置速度控制 | 6bytes(3 uint16) | W |
| 1058 | 保持寄存器 | 单个手指速度控制 | 4Bytes(2 uint16) | W |
| 1060 | 保持寄存器 | 单个手指电流控制 | 4Bytes(2 uint16) | W |
| 1062 | 保持寄存器 | 单个手指PWM控制 | 4Bytes(2 uint16) | W |
| 1064 | 保持寄存器 | LED设置 | 2bytes | W/R |
| 1065 | 保持寄存器 | Turbo模式 | 2bytes | W/R |
| 1066 | 保持寄存器 | Turbo模式时间参数 | 4bytes | W/R |
| 1068 | 保持寄存器 | 位置自动校准 | 2bytes | W/R |
| 1069 | 保持寄存器 | 位置校准 | 2bytes | W |
| 1070 | 保持寄存器 | 快速位置控制模式 | 6bytes(3 uint16) | W |
| 1098 | 保持寄存器 | ACTION_CMD_ID | 2bytes(1 uint16) | W |
| 1099 | 保持寄存器 | ACTION_STEP_NUMBER | 2bytes(1 uint16) | W/R |
| 1100 | 保持寄存器 | ACTION_STEP_PARAMS | 54bytes(27 uint16) | W/R |
| 2000 | 输入寄存器 | 实际位置值 | 12bytes(6 uint16) | R |
| 2006 | 输入寄存器 | 实际速度值 | 12bytes(6 uint16) | R |
| 2012 | 输入寄存器 | 实际电流值 | 12bytes(6 uint16) | R |
| 2018 | 输入寄存器 | 电机状态 | 12bytes(6 uint16) | R |
| 2025 | 输入寄存器 | 按键状态 | 2bytes | R |
| 3000 | 输入寄存器 | FW Version | 20Bytes(10 uint16) | R |
| 3010 | 输入寄存器 | SN | 20Bytes(10 uint16) | R |
寄存器描述
进入OTA/900
设置进入OTA后,立即生效。进入OTA模式后通过升级协议进行传输镜像。传输完成后设备进入Bootloader状态进行固件的拷贝,拷贝完成后自动重启进入正常程序。
| 设置参数 | 代表的意义 |
|---|---|
| 1 | 进入OTA模式 |
左右手读取/901
为了区分 左右手,使用一个寄存器用于读取当前设备的手型信息。
| 寄存器地址 | 用途 | 值 |
|---|---|---|
| 901 | 左右手识别 | 1:右手 2:左手 |
内部手势序列恢复默认值 /902
| 寄存器地址 | 用途 | 类型 | 写入值 | 功能说明 |
|---|---|---|---|---|
| 902 | 内部6个手势恢复默认值 | W | 0x5A5A | 内部6个手势恢复默认值 |
- 向寄存器
902写入固定值0x5A5A可触发设备将所有内部手势序列恢复为出厂默认值。 - 恢复默认手势后立即生效并保存,设备重启后依然保持默认手势配置。
恢复出厂设置寄存器 /903
| 寄存器地址 | 用途 | 类型 | 写入值 | 功能说明 |
|---|---|---|---|---|
903 | 恢复出厂设置 | W | 0xA5A5 | 恢复出厂设置 |
- 向寄存器
903写入固定值0xA5A5可触发设备恢复出厂设置。 - 默认ID:左手 → 恢复为
0x7E(126);右手 → 恢复为0x7F(127) - RS485 波特率:恢复为
460800 bps。 - CAN FD 波特率:恢复为
5 Mbps。
手背灯开关 /904、蜂鸣器开关/905、震动马达开关/906
| 寄存器地址 | 名称 | 说明 | 值范围 | 默认值 |
|---|---|---|---|---|
| 904 | 手背灯开关 | 控制手背 LED 灯的开关 | 0:关闭1:开启 | 1 |
| 905 | 蜂鸣器开关 | 控制蜂鸣器是否发声 | 0:关闭1:开启 | 1 |
| 906 | 震动马达开关 | 控制震动马达是否启用(振动) | 0:关闭1:开启 | 0 |
手指保护电流设置/930-935
| 寄存器地址 | 用途 | 对应手指 | 单位 | 范围 | 默认值 (mA) |
|---|---|---|---|---|---|
| 930 | 拇指 FLEX 保护电流 | 拇指尖部 (FLEX) | mA | 100 ~ 1500 | 500 |
| 931 | 拇指 AUX 保护电流 | 拇指根部 (AUX) | mA | 100 ~ 1500 | 500 |
| 932 | 食指保护电流 | 食指 | mA | 100 ~ 1500 | 500 |
| 933 | 中指保护电流 | 中指 | mA | 100 ~ 1500 | 500 |
| 934 | 无名指保护电流 | 无名指 | mA | 100 ~ 1500 | 500 |
| 935 | 小指保护电流 | 小指 | mA | 100 ~ 1500 | 500 |
- 该寄存器可以进行 读写操作,用于读取和设置手指的电流保护阈值。
- 写入保护电流时,超过范围会拒绝写入。
- 写入的保护电流仅在当前运行期间生效,关机或重启自动恢复默认值。
拇指 AUX 锁定电流 /936
| 寄存器地址 | 用途 | 类型 | 单位 | 范围 | 默认值 |
|---|---|---|---|---|---|
| 936 | 拇指 AUX 锁定电流设置 | W/R | mA | 100-500 | 200 |
- 拇指 AUX 无机械锁定,由于存在褶皱硅胶反弹力,需要使用电机电流维持锁定状态。
单位模式设置 /937
确定所有手指输入/输出数据的单位:
| 值 | 模式名称 | 输入/输出格式 |
|---|---|---|
| 0 | 归一化模式 | 0-1000(无单位) |
| 1 | 物理单位模式 | 角度(°)、速度(°/s)、电流(mA) |
- 模式说明:
| 模式 | 位置范围 | 速度范围 | 电流输入范围 | 说明 |
|---|---|---|---|---|
| 归一化模式 | 0-1000 (映射到最小-最大位置) | 0-1000 (映射到最大速度) | 0-1000 (映射到最大电流) | 适用于无单位控制,上位机无需关心具体硬件参数 |
| 物理单位模式 | 角度 (°) | 角速度 (°/s) | 电流 (mA) | 适用于精确控制,可直接设定物理值 |
手指最大/最小值设置 /938-944
所有最大/最小位置、最大速度、最大电流的设置需要携带电机编号 + 目标值,每个设置占 2 个 bytes 寄存器。
| ** 寄存器起始地址 ** | 参数类型 | 数据格式 |
|---|---|---|
| 938 | 手指最小位置 (°) | [电机编号] [最小位置值] |
| 940 | 手指最大位置 (°) | [电机编号] [最大位置值] |
| 942 | 手指最大速度 (°/s) | [电机编号] [最大速度值] |
| 944 | 手指最大电流(mA) | [电机编号] [最大电流值] |
- 各手指的默认值:
| 手指名称 | 电机编号 | 默认最小位置 (°) | 默认最大位置 (°) | 默认最大速度 (°/s) | 默认最大电流 (mA) |
|---|---|---|---|---|---|
| 拇指尖部 | 0 | 0° | 59° | 145°/s | 1000mA |
| 拇指跟部 | 1 | 0° | 90° | 150°/s | 1000mA |
| 食指 | 2 | 0° | 81° | 130°/s | 1000mA |
| 中指 | 3 | 0° | 81° | 130°/s | 1000mA |
| 无名指 | 4 | 0° | 81° | 130°/s | 1000mA |
| 小指 | 5 | 0° | 81° | 130°/s | 1000mA |
说明:
- 位置角度 最小最大值可修改,最小值默认是 0°,但可以动态调整。
- 速度和电流的最小值是固定的 0,不可配置,最大值可动态调整。
- 关机后,所有手指的 最大/最小位置、最大速度、最大电流都会恢复默认值。
手指最大/最小值读取 /946-964
| 寄存器地址 | 用途 | 拇指尖 | 拇指根 | 食指 | 中指 | 无名指 | 小指 |
|---|---|---|---|---|---|---|---|
| 946 - 951 | 最小位置读取 (°) | 946 | 947 | 948 | 949 | 950 | 951 |
| 952 - 957 | 最大位置读取 (°) | 952 | 953 | 954 | 955 | 956 | 957 |
| 958 - 963 | 最大速度读取 (°/s) | 958 | 959 | 960 | 961 | 962 | 963 |
| 964 - 969 | 最大电流读取 (mA) | 964 | 965 | 966 | 967 | 968 | 969 |
说明
- 最小/最大位置(°):用于读取手指的可运动范围,每个手指的最小和最大角度可以动态调整,但仅在开机后生效,关机后恢复默认值。
- 最大速度(°/s):用于读取手指的最大运动速度,可配置,但仅在开机后生效,关机后恢复默认值。
- 最大电流(mA):用于读取手指驱动电机的最大允许电流,可配置,但仅在开机后生效,关机后恢复默认值。
修改设备ID/1000
修改设备 ID。 可设置范围:1 - 254 。
设置ID后,立即生效,并保存到flash。
默认ID:左手默认ID为0x7e,右手默认ID为0x7f。
RS485 设备波特率/1001
RS485 设备波特率, 可以设置下面参数:
| 设置参数 | 波特率 |
|---|---|
| 0 | 115200 |
| 1 | 57600 |
| 2 | 19200 |
| 3 | 460800 |
| 4 | 1000000 |
| 5 | 2000000 |
| 6 | 5000000 |
CANFD 设备波特率/1002
CANFD设备波特率可以设置下面参数
| 设置参数 | 波特率 |
|---|---|
| 0 | 100 kbps |
| 1 | 125 kbps |
| 2 | 200 kbps |
| 3 | 250kbps |
| 4 | 400kbps |
| 5 | 500kbps |
| 6 | 800kbps |
| 7 | 1Mbps |
| 8 | 2Mbps |
| 9 | 4Mbps |
| 10 | 5Mbps |
CANFD 仲裁域采样点配置 /1003
CANFD 仲裁域采样点可以设置下面参数
| 设置参数 | 波特率/采样点 |
|---|---|
| 0 | 1000 kbps 75%采样点 |
| 1 | 1000 kbps 80%采样点 |
** 重启/1009**
设置 **重启/1009 **寄存器,灵巧手会重启。
多个手指位置时间控制/1010
每个机械手包含 6 个电机,其中大拇指由 2 个电机驱动。下表列出了寄存器与各手指电机的对应关系。
位置寄存器的取值可为归一化范围 0~1000,或为实际位置范围(单位:°)。为了实现 0.1° 的控制精度,位置值统一放大 10 倍后下发(即 1 表示 0.1°)。其中,0 表示完全张开,1000 表示完全闭合。
期望时间寄存器的取值范围为 1~2000,单位为毫秒(ms)。当设定的期望时间小于电机允许的最快执行时间时,电机将以最快速度运行。
| 手指 | 寄存器地址 | 寄存器值 |
|---|---|---|
| 大拇指Flex | 位置寄存器 1010 | 0 - 1000或 最小-最大位置(°) |
| 期望时间寄存器1011 | 1-2000 | |
| 大拇指Aux | 位置寄存器 1012 | 0 - 1000或 最小-最大位置(°) |
| 期望时间寄存器1013 | 1-2000 | |
| 食指 | 位置寄存器 1014 | 0 - 1000或 最小-最大位置(°) |
| 期望时间寄存器1015 | 1-2000 | |
| 中指 | 位置寄存器 1016 | 0 - 1000或 最小-最大位置(°) |
| 期望时间寄存器1017 | 1-2000 | |
| 无名指 | 位置寄存器 1018 | 0 - 1000或 最小-最大位置(°) |
| 期望时间寄存器1019 | 1-2000 | |
| 小指 | 位置寄存器 1020 | 0 - 1000或 最小-最大位置(°) |
| 期望时间寄存器1021 | 1-2000 |
多个手指位置速度控制/1022
每个机械手包含 6 个电机,其中大拇指由 2 个电机驱动。下表列出了寄存器与各手指电机的对应关系。
位置寄存器的取值可为归一化范围 0~1000,或为实际角度范围(单位:°)。为实现 0.1° 的控制精度,位置值统一放大 10 倍后下发(即 1 表示 0.1°)。其中,0 表示完全张开,1000 表示完全闭合。
期望速度寄存器的取值可为归一化范围 1~1000,或为实际角速度范围(单位:°/s),用于控制手指的转动速度。当设定的期望速度超过电机的最大速度时,电机会以最大速度运行。
| 手指 | 寄存器地址 | 寄存器值 |
|---|---|---|
| 大拇指Flex | 位置寄存器 1022 | 0 - 1000或 最小-最大位置(°) |
| 期望速度寄存器1023 | 1 - 1000或 期望速度(1-最大速度°/s) | |
| 大拇指Aux | 位置寄存器 1024 | 0 - 1000或 最小-最大位置(°) |
| 期望速度寄存器1025 | 1 - 1000或 期望速度(1-最大速度°/s) | |
| 食指 | 位置寄存器 1026 | 0 - 1000或 最小-最大位置(°) |
| 期望速度寄存器1027 | 1 - 1000或 期望速度(1-最大速度°/s) | |
| 中指 | 位置寄存器 1028 | 0 - 1000或 最小-最大位置(°) |
| 期望速度寄存器1029 | 1 - 1000或 期望速度(1-最大速度°/s) | |
| 无名指 | 位置寄存器 1030 | 0 - 1000或 最小-最大位置(°) |
| 期望速度寄存器1031 | 1 - 1000或 期望速度(1-最大速度°/s) | |
| 小指 | 位置寄存器 1032 | 0 - 1000或 最小-最大位置(°) |
| 期望速度寄存器1033 | 1 - 1000或 期望速度(1-最大速度°/s) |
多个手指速度控制/1034
归一化模式设置范围为-1000-1000,物理单位模式范围(-最大速度-最大速度)其中符号表示方向,正表示为握紧方向,负表示为松开方向,物理单位模式速度值单位:°/s
| 寄存器地址 | 手指 | 寄存器值 |
|---|---|---|
| 1034 | 大拇指Flex | -1000- 1000或 期望速度(-最大速度-最大速度°/s) |
| 1035 | 大拇指Aux | -1000 - 1000或 期望速度(-最大速度-最大速度°/s) |
| 1036 | 食指 | -1000 - 1000或 期望速度(-最大速度-最大速度°/s) |
| 1037 | 中指 | -1000 - 1000或 期望速度(-最大速度-最大速度°/s) |
| 1038 | 无名指 | -1000 - 1000或 期望速度(-最大速度-最大速度°/s) |
| 1039 | 小指 | -1000 - 1000或 期望速度(-最大速度-最大速度°/s) |
多个手指电流控制/1040
归一化模式设置范围为-1000-1000,物理单位模式范围(-最大电流-最大电流)其中符号表示方向,正表示为握紧方向,负表示为松开方向,物理单位模式电流值单位:mA
| 寄存器地址 | 手指 | 寄存器值 |
|---|---|---|
| 1040 | 大拇指Flex | -1000 - 1000或 期待电流(-最大电流-最大电流) |
| 1041 | 大拇指Aux | -1000 - 1000或 期待电流(-最大电流-最大电流) |
| 1042 | 食指 | -1000 - 1000或 期待电流(-最大电流-最大电流) |
| 1043 | 中指 | -1000 - 1000或 期待电流(-最大电流-最大电流) |
| 1044 | 无名指 | -1000 - 1000或 期待电流(-最大电流-最大电流) |
| 1045 | 小指 | -1000 - 1000或 期待电流(-最大电流-最大电流) |
多个手指pwm控制/1046
手指pwm控制,其中符号表示方向,正表示为握紧方向,负表示为松开方向。
| 寄存器地址 | 手指 | 寄存器值 |
|---|---|---|
| 1046 | 大拇指Flex | -1000 - 1000 |
| 1047 | 大拇指Aux | -1000 - 1000 |
| 1048 | 食指 | -1000 - 1000 |
| 1049 | 中指 | -1000 - 1000 |
| 1050 | 无名指 | -1000 - 1000 |
| 1051 | 小指 | -1000 - 1000 |
单个手指位置时间控制/1052
为了实现 0.1° 的控制精度,在物理量模式下,位置值统一放大 10 倍后下发(即 1 表示 0.1°)
| 寄存器地址 | 寄存器名称 | 寄存器值 |
|---|---|---|
| 1052 | 手指编号 | 0-5 |
| 1053 | 位置 | 1-1000或 最小-最大位置(°) |
| 1054 | 期待时间 | 1- 2000 |
单个手指位置速度控制/1055
为了实现 0.1° 的控制精度,在物理量模式下,位置值统一放大 10 倍后下发(即 1 表示 0.1°)
| 寄存器地址 | 寄存器名称 | 寄存器值 |
|---|---|---|
| 1055 | 手指编号 | 0-5 |
| 1056 | 位置 | 0-1000或 最小-最大位置(°) |
| 1057 | 期待速度(°/s) | 1 - 1000或 期望速度(1-最大速度°/s) |
单个手指速度控制/1058
| 寄存器地址 | 寄存器名称 | 寄存器值 |
|---|---|---|
| 1058 | 手指编号 | 0-5 |
| 1059 | 速度 | -1000 - 1000或 期望速度(-最大速度-最大速度°/s) |
单个手指电流控制/1060
| 寄存器地址 | 寄存器名称 | 寄存器值 |
|---|---|---|
| 1060 | 手指编号 | 0-5 |
| 1061 | 电流 | -1000 - 1000或 期待电流(-最大电流-最大电流mA) |
单个手指pwm控制/1062
| 寄存器地址 | 寄存器名称 | 寄存器值 |
|---|---|---|
| 1062 | 手指编号 | 0-5 |
| 1063 | PWM | -1000-1000 |
LED控制/1064
寄存器值
uint8_t led_mode = 1;
uint8_t led_color = 2;
uint16_t register_value = ((uint16_t)led_mode << 8) + led_color;| LED MODE | 描述 | 寄存器值 |
|---|---|---|
| 1 | LED_MODE_SHUTDOWN | 1 |
| 2 | LED_MODE_KEEP | 2 |
| 3 | LED_MODE_BLINK | 3 |
| 4 | LED_MODE_ONE_SHOT | 4 |
| 5 | LED_MODE_BLINK0_5HZ | 5 |
| 6 | LED_MODE_BLINK2HZ | 6 |
| LED COLOR | 描述 | 寄存器值 |
|---|---|---|
| 1 | LED_COLOR_R | 1 |
| 2 | LED_COLOR_G | 2 |
| 3 | LED_COLOR_RG | 3 |
| 4 | LED_COLOR_B | 4 |
| 5 | LED_COLOR_RB | 5 |
| 6 | LED_COLOR_GB | 6 |
| 7 | LED_COLOR_RGB | 7 |
Turbo模式/1065
Turbo模式掉电后恢复成默认关闭状态。
| 寄存器值 | 描述 |
|---|---|
| 0 | 关闭 |
| 1 | 开启 |
Turbo模式时间参数/1066
Turbo模式基于堵转功能来实现的,在堵转后电机停止运动一段时间(堵转时间), 转成继续运动时间,周期性执行停止和继续运动。
| 寄存器地址 | 描述 |
|---|---|
| 1066 | 堵转时间,不运动,单位ms,默认为500ms |
| 1067 | 继续运动时间,单位ms,默认为500ms |
位置自动校准/1068
位置自动校准保持寄存器, 用于开启或关闭灵巧手在上电后自动执行位置校准。位置校准是指上电后,灵巧手查找手指起始位置的过程, 在此期间所有的手指都会被打开。
该寄存器的有效值为 1 和 0, 其中 1是开启位置自动校准, 为默认状态;0是关闭位置自动校准。
当位置自动校准关闭时,用户需要进行手动位置校准。手动位置校准有两种方式, 通过 位置校准 (1069)保持寄存器,或者在上电后短按手背灯按键。
Note1: 在位置校准的过程中,如果灵巧手有抓握物体,则可能存在跌落的风险。
Note2: 在灵巧手上电后,必须执行一次位置校准,才能正常控制。
位置校准/1069
位置校准保持寄存器, 该指令仅在位置自动校准(1068) 关闭的情况下有效。
该寄存器的有效值为 1 ,即开始位置校准。
快速位置控制模式/1070-1072
快速控制模式是一种简化输入的高响应模式,通过设置 百分比位置值(0-100) 实现快速手指控制。
| 寄存器地址 | 字节偏移 | 对应手指 | 控制参数 | 说明 |
|---|---|---|---|---|
| 1070 | byte0 | 拇指根(Aux) | 百分比位置 (0-100) | 使用最大速度进行位置控制 |
| 1070 | byte1 | 拇指尖(Flex) | 百分比位置 (0-100) | 使用最大速度进行位置控制 |
| 1071 | byte0 | 食指 | 百分比位置 (0-100) | 使用最大速度进行位置控制 |
| 1071 | byte1 | 中指 | 百分比位置 (0-100) | 使用最大速度进行位置控制 |
| 1072 | byte0 | 无名指 | 百分比位置 (0-100) | 使用最大速度进行位置控制 |
| 1072 | byte1 | 小指 | 百分比位置 (0-100) | 使用最大速度进行位置控制 |
- 写入应一次性完成 3 个寄存器(1070~1072),即 6 个字节。
- 百分比位置表示相对于该手指最小/最大位置范围的归一化值:
0表示最小位置,100表示最大位置。 - 最终目标角度 = 最小位置 + 百分比 * (最大位置 - 最小位置) / 100
动作序列ACTION_CMD_ID/1098
包含命令和动作序列Index。 动作序列
uint8_t cmd = 1;
uint8_t id = 2;
uint16_tregister_value = ((uint16_t)cmd << 8) + id;| CMD | 描述 |
|---|---|
| 1 | SET_START |
| 2 | SET_FINISH |
| 3 | READ_START |
| 4 | READ_FINISH |
| 5 | SAVE |
| 6 | RUN |
| Action ID | 描述 | |
|---|---|---|
| 1 | 内置张开动作 | W/R |
| 2 | 内置握拳动作 | W/R |
| 3 | 内置两指捏动作 | W/R |
| 4 | 内置三指捏动作 | W/R |
| 5 | 内置侧边捏动作 | W/R |
| 6 | 内置单指点动作 | W/R |
| 7 | 动作序列1 | W/R |
| 8 | 动作序列2 | W/R |
| 9 | 动作序列3 | W/R |
| 10 | 动作序列4 | W/R |
| 11 | 动作序列5 | W/R |
| 12 | 动作序列6 | W/R |
| ...... | ...... | W/R |
| 30 | 动作序列24 | W/R |
动作步骤数量寄存器/1099
可读可写,表示该动作中包含的步骤数量。最多8个。
动作步骤参数寄存器/1100
可读可写,表示动作步骤中顺序,时间和位置速度力量参数,其中位置为手指位置(°),位置设置为-1时候表示手指保持原来角度,速度为手指转动速度(°/s),
| 寄存器地址 | 寄存器名称 | 描述 | |
|---|---|---|---|
| 1100 | index | 表示action 顺序,范围0-8 | W/R |
| 1101 | duration_ms | 运行时间 | W/R |
| 1102 | ctrl type | 位置时间控制:1 位置速度控制:2 电流控制:3 速度控制:4 | W/R |
| 1103 | positions[0] | 大拇指Flex 位置值 | W/R |
| 1104 | positions[1] | 大拇指Aux 位置值 | W/R |
| 1105 | positions[2] | 食指 位置值 | W/R |
| 1106 | positions[3] | 中指 位置值 | W/R |
| 1107 | positions[4] | 无名指 位置值 | W/R |
| 1108 | positions[5] | 小指 位置值 | W/R |
| 1109 | expect_interval[0] | 大拇指Flex位置控制运动时间 | W/R |
| 1110 | expect_interval[1] | 大拇指Aux位置控制运动时间 | W/R |
| 1111 | expect_interval[2] | 食指位置控制运动时间 | W/R |
| 1112 | expect_interval[3] | 中指位置控制运动时间 | W/R |
| 1113 | expect_interval[4] | 无名指位置控制运动时间 | W/R |
| 1114 | expect_interval[5] | 小指位置控制运动时间 | W/R |
| 1115 | speed[0] | W/R | |
| 1116 | speed[1] | W/R | |
| 1117 | speed[2] | W/R | |
| 1118 | speed[3] | W/R | |
| 1119 | speed[4] | W/R | |
| 1120 | speed[5] | W/R | |
| 1121 | force[0] | ||
| 1122 | force[1] | ||
| 1123 | force[2] | ||
| 1124 | force[3] | ||
| 1125 | force[4] | ||
| 1126 | force[5] |
写入动作序列

读取动作序列

实际位置值/2000
为了实现 0.1° 的控制精度,在物理量模式下,位置值统一放大 10 倍后上报(即 1 表示 0.1°)
| 寄存器地址 | 手指 | 寄存器值 |
|---|---|---|
| 2000 | 大拇指Flex | 0 - 1000或 实际角度(°) |
| 2001 | 大拇指Aux | 0 - 1000或 实际角度(°) |
| 2002 | 食指 | 0 - 1000或 实际角度(°) |
| 2003 | 中指 | 0 - 1000或 实际角度(°) |
| 2004 | 无名指 | 0 - 1000或 实际角度(°) |
| 2005 | 小指 | 0 - 1000或 实际角度(°) |
实际速度值/2006
速度值表示速度大小,符号表示电机手指运动方向。
| 寄存器地址 | 手指 | 寄存器值 |
|---|---|---|
| 2006 | 大拇指Flex | -1000-1000或 实际速度(°/s) |
| 2007 | 大拇指Aux | -1000-1000或 实际速度(°/s) |
| 2008 | 食指 | -1000-1000或 实际速度(°/s) |
| 2009 | 中指 | -1000-1000或 实际速度(°/s) |
| 2010 | 无名指 | -1000-1000或 实际速度(°/s) |
| 2011 | 小指 | -1000-1000或 实际速度(°/s) |
实际电流值/2012
电流值表示电流大小,符号表示电机手指运动方向。
| 寄存器地址 | 手指 | 寄存器值 |
|---|---|---|
| 2012 | 大拇指Flex | -1000-1000或 实际电流值(mA) |
| 2013 | 大拇指Aux | -1000-1000或 实际电流值(mA) |
| 2014 | 食指 | -1000-1000或 实际电流值(mA) |
| 2015 | 中指 | -1000-1000或 实际电流值(mA) |
| 2016 | 无名指 | -1000-1000或 实际电流值(mA) |
| 2017 | 小指 | -1000-1000或 实际电流值(mA) |
电机状态/2018
| 寄存器地址 | 手指 | 寄存器值 |
|---|---|---|
| 2018 | 大拇指Flex | 0 - 3 |
| 2019 | 大拇指Aux | 0 - 3 |
| 2020 | 食指 | 0 - 3 |
| 2021 | 中指 | 0 - 3 |
| 2022 | 无名指 | 0 - 3 |
| 2023 | 小指 | 0 - 3 |
| 寄存器值 | 描述 |
|---|---|
| 0 | 马达空闲 |
| 1 | 马达运行 |
| 2 | 马达堵转 |
| 3 | turbo |
按键状态/2025
读取按键状态。 0 表示没按下,1表示按下。
FW Version/3000
读取固件版本,10个寄存器,最大长度为20的字符串。
字符串采用大端转换到多个uint16_t寄存器。
| 大端uint16_t | Char | 字符串 |
|---|---|---|
| 0x302E, 0x302E, 0x342E, 0x5300 | 30 2E 30 2E 34 2E 53 00 | 0.0.4.S |
SN/3010
读取SN版本,10个寄存器,最大长度为20的字符串。
字符串采用大端转换到多个uint16_t寄存器。
| 大端uint16_t | Char | 字符串 |
|---|---|---|
| 0x534E, 0x3132, 0x3334, 0x3738, 0x3930, 0x3132, 0x3334, 0x3500 | 53 4E 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 00 | SN123456789012345 |