🧪 新教程持续更新中 · 从机械臂到传感器,跟着教程从零搭建
跳到主要内容

02 · 仿真模型验证(MJCF 加载与驱动) ​

前置:完成 01 环境准备。本章全部是仿真验证,不需要连接硬件。

模型来源 ​

SO-ARM101 的三份公开 MJCF 模型,本项目全部验证可用:

简称文件来源
官方-新校准SO101/so101_new_calib.xmlTheRobotStudio/SO-ARM100 官方仓库(本教程的对比验证取自该处;本仓库不附带原始 zip)
官方-旧校准SO101/so101_old_calib.xml同仓库(zip 中没有,需下载)
ROS2 描述包so_arm101_description/mjcf/so_arm101.xml本仓库教程附件 SO-ARM101_ROS2.zip

注:zip 提取流程由早期版 so101_assets.py 提供并保留可查;2026-10-16 起仿真机器人已迁移到 mujoco_menagerie 的 SO-ARM100 模型(vendored 于 assets/menagerie_so_arm100/, 迁移原因与要点见 07 设计说明)。

驱动与渲染验证 ​

bash
export UV_CACHE_DIR='C:\Users\admin\AppData\Local\Temp\uv-cache'

# 仓库自带、可直接运行的是 menagerie 模型(仿真机器人默认也用它)
uv run --frozen --with mujoco python examples/so101_mujoco/load_and_drive.py \
    --model examples/so101_mujoco/assets/menagerie_so_arm100/so_arm100.xml \
    --out-dir examples/so101_mujoco/outputs/renders/model_check
参数说明
--modelMJCF 模型路径。仓库自带可直接用的是 examples/so101_mujoco/assets/menagerie_so_arm100/so_arm100.xml(上表三份历史模型如需复验,先从"来源"列对应仓库获取,再把路径换过去)
--out-dir产物目录:验证视频、静帧与结构摘要 txt 都写在这里(默认 out)
--tag产物文件名前缀,默认取模型文件名
--settle / --fps / --width / --height每个姿态的稳定时长(秒)、视频帧率、渲染分辨率;默认 25 fps、960×720,一般不用改

脚本会输出结构摘要(关节/执行器/增益/范围)、渲染一段"六关节逐个扫掠 + 协调正弦"的验证视频和静帧。 结构摘要样例见 reports/(随仓库提供);对照视频(media/)体积较大,不随仓库分发——按上面的命令可随时重新生成。

三模型关键差异(实测) ​

项目官方-新校准官方-旧校准ROS2 描述包
零位语义关节行程中点水平完全伸展位行程中点
关节名shoulder_pan同左shoulder_pan_joint(后缀)
位置增益kp=998.22, kv=2.731kp=17.8, kv=0kp=998.22
夹爪单位弧度 hinge弧度 hinge0–1 归一化
自碰撞排除无无有(6 对)

跟踪误差实测:新校准与描述包静止保持误差 0.0005 rad,旧校准 0.03 rad(下垂约 1.7°,kp 弱 56 倍)。 仿真里评估同一策略,换模型会得到不同动态,注意记录用的是哪一份。

必须记住的模型行为 ​

  1. shoulder_lift 正方向朝下:驱动力矩中"下摆"用正角度,做遥操映射或数据换算时先验符号。
  2. 压地即挡:下摆极限会让指尖接触地面并被挡停(脚本内置 8cm 离地保护自动裁幅)。
  3. 官方模型无相机、无 keyframe;带相机的变体 so101_new_calib_camera.xml 存在,后续录视觉数据可用。