🤖 roboto_origin_03 Wiki
首页 / URDF / MJCF 模型设计原理

MJCF(MuJoCo Composite Format)是 MuJoCo 物理引擎的原生模型描述格式,与 URDF 相比,它并非简单的结构转换,而是围绕接触动力学、约束求解和仿真效率重新设计的模型定义层。本页面向已具备 URDF 基础的高级开发者,系统解析 atom01.xmlatom01_terrain.xml 的架构决策、参数继承体系与几何配置策略,揭示如何从零构建一个可用于强化学习训练的高保真双足机器人仿真模型。

双场景文件的组织哲学

本仓库提供两个语义等价但场景目标不同的 MJCF 文件:atom01.xml 面向平地实验,atom01_terrain.xml 面向地形适应训练。二者在机器人本体定义上保持逐字一致,仅在环境几何与初始位姿上产生分化,这种"模型-场景解耦"的设计避免了因地形切换而重复维护 23 组关节参数、惯性矩阵与传感器配置。平地版本将基座初始高度置于 z=0.75 并配以至无穷平面作为地面,而地形版本将基座抬升至 z=2.75 以匹配高度场的垂直尺度,同时以 hfield 替换 plane 作为地面几何体,确保机器人在复杂地形上初始化时不会发生穿透。

Sources: atom01.xml | atom01_terrain.xml

顶层仿真配置架构

MJCF 文件的头部依次声明了编译器行为、积分器选项与内存预算。compiler 元素强制角度单位为弧度,指定网格资源目录为 ../meshes/,并采用 zyx 欧拉角顺序,这直接决定了后续所有旋转属性的解析方式。option 元素配置积分步长为 1 ms,单次步进迭代 100 次,选用 PGS(Projected Gauss-Seidel)约束求解器,并开启 frictionloss 标志以启用关节摩擦损耗模型。size 元素则为仿真预先分配至多 5000 个约束Jacobian节点与 1000 个接触点内存池,避免动态扩容带来的实时性抖动。这些参数共同构成了模型与求解器之间的"契约层":任何对步长或迭代次数的修改都会直接影响接触稳定性和关节力矩的收敛行为。

Sources: atom01.xml

Default 参数继承与分类体系

MuJoCo 的 default 机制是 MJCF 区别于 URDF 的核心设计优势之一。它允许开发者在树根定义通用参数,再通过嵌套的 default class 为特定元素族创建派生默认值。本模型构建了一个三层继承体系:根级 default 为所有关节开启限位、为所有电机开启控制限幅,并将几何体的接触维度设为 4(支持法向与切向摩擦)、接触类型为 1、接触隶属掩码为 0;在此之下分支出 visualgeomobstaclewaist_joint_paramleg_joint_paramarm_joint_param 五个子类。其中三个关节参数类分别对应腰部、腿部与手臂关节,统一施加 damping="0.01"frictionloss="0.01"armature="0.01",这一设计使得全身 23 个驱动关节的动力学基底参数得以集中维护,而脚踝关节又可通过局部属性覆盖将 frictionloss 提升至 0.05,实现"大类统一、局部微调"的精细化管理。

Sources: atom01.xml

下表展示了三类关节参数类的覆盖范围与默认值差异:

参数类 覆盖关节 damping frictionloss armature 局部覆盖说明
waist_joint_param torso_joint 0.01 0.01 0.01
leg_joint_param 左右腿共 12 个关节 0.01 0.01 0.01 脚踝关节局部覆盖为 0.05
arm_joint_param 左右臂共 10 个关节 0.01 0.01 0.01

Sources: atom01.xml

资产管理与外部资源引用

asset 段负责声明仿真所需的全部外部资源,包括天空盒纹理、棋盘格地面材质、碰撞网格与高度场。所有连杆网格均以 mesh 元素注册,文件名与 meshes/ 目录下的 STL 资源一一对应,MuJoCo 在编译阶段会将这些凸包或三角网格预处理为内部碰撞表示。平地版本额外声明了一个程序化的 hfield 占位符但未实际挂载,而地形版本则将 terrain_hfield.png 解析为 200×200 采样点的高度场,并赋予 10.0×10.0 的水平范围与 3.4 的最大高度尺度。材质系统上,matplane 绑定棋盘格纹理用于地面可视化,visualgeomobstacle 则为两类几何体提供独立的 RGBA 与反射率参数,这种资源集中注册模式使得视觉资产的修改无需深入嵌套的运动学树即可全局生效。

Sources: atom01.xml | atom01_terrain.xml

运动学树的嵌套体设计

