O30 右手 V10:新零位约束下的保守修正
本轮先调整右手。左手 V9、exports/O30_V9_left_right/ 及其左右手副本均未更新。
启动与新零位
./hands/O30/scripts/run_o30_right_mujoco_plan.sh
默认加载 linkerhand_o30_right_zero_v10_calibrated.urdf。重启窗口后,启动/张开预设采用用户本次给出的零位:
[0,0,255,197,110,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
话题仍为 /cb_right_hand_control_cmd,20 个 SDK 0~255 值,按 URDF lower~upper 纯线性换算。零位偏移写在 URDF origin,不存在新增分段或特殊指令分支。
修改范围与照片依据
照片显示四指接近并行、侧面接近伸直,但未提供相机内外参或实测角度。本轮使用“接近并行/伸直”的几何先验,不声称做了精确照片测角或逐像素配准。渲染对比两版使用同一组新零位指令和相同视角,避免以改变相机掩盖模型差异。
仅修改以下六个关节的 origin 旋转和 limit upper:
- 四指侧摆:
index_mcp_roll、middle_mcp_roll、ring_mcp_roll、pinky_mcp_roll。 - 食指弯曲:
index_mcp_pitch、index_pip。
其余 14 个关节参数、关节轴、网格、质量、惯量、连杆长度、拇指全部保持 V9。四指侧摆在新零位下的原始模型角度约 −0.126°、0.232°、0.477°、1.105° 调到 0°;食指指根及中间关节由约 1.632°、3.145° 调到 0°。
这里的 0° 是原始模型中的几何伸直先验,不是从照片精确量出的真机角度。不是所有 20 个指令或 URDF qpos 都为 0。
食指指尖 SDK 值在零位和食指捏合时均为 0。如果同时要求捏合完整姿态不变,就不能单独改变该点的映射。因此保留其约 2.309° 的原始偏移,避免破坏之前的食指捏合;本轮不声称所有手指已完全符合真机全行程。
搜索方法与原约束
进行 21 组从 V9 到几何伸直目标的有界尝试。在每组中,通过两个线性锚点计算各关节 origin/行程:新零位目标,以及该手指原有捏合指令的原角度。用 MuJoCo 评估接触、穿透和已测单关节姿态,选择满足约束且零位先验误差最小的一组。这是有约束的参数搜索,并非训练了强化学习策略。
- 四组捏合的拇指和目标手指全部关节角度完全保留,因此对应完整连杆姿态、指腹接触位置保持。
- 其他未参与捏合手指的零位/侧摆可能小幅变化,不能声称四个场景的整只手每个连杆均不变。
- 原中指捏合仍用 216;小指仍用 V8/V9 已确认的对指数组。
- 已校准的中指指根、无名指指根、小指指根、中指中间关节、小指中间关节、拇指指尖、中指/无名指/小指指尖 255 角度保持 V9。
- 之前完整指令的中指单关节测试,所属手指连杆原点最大变化约 0.022 mm(来自侧摆);拇指测试所属手指姿态不变。这里并非保证全部非目标手指姿态不变。
- 食指指根 255 从约 98.505° 变为 99.411°;食指中间关节 255 从约 81.678° 变为 84.303°。这两项此前没有独立的真机端点校准约束。四指侧摆的其他输入角度也随线性斜率小幅改变。
验证
40 组命令验证原生 URDF、启动生成的 MJCF 与参考运动学一致;纯线性映射验证通过。四组捏合满足 0.2 mm 接触容差,新旧零位指令均无检测到的网格穿透。原有 11 项回归测试通过,包括新启动零位、四组对指及中指指根/拇指指尖端点。
报告:reports/o30_right_zero_v10_calibration/validation.json。
渲染:同目录 comparison.png,上排 V9,下排 V10,左列正面、右列侧面。
模型参数记录:模型目录 o30_right_zero_v10_calibration.json。
O30_RIGHT_PREPARE_ONLY=1 ./hands/O30/scripts/run_o30_right_mujoco_plan.sh
OPENBLAS_NUM_THREADS=1 venv/bin/python tools/o30_right_calibration/fit_zero_v10.py --check --render
source /opt/ros/jazzy/setup.bash
PYTHONPATH="$PWD/venv/lib/python3.12/site-packages:$PYTHONPATH" python3 tools/o30_right_calibration/test_calibration.py
以上检查不向真机发布命令。历史单关节测试中的既有掌部/拇指近节网格问题不在本轮改动范围内。
迁移与回退
新右手迁移包 exports/O30_right_V10_linear.zip,包含 URDF、meshes、关节顺序、新零位与四组对指命令。仅需按关节名称读取 URDF 限位线性换算,不依赖拟合脚本。
V9 备份:backups/o30_v9_before_zero_20260922_103038/。旧 V9 及左右手 V9 导出副本未覆盖,历史说明见 README_v9.md。旧运行 XML 快照为 linker_hand_o30_right_middle_v9.xml。
临时切回 V9 模型运行 ./hands/O30/legacy/run_o30_right_v9_linear.sh。注意启动预设现在采用新零位数组;如需完全复现旧 V9 零位,请发送旧 [0,0,255,195,100,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 指令。