夹爪通信说明
内容根据 bxi_motor_source 固件源码整理,通信接口采用标准 11 位 CAN ID,协议使用 MIT 控制帧。
本通信手册适用于夹爪固件 0.3.x 和 1.4.x 的所有版本。
1. 固件与参数说明
夹爪与普通关节电机的主要区别是 MIT 帧使用夹爪物理量:
| 字段 | 普通关节电机 | 夹爪电机 |
|---|---|---|
| 位置 | rad | mm |
| 速度 | rad/s | mm/s |
kp | 由配置决定 | 0~5 |
kd | 由配置决定 | 0~1 |
t_ff / 回复 torque | N·m | 夹爪力,单位 N |
2. CAN 总线参数
夹爪使用与关节模组一致的 CAN/CAN FD 通信方式。通用通信概述请参考关节模组 CANFD 通信说明。
夹爪当前通信配置为:FDCAN 名义速率 1 Mbps,数据段速率 5 Mbps,并启用 CAN FD BRS。MIT 控制帧和回复帧均为 8 字节。
| 项目 | 配置 |
|---|---|
| 总线接口 | FDCAN / CAN FD |
| 标准 ID | 11 位标准帧 ID |
| 名义速率 | 1 Mbps |
| 数据段速率 | 5 Mbps(CAN FD BRS) |
| MIT 帧长度 | 8 字节 |
| 字节序 | 位字段按高字节在前;寄存器多字节数据按小端 |
固件回复帧会沿用接收到的帧格式。因此主控发送 MIT 控制帧时,应保持总线两端的 CAN/CAN FD、BRS 配置一致。
3. CAN ID
CAN ID、MIT 单播、广播和回复 ID 的通用规则与关节模组一致,详细说明请参考:
以下仅列出夹爪的默认 ID 和使用方式。
3.1 MIT 单播控制
MIT 控制帧发送到夹爪自身的 can_id。默认配置为:
can_id = 1
master_id = can_id | 0x010 = 0x011
夹爪回复帧发送到 master_id,回复数据中的 data[0] 为夹爪自身的 can_id。
| 帧类型 | CAN ID | 说明 |
|---|---|---|
| MIT 单播控制 | can_id | 例如节点 1 使用 0x001 |
| MIT 广播控制 | 0x7FF | 一帧最多携带多个节点的 8 字节控制块 |
| MIT 回复 | master_id | 默认节点 1 回复到 0x011 |
广播帧中,节点 n 使用偏移量 (n - 1) × 8 的 8 字节数据。使用广播时,帧 DLC 必须覆盖目标节点对应的数据区。
3.2 配置寄存器 CAN ID
配置寄存器命令使用以下规则:
CAN ID = (cmd << 4) | can_id
以默认节点 can_id=1 为例:
| 命令 | cmd | CAN ID | 请求 DLC |
|---|---|---|---|
REG_READ | 0x17 | 0x171 | 4 |
REG_WRITE | 0x18 | 0x181 | 8 |
REG_SAVE | 0x19 | 0x191 | 0 |
REG_INFO | 0x1A | 0x1A1 | 0 |
配置寄存器命令只响应目标节点的单播 ID,不使用 0x7FF 广播读取或写入寄存器。
4. MIT 控制帧格式
MIT 控制帧的字节布局、位宽和打包方式与关节模组一致,请直接参考MIT 模式主控控制帧及位宽说明。
夹爪的物理量范围和正负方向与普通关节电机不同,具体使用本页夹爪通信范围中的定义。
5. 夹爪通信范围
5.1 位置
夹爪 MIT 总线的位置含义为:
p_des = 0 mm -> 闭合
p_des ≈ 70 mm -> 张开
当前夹爪的实际使用位置建议为闭合 0 mm、张开约 70 mm。源码中的协议和保护范围为:
协议编码范围:0~90 mm
固件保护范围:0~80.55 mm
固件会将目标位置和反馈位置限制在 0~80.55 mm 的保护范围内,但上位机应以实际机构的约 70 mm 张开位置作为应用目标,不要直接把 90 mm 当作实际开合位置。
位置编码公式:
p_raw = uint16((p_des / 90.0) × 65535)
p_des = p_raw / 65535 × 90.0 mm
5.2 速度
夹爪速度的 CAN 映射范围由配置寄存器 max_vel 计算:
v_limit = round(89.5 × max_vel / 2π) mm/s
v_des = -v_limit ~ +v_limit mm/s
源码默认 max_vel=45 rad/s,对应通信速度范围约为:
v_des = -642 ~ +642 mm/s
速度编码公式:
v_raw = uint12((v_des + v_limit) / (2 × v_limit) × 4095)
v_des = v_raw / 4095 × (2 × v_limit) - v_limit
5.3 kp 与 kd
当前夹爪通信范围和推荐值如下:
| 参数 | 通信范围 | 推荐值 | 说明 |
|---|---|---|---|
kp | 0~5 | 2 | 位置刚度参数 |
kd | 0~1 | 0.05 | 速度阻尼参数 |
编码公式:
kp_raw = uint12(kp / 5.0 × 4095)
kd_raw = uint12(kd / 1.0 × 4095)
推荐初始控制参数:
kp = 2.00
kd = 0.05
首次调试时建议从较低速度和较低前馈力开始,确认运动方向、零位和机械限位后,再逐步调整 kp 和 kd。
5.4 前馈力 t_ff
夹爪 MIT 帧中的 t_ff 表示夹爪力,单位为 N。通信范围由当前构建版本的电流限幅换算得到:
F_limit = current_limit × 0.07 × 1 / (2 × 0.007125)
t_ff = -F_limit ~ +F_limit N
当前源码默认构建的理论通信范围如下:
| 构建版本 | 默认电流限幅 | 理论力范围 |
|---|---|---|
| 50 夹爪 | 10/3 A | 约 -16.37~+16.37 N |
| 50L 夹爪 | 14.6667/3 A | 约 -24.03~+24.03 N |
符号约定:
- 正力/正扭矩:夹爪闭合。
- 负力/负扭矩:夹爪张开。
- 最大力的绝对值:50 夹爪约
16.37 N,50L 夹爪约24.03 N。
实际可用夹持力还受到机械结构、摩擦、供电、温度保护和电流降额影响。不要仅根据协议范围判断夹爪的安全夹持力。
力编码公式:
t_raw = uint12((t_ff + F_limit) / (2 × F_limit) × 4095)
t_ff = t_raw / 4095 × (2 × F_limit) - F_limit
当 t_raw 为 0x7FF 或 0x800 时,固件将其解析为精确的零前馈力。
6. MIT 回复帧
回复帧的通用布局和 master_id 规则请参考关节模组电机响应帧。夹爪的位置、速度和力字段使用本页第 5 节的物理量范围。
data[6] 和 data[7] 的 NTC 默认解析、AUX 轮询格式和轮询顺序请参考 MIT 轮询回复说明。通过寄存器 0x6D 将 mit_aux_enable 写为 1 后,最后两个字节切换为 AUX 轮询数据。
7. 配置寄存器通信
夹爪的寄存器配置功能与关节模组一致,寄存器命令、读写格式、保存操作、信息查询、数据类型和写入等级请参考电机寄存器通信协议。下文仅补充夹爪使用时的常用寄存器和参数范围。
7.1 请求与回复格式
寄存器请求使用小端字节序,float 使用 IEEE754 单精度格式。
REG_READ 请求:
data[0..3] = address
REG_WRITE 请求:
data[0..3] = address | (value_type << 8)
data[4..7] = value_raw
回复:
data[0..3] = status | (value_type << 8)
data[4..7] = value_raw
value_type 定义:
| 值 | 类型 |
|---|---|
0 | int32_t |
1 | bool |
2 | float |
3 | uint32_t |
4 | version |
7.2 夹爪常用寄存器
| 地址 | 参数 | 类型 | 通信范围 | 说明 |
|---|---|---|---|---|
0x60 | can_id | int32_t | 菜单/错误状态可写 | 夹爪自身节点 ID |
0x61 | master_id | int32_t | 菜单/错误状态可写 | 回复帧目标 ID,默认 can_id \| 0x010 |
0x63 | can_timeout_ms | int32_t | 运行中可读写 | CAN 超时保护,0 表示关闭 |
0x66 | mit_mode | bool | 菜单/错误状态可写 | MIT 协议开关 |
0x67 | max_pos | float | 运行中可读写 | 普通电机位置映射参数;夹爪位置总线范围固定为 0~90 mm |
0x68 | max_vel | float | 运行中可读写 | 参与夹爪速度范围换算,默认 45 rad/s |
0x69 | max_tor | float | 运行中可读写 | 扭矩限幅配置 |
0x6A | kp_max | float | 运行中可读写 | kp 映射上限;夹爪协议上限为 5 |
0x6B | kd_max | float | 运行中可读写 | 夹爪 kd 映射上限为 1 |
0x6D | mit_aux_enable | bool | 运行中可读写 | data[6..7] 切换为 AUX 轮询 |
0x7C | config_version | version | 只读 | 配置布局版本 |
7.3 写入配置的通信范围
配置寄存器写入等级如下:
| Level | 含义 |
|---|---|
0 | 运行中可读写 |
1 | 仅菜单状态或错误状态可写 |
2 | 系统通信参数,仅菜单状态或错误状态可写 |
3 | 只读 |
寄存器写入只修改 RAM。需要掉电保持时,应确认回复 status=0 后,再发送 REG_SAVE。mit_aux_enable 是运行时开关,上电、读取配置和保存配置后会恢复为 0。
8. 配置示例
以下示例以节点 1 为例,将 kd_max 设置为当前版本的 1.0。float 1.0 的 IEEE754 小端表示为 00 00 80 3F:
CAN ID: 0x181
DLC: 8
DATA: 6B 02 00 00 00 00 80 3F
其中:
address = 0x6B
value_type = 2(float)
value = 1.0
读取 kd_max:
CAN ID: 0x171
DLC: 4
DATA: 6B 00 00 00
发送一个示例 MIT 控制帧,目标位置 40 mm、速度 0 mm/s、kp=2、kd=0.05、前馈力 0 N:
CAN ID: 0x001
DLC: 8
DATA: 71 C6 7F F6 66 0C C7 FF
该示例使用 12 位量化值 p_raw=0x71C6、v_raw=0x7FF、kp_raw=0x666、kd_raw=0x0CC,零前馈力使用 t_raw=0x7FF。
9. 使用建议与安全注意事项
- 首次使用前先读取
can_id、master_id、config_version和kd_max,确认主控使用的是当前固件参数。 - 确认夹爪零位、开合方向和机械限位;
0 mm为闭合,约70 mm为张开,协议范围0~90 mm不等于实际开合位置。 - 先使用推荐参数
kp=2、kd=0.05,并从较低目标速度、较小t_ff开始调试。 - MIT 控制帧应持续发送;如果配置了非零
can_timeout_ms,应保证发送周期小于超时时间。 - 多个夹爪使用广播控制时,必须为每个节点预留对应的 8 字节数据区,并避免节点 ID 冲突。
- 修改
can_id、master_id或 MIT 模式等系统参数时,应在菜单状态或错误状态下操作,并在确认写入成功后再保存配置。