MJCF 的 worldbody 采用严格的父子嵌套结构描述运动学链,而非 URDF 的扁平化 link-joint 对。base_link 作为浮动基座通过 type="free" 的关节锚定在世界坐标系中,其下依次分叉出左腿链、右腿链与躯干链,躯干再衍生出左臂链与右臂链。每条链的 body 元素内部同时声明 inertial(含完整 3×3 惯性张量的 6 个独立分量)、joint(旋转轴与限位)与 geom(可视化/碰撞网格),这种"体-惯量-关节-几何"的四元内聚结构使得单个连杆的全部物理属性在源码层面集中呈现,大幅降低了跨文件追踪的心智负担。以下为简化后的运动学拓扑:

graph TD
    WB[worldbody] --> BASE[base_link<br/>free joint]
    BASE --> LTY[left_thigh_yaw_link]
    LTY --> LTR[left_thigh_roll_link]
    LTR --> LTP[left_thigh_pitch_link]
    LTP --> LK[left_knee_link]
    LK --> LAP[left_ankle_pitch_link]
    LAP --> LAR[left_ankle_roll_link]
    
    BASE --> RTY[right_thigh_yaw_link]
    BASE --> T[torso_link]
    T --> LAP2[left_arm_pitch_link]
    LAP2 --> LAR2[left_arm_roll_link]
    LAR2 --> LAY[left_arm_yaw_link]
    LAY --> LEP[left_elbow_pitch_link]
    LEP --> LEY[left_elbow_yaw_link]
    
    T --> RAP[right_arm_pitch_link]

Sources: atom01.xml

几何体的碰撞-视觉分层策略

模型在几何层面实施了一种隐式的"碰撞主导"策略:所有连杆的 geom 均未显式指定 class,因此直接继承根级 default 的 condim="4"contype="1"conaffinity="0",这意味着每个网格同时承担视觉渲染与碰撞检测职责,且默认能与环境中任意几何体(隶属掩码非零)发生接触。与此同时,visualgeom 类被预定义为 condim="1"contype="0",若未来需要为视觉美观添加高精度外壳而不影响碰撞动力学,只需将对应 geom 指向该 class 即可实现零成本的视觉-碰撞解耦。根级几何摩擦系数设置为 0.9 0.2 0.2,分别对应滑动摩擦、扭转摩擦与滚动摩擦,这一配置对足式机器人的地面接触稳定性至关重要,因为过低的切向摩擦会导致 foot slip,而过高的扭转摩擦则可能在高速步态中引入非物理的粘滞效应。

Sources: atom01.xml

执行器与传感器的模型级集成

虽然执行器动力学与传感器标定将在后续页面深入讨论,但从模型架构视角看,MJCF 将 actuatorsensor 作为与 worldbody 同级的独立段声明,这一设计体现了"物理结构-驱动接口-观测接口"的三层分离原则。actuator 段为 23 个关节各挂载一部 motor,统一采用 gear="1" 的直驱模型与 ±200 N·m 的控制限幅;sensor 段则为每部执行器配套声明了位置、速度与力矩三组传感器,并在 base_link 的质心处通过 site 元素建立 IMU 观测原点,进一步引出了方向、角速度、线速度、线加速度与磁强计五类惯性传感器。这种"一关节一电机三传感"的密集布局,使得模型在强化学习环境中能够以 81 维以上的观测向量输出全身状态,而无需在运行时进行额外的正向运动学计算。

Sources: atom01.xml

平地与地形版本的差异对照

尽管两个文件在机器人物理定义上完全一致,但环境配置的差异决定了二者适用的验证阶段不同。下表对关键分化点进行总结:

维度 atom01.xml(平地) atom01_terrain.xml(地形)
地面几何 type="plane" 无限平面 type="hfield" 高度场
高度场来源 程序化占位 hf0(未挂载) 外部 PNG terrain_hfield.png
基座初始高度 z=0.75 z=2.75
水平范围 无限 10.0 × 10.0
典型用途 基础平衡、步态生成验证 地形适应、鲁棒性训练

Sources: atom01.xml | atom01_terrain.xml

下一步阅读建议

理解 MJCF 的静态架构后,建议按照以下路径深入各子系统:若需理解执行器控制接口与力矩映射细节,请继续阅读 执行器与控制接口;若关注 IMU 传感器的噪声模型与数据流设计,请参阅 传感器系统与 IMU 配置;若希望对比平地与地形场景在训练策略上的影响,可跳转至 平地与地形仿真场景对比;而若需从格式语义层面理解 URDF 到 MJCF 的映射规则与差异根因,则推荐阅读 URDF 到 MJCF 的映射与差异