跳转至

夹爪通信说明

内容根据 bxi_motor_source 固件源码整理,通信接口采用标准 11 位 CAN ID,协议使用 MIT 控制帧。

本通信手册适用于夹爪固件 0.3.x1.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 kpkd

当前夹爪通信范围和推荐值如下:

参数 通信范围 推荐值 说明
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

首次调试时建议从较低速度和较低前馈力开始,确认运动方向、零位和机械限位后,再逐步调整 kpkd

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_raw0x7FF0x800 时,固件将其解析为精确的零前馈力。

6. MIT 回复帧

回复帧的通用布局和 master_id 规则请参考关节模组电机响应帧。夹爪的位置、速度和力字段使用本页第 5 节的物理量范围。

data[6]data[7] 的 NTC 默认解析、AUX 轮询格式和轮询顺序请参考 MIT 轮询回复说明。通过寄存器 0x6Dmit_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_SAVEmit_aux_enable 是运行时开关,上电、读取配置和保存配置后会恢复为 0

8. 配置示例

以下示例以节点 1 为例,将 kd_max 设置为当前版本的 1.0float 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/skp=2kd=0.05、前馈力 0 N

CAN ID: 0x001
DLC:    8
DATA:   71 C6 7F F6 66 0C C7 FF

该示例使用 12 位量化值 p_raw=0x71C6v_raw=0x7FFkp_raw=0x666kd_raw=0x0CC,零前馈力使用 t_raw=0x7FF

9. 使用建议与安全注意事项

  1. 首次使用前先读取 can_idmaster_idconfig_versionkd_max,确认主控使用的是当前固件参数。
  2. 确认夹爪零位、开合方向和机械限位;0 mm 为闭合,约 70 mm 为张开,协议范围 0~90 mm 不等于实际开合位置。
  3. 先使用推荐参数 kp=2kd=0.05,并从较低目标速度、较小 t_ff 开始调试。
  4. MIT 控制帧应持续发送;如果配置了非零 can_timeout_ms,应保证发送周期小于超时时间。
  5. 多个夹爪使用广播控制时,必须为每个节点预留对应的 8 字节数据区,并避免节点 ID 冲突。
  6. 修改 can_idmaster_id 或 MIT 模式等系统参数时,应在菜单状态或错误状态下操作,并在确认写入成功后再保存配置。