控制指南

本页讲解如何正确、安全地控制 Wuji Hand 2:单位约定、MIT 控制律、关节表、参数安全边界与安全控制循环。接口定义与完整 API 见 SDK 接口

单位与符号

单位来源与说明
positionrad(关节侧)joint_states 流,获取关节角的唯一推荐路径
velocityrad/s(关节侧)joint_states
effortA(电流,非 N·m)joint_states 流反馈与 joint_command 前馈同单位

joint_diagnostics 流不含关节角,关节角只从 joint_states 读取。

MIT 控制律

设备默认运行在 MIT 力位混合控制模式,控制模式不通过 Python API 切换:

τ = Kp · (q_d − q) + Kd · (dq_d − dq) + τ_ff
  • q_d / dq_d / τ_ff 来自 joint_commandposition / velocity / effort,每次发布恰好 20 个 JointCommand
  • Kp / Kd 通过 mit_params 读写,力矩上限通过 effort_limit 读写。写入拒绝 NaN、Inf、负值与超出设备上限的值,写入被拒时当前生效值保持不变

上电默认值为 kp = 5.0kd = 0.01effort_limit = 1.0 A,设备重启后恢复默认值。设置控制参数时,kp 不低于 3.0kd 使用 0.01–0.05effort_limit 不超过 1.5 A。设备允许的 effort_limit 硬上限为 2.0 A

关节表

编号规则:thumb 0–3、index 4–7、middle 8–11、ring 12–15、pinky 16–19,SDK 标签格式 {finger}_S{1..4}

索引SDK 标签关节(按 S1 → S4)运动范围模型关节名模型执行器名
0–3thumb_S1..S4掌根展收(cmc_flex)/ 掌根侧摆(cmc_abd)/ MCP 屈伸(mcp)/ IP 屈伸(ip)-68°~74° / -85°~40° / -60°~90° / -60°~90°{l,r}_thumb_*{l,r}_THJ{0-3}
4–7index_S1..S4MCP 屈伸(mcp_flex)/ MCP 侧摆(mcp_abd)/ PIP 屈伸(pip)/ DIP 屈伸(dip)-60°~90° / -40°~40° / -60°~120° / -60°~90°{l,r}_index_finger_*{l,r}_FFJ{0-3}
8–11middle_S1..S4同四指通用同四指通用{l,r}_middle_finger_*{l,r}_MFJ{0-3}
12–15ring_S1..S4同四指通用同四指通用{l,r}_ring_finger_*{l,r}_RFJ{0-3}
16–19pinky_S1..S4同四指通用同四指通用{l,r}_pinky_*{l,r}_LFJ{0-3}

运动范围与模型文件(URDF / MJCF / USD)关节限位一致,左右手对称。模型关节与连杆按 {l,r}_ 前缀加手指名命名,根连杆为 {l,r}_wrist(带安装座变体为 {l,r}_mount),详见 Wuji Description 文档

SDK 标签 S1..S4 与模型执行器 J0..J3 的轴序对应关系暂不提供,将在后续更新。

零位与运动方向

  • set_origin / clear_origin 支持把当前物理位置标定为用户零点,关节运动中延迟到下次 IDLE 生效,见 SDK 接口

控制频率与命令频率

  • 设备控制频率 1000 Hz × 20 轴。1 kHz 为上下行报文频率,一条报文含 20 轴的控制与信息
  • joint_states 原生输出率 1000 Hz,可通过订阅句柄调低推送频率,见 SDK 接口
  • GET 查询建议不超过 100 Hz,PUB 命令最高支持 1 kHz

参数安全边界

高 kp 且无限速时直接下发大幅目标位置,会导致关节全速运动,有夹伤与撞击风险。修改控制参数前确保设备周围无人且工作区已清空。

  • 首次调试从低力矩限幅开始(如 effort_limit().set(0.5),单位 A),确认行为符合预期后再逐步放宽
  • 柔和保持位置可使用 kp = 3.0kd = 0.05effort_limit = 1.5 A 作为保守参数示例
  • 大幅位置变化拆分为小步下发,避免单次阶跃
  • 抓握任务中先以低限幅试探接触,再按需提高

安全控制循环

推荐的控制循环要素:发送命令 → 读取状态 → 检查错误码 → 异常时停止。

  • 状态读取用 joint_states,错误码用 joint_diagnostics 配合 describe_error 解码
  • 异常时执行 disable(),紧急情况执行 emergency_stop()(整手立即停止,不接受掩码)
  • 故障等级、停机行为与清故障流程见故障、恢复与维护

单关节小幅运动的完整入门示例见快速开始,更多参考实现见 examples/python/wuji_hand_2/

订阅更新