概述
配置 MIT 阻抗控制参数,使能电机,把每个关节从当前测量位置平滑插值到零位,然后保持。 这是控制 Wuji Hand 2 的基本范式。示例本身做的是归零,但publisher.send() 这条路径同样承载遥操作、轨迹回放、上层控制器输出。
对应的 Python 示例为 2.publish.py,C 示例为 1_control_motion.c。
关节命令的字段与取值范围见关节状态与控制,控制模式与安全边界见控制指南,本页只讲怎么跑起来与实测结果。
本示例会使能电机并驱动全部在线关节。开始前清空手部周围的人员、线缆与台面物品,全程有人监护,并保持随时断电的条件。
插值的作用
直接发pos=0 和插值到 pos=0,在 MIT 阻抗下是两种完全不同的动作。
MIT 控制的力矩正比于位置偏差。手部原本弯曲时,第一帧 pos=0 的偏差就是「当前角度 − 0」,配上 kp=3 会产生一个大力矩,手猛地弹回零位。
插值的做法是先读当前位置,再把目标从当前值线性拉到 0。每帧的偏差都很小,力矩随之很小,整段动作柔和。柔和来自目标轨迹,不是来自调低增益,所以 kp 与 kd 保持正常值。
前置条件
硬件
本示例连接扫到的第一台 Wuji Hand 2(
hand_devices[0])。共用网络里要改成指定 SN。
软件
控制参数
这三个控制量与出厂默认值一致,实测读回也是
kp=3, kd=0.05, effort_limit=1.5。
数据流
参数设置支持广播
effort_limit 与 mit_params 的 set() 是多态的:
运行时分支
ext_state 取值:0 为 Init,1 为 Ready,2 为 Enabled,3 为 Stopped。实测 enable 前全部关节是 1,enable 后 52 毫秒内全部变 2。
调用顺序
- Python
- C
运行与输出
- Python
- C
实测数据
在 20 关节全在线的右手 Wuji Hand 2 上实跑:enable() 返回与电机就绪之间差了 26 倍时间。这段窗口里发出的指令会被丢弃或产生非预期行为,等待步骤是必需的。
归零后各关节没有精确停在 0,残留在 0.02 rad 以内。MIT 阻抗是柔性控制,静摩擦与重力会让实际位置与目标存在稳态偏差,这是正常表现。
调整与适配
调整归零柔和度
改HOME_SECONDS。调大让每帧位置增量更小,动作更柔和。不要用降低 kp 的方式求柔和,那会牺牲整体跟随精度。
接入自己的轨迹
将第 5 步的插值替换为轨迹源,publisher.send() 的调用方式不变。每次 send() 发送一个完整的 20 维帧,SDK 序列化后直接发出、不等待响应,因此能支撑高频循环。