4.0 KiB
O30 右手 V7:只改中指指根与拇指指尖
本次用户给出了两组完整指令,并明确选择:优先修好这两组单关节,旧对指效果允许后续重新校准,其他 18 个关节参数不变,不使用分段映射。
使用
./hands/O30/scripts/run_o30_right_mujoco_plan.sh
默认模型为 linkerhand_o30_right_two_joint_calibrated.urdf。
迁移目录:exports/O30_right_V7_linear/;压缩包:exports/O30_right_V7_linear.zip。
只需要 URDF 与相同 meshes;SDK 输入按标准 limit 的 lower~upper 线性换算,不需要本项目分段映射代码。
两处修改
middle_mcp_pitch(SDK 索引 8):255 从约 81.83° 改为 90°。通过该关节自身的 origin 与行程同时调整,保留旧中指捏合中输入 78 对应的原角度。该关节 SDK 0 的模型角度由约 2.73° 变为 −0.87°。thumb_ip(SDK 索引 15):255 从约 131.01° 改为 90°。只调整该关节的行程上限,原零位保持不变。
以上角度包含原始模型坐标中的零位偏移。90° 是由照片估计的目标,不是实测角度。当前没有自动相机配准或精确图像测角。
URDF 结构检查确认:其他 18 个关节的定义、全部连杆、关节轴、网格、质量和惯量不变。没有新增自定义映射。目标关节转动会改变其下游连杆的世界姿态,这是运动学结果,不代表下游关节参数被修改。
原对指与已确认取舍
中指通过两个线性约束(78 保留旧角度,255 对应约 90°)得到解析解。 拇指则不能在线性映射下同时固定输入 0、52 和新的 255 角度。用户明确允许优先修端点,因此拇指采用保持 0、修正 255 的方案。
原食指、中指、无名指三组捏合仍满足 0.2 mm 仿真接触容差;旧小指对指指令产生约 4.72 mm 间隙,这是已接受并明确记录的取舍,不能声称四组都保持接触。没有修改原始样本指令,也没有自动向真机发送指令。
两组新测试指令中,旧 V6 本来存在约 2.79 mm 的 hand_base_link 与 thumb_proximal 碰撞网格重叠。V7 同样存在且未加重;由于用户要求该部位不动,本轮没有修改网格或其他关节来掩盖它。已知零位仍无检测到的穿透。
验证
- 两组完整指令通过真实 JointState 类型消息回调,到达约 90° 的新端点。
- 39 组输入检查实际启动模型、原生 URDF 模型与参考运动学一致。
- 其他 18 个关节定义逐项与 V6 比较,保持不变。
- 普通线性映射检查,无分段表;原生 URDF 也能直接加载。
- 9 项回归测试通过,包括前述端点、前三组对指、明确接受的小指间隙、版本切换和线性映射。
参考指令和详细结果见模型目录 o30_right_two_joint_calibration.json,报告位于 reports/o30_right_two_joint_calibration/validation.json。
对比图为同目录 comparison.png,上排 V6,下排 V7,左列中指指根、右列拇指指尖。
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_two_joints.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
重新生成这两个关节的解析修正:
venv/bin/python tools/o30_right_calibration/fit_two_joints.py --fit
O30_RIGHT_PREPARE_ONLY=1 ./hands/O30/scripts/run_o30_right_mujoco_plan.sh
venv/bin/python tools/o30_right_calibration/fit_two_joints.py --check --render
V6 备份
完整备份位于 backups/o30_v6_linear_20260921_145856/,带 SHA256 清单。
原 V6 URDF、参数、迁移包与报告均保留,历史说明见 README_v6.md;实际运行 XML 另存为 linker_hand_o30_right_linear_v6.xml。
临时切回 V6:
./hands/O30/legacy/run_o30_right_v6_linear.sh
正常执行原启动脚本即可恢复 V7。