按手型启动 MuJoCo
这里是新的日常使用入口。根目录统一使用 run.sh;旧 run_*.sh 已归档到 archive/launchers/。URDF、网格不复制成第二份运行资产:各目录的 assets 是指向包内原资产的相对符号链接。
启动
在工程根目录执行:
./hands/G20/run_left.sh
./hands/G20/run_right.sh
./hands/O6/run_left.sh
./hands/O6/run_right.sh
./hands/L6/run_left.sh
./hands/L6/run_right.sh
./hands/O12/run_right.sh
./hands/O30/run_left.sh
./hands/O30/run_right.sh
常用双窗入口为各手型的 compare_left.sh / compare_right.sh。完整实现及关节监视脚本放在各手型 scripts/ 中。G20/O6/L6 双窗所需原始对照 URDF 已快照到各自 reference/,来源和散列见 reference_sources.json;这些文件用于配合包内模板生成对照窗口,不是独立网格资产包。G20 的 L20 对照改用包内已有资产,O12 对照改用工程内 assets/vendor/Linkerbot_URDF/012/right。O12 当前只有右手入口。
hands/L20_V10.1/assets 是 G20 双窗对照所用的原版 L20 模型。
O30 V5~V9 旧入口放在 hands/O30/legacy;历史 URDF 保留,但历史主动分段映射不再执行。
hands/legacy/run_sim.sh 保留旧 ROS launch 接口;日常使用优先选择上方按手型的桥接器。
映射规则
- 主动关节不查 JSON 角度表,使用实际加载的 URDF 派生 MJCF 关节限位线性换算。通道顺序、正反方向属于 SDK 协议,继续保留。
- G20/O6/L6/O30 的 SDK 输入仍为 0~255;O12
/o12/right/joint_cmd仍为 12 路 SDK 弧度,不要发送 0~255 数组。 - 被动关节默认读取对应 URDF 的
mimic比例和偏移。 - G20 左手默认额外使用
G20/calibration/left_passive.json:文件只包含被动关节相对于主关节角度的曲线,没有主动命令查表。缺失时明确提示并回退到 URDF mimic。 - G20 右手保持默认 URDF 线性 mimic;如需现有右手被动曲线,可以显式指定
--passive-json。 - O30 没有被动关节,保持全主动线性;V10 几何和关节参数未修改。
- 运行时不再因为导入公共函数而读取 G20 JSON。其余手型不需要 G20 的标定文件。
G20 被动曲线开关示例:
# 左手全部采用 URDF 线性关系,包括被动关节
./hands/G20/run_left.sh --passive-json none
# 右手主动线性,被动使用已有标定联动曲线
./hands/G20/run_right.sh --passive-json "$PWD/hands/G20/calibration/right_passive.json"
旧 --mapping g20_calibrated 等名称作为兼容别名保留,含义已调整为“主动线性 + 可选被动曲线”,不再代表主动查表。切换后 G20 左手同一 SDK 指令的姿态可能不同于旧标定查表结果。
资产与配置
assets 中有历史版本;正常单窗使用所在手型当前 MJCF 和对应的标准 URDF 文件,不按修改时间猜测“最新版本”。O30 当前仍由其启动脚本从指定 V10 URDF 生成模型。
其他手型现有单窗读取已经生成的 MJCF;修改 URDF 后需同步生成 MJCF,不能只改 URDF 文本就期待已有 XML 自动变化。此次已核对常用 SDK 手型当前 URDF 与 MJCF 关节限位一致。
自定义/双窗模型通过 --mapping-urdf PATH 明确指定 passive mimic 来源;主动限位始终与实际仿真的模型一致。双窗脚本已传入各自 URDF,避免套用另一窗口的联动比例。O12 旧 --o12-urdf 参数继续兼容。
被动 JSON 的精简格式为 schema_version: 1、passive_maps;每个条目包含 master、master_rad、passive_rad。只允许描述 URDF 中的被动关节。旧 JSON 的显式导入仍可用于转换被动联动:其中主关节曲线只用作被动曲线横坐标,绝不用于主动命令映射。
备份与测试
本轮前的启动脚本、Python 驱动及完整包内 URDF/网格保存在:
archive/backups/before_hand_layout_20260928_102428/。
历史测试文件也已保存。备份用于恢复旧行为,不建议与新映射代码混用。
PYTHONDONTWRITEBYTECODE=1 venv/bin/python -B tests/test_hand_mapping_policy.py
source /opt/ros/jazzy/setup.bash
PYTHONPATH="$PWD/venv/lib/python3.12/site-packages:$PYTHONPATH" python3 tools/o30_right_calibration/test_calibration.py
本轮是驱动与目录整理,不是重新标定真机。没有向真机话题发指令。