概述
读取随示例分发的录制文件,按设备手性选择左手或右手那一份,以 1 kHz 把 30000 帧关节角一次性回放完。 这是两个运动示例里幅度最大的一个,用来观察灵巧手的完整动作能力。示例不做插值、不做重采样、不做平滑,也不添加恢复动作,录制里是什么就发什么。 对应的 Python 示例为 opposition.py,C 示例为 opposition.c。 关节命令与控制模式见控制指南,本页只讲怎么跑起来与实测结果。本示例驱动全部 20 个关节做大幅度运动,实测指令峰值 1.43 rad,约合 82 度,持续 30 秒。开始前确认灵巧手已牢固固定,清空周围的人员、线缆与台面物品,全程有人监护,并保持随时断电的条件。
前置条件
硬件
软件
回放文件
示例目录自带data/right.replay 与 data/left.replay。要完整复制整个 6_opposition/ 目录,只拷源文件会因为找不到数据文件而失败。
数据流
文件格式
固定长度容器,头部 16 字节,之后每帧 84 字节。
手性 ID 右手为 1,左手为 2。实测文件:30000 帧、2520016 字节,与
16 + 30000 × 84 完全吻合。
校验在使能之前完成。 magic、版本、手性、关节数、文件长度五项任一不符就报错退出,不会使能电机。
运行时分支
中断时手会停在当前姿态而不是自动张开。大幅度中途停止可能停在握拳状态,需要手动处理。
调用顺序
- Python
- C
运行与输出
- Python
- C
实测数据
在 20 关节全在线的右手 Wuji Hand 2 上完整跑完一轮:
1 ms 的目标间隔在 Python 里稳定达成,30000 帧累计误差可以忽略。
结束时手自己收住了。 录制的最后一帧本身就是回到张开位,所以正常跑完不需要额外的归位动作。这是录制内容的性质,不是示例做了回位处理,中断时不享有这个保证。
各手指的运动范围
从右手回放文件离线统计每个关节的行程:
食指第三关节行程最大,1.428 rad 约合 81.8 度。
调整与适配
多设备网络下必须指定 SN
与 MIT 关节扫描相同,auto_connect() 在发现多台设备时拒绝连接并列出全部 SN,不会盲选。改成 manager.connect(sn="WH2KA00XXXXXXXXX", device_name="hand_2_opposition") 即可。
回放自己录制的轨迹
按同样的容器格式生成文件即可复用整套回放逻辑:16 字节头部加每帧 84 字节。帧序号字段在回放时被跳过,只有 20 个关节角参与控制。注意side_id 要与目标设备手性一致,否则容器校验不通过。
改变回放速度
间隔写死 1 ms。改大间隔会整体放慢动作,但因为不做重采样,关节角序列不变,只是每个姿态停留更久。想要真正的变速需要自己对轨迹重采样。中断后的复位
Ctrl+C 不触发回位。中途停止后手停在当前姿态,可以用发布控制指令的平滑归零流程把它柔和地收回零位。不要直接发pos=0,大偏差在 MIT 阻抗下会导致猛烈回弹。