用途:通过 MjSpec 以程序化方式构建和修改 MuJoCo 模型,MjSpec 是镜像 MJCF XML 模式的可变 C++ 与 Python 数据结构。
主要能力:可用 Python 的 mujoco.MjSpec() 或 C++ 的 mj_makeSpec/mjs_addBody/mj_compile 构建模型;向 worldbody 添加 body、freejoint、geom、joint、site、camera;支持球体、胶囊、圆柱、盒体、椭球、平面等几何类型;支持 quat、euler、axisangle、xyaxes、zaxis 朝向,euler/axisangle 默认以度为单位。可附加子模型并通过前缀命名空间重命名子 body,跨 spec 约束需先将子模型附加到公共父级。可删除 body(含子树)、geom、joint、actuator;spec.recompile 可在运行时保留物理状态重新编译。执行器需显式指定 trntype,提供力矩电机、位置伺服、速度执行器,注意 set_to_position 等只设增益不设传动类型。默认类 MjsDefault 提供级联样式,classname 需传对象而非字符串。碰撞由 contype/conaffinity 位掩码决定,condim 决定摩擦分量。还支持程序化网格、材质与传感器,如加速度计、陀螺仪。
使用方式:import mujoco;spec = mujoco.MjSpec();通过 add_* 方法构建;model = spec.compile();C++ 中 mj_compile 失败时用 mjs_getError 获取错误,最后 mj_deleteSpec 释放。
限制:几何尺寸为零会导致编译错误;attach 需 frame 或 site 二选一,否则抛 ValueError;recompile 返回新分配实例需重新赋值。文档、MJCF 指南、XML 参考与 MjSpec 测试为关键参考。