URDF 转 XML 配置指南
安装 MuJoCo Playground 后,涉及三维模型导入。SolidWorks 导出的文件多为 URDF 格式,但 MuJoCo 仿真主要支持 XML 文件。
MuJoCo 官方提供了转换脚本,需下载 MuJoCo 工程文件(注意与 MuJoCo Playground 不同)。
1. MuJoCo 工程文件下载
https://mujoco.org/download/mujoco210-linux-x86_64.tar.gz
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/.mujoco/mujoco210/bin
2. 在 URDF 文件中添加配置
<mujoco><compiler meshdir="../meshes/" balanceinertia="true" discardvisual="false"/></mujoco>
meshdir: STL 网格文件存放地址balanceinertia="true": 启用惯量平衡(仿真更真实)discardvisual="false": 保留视觉几何体(可视化更好)
注意: 需与 <link> 平级,直接写在最上面。
3. 转换命令
cd ~/.mujoco/mujoco210/bin
./compile /path/to/model.urdf /path/to/model.xml
可直接写 URDF 文件的绝对地址,以及保存 XML 文件存放的绝对地址。
若需仿真验证 XML 文件转化是否成功,可执行:
./simulate /path/to/model.xml
4. 在 XML 文件中添加执行器(Actuator)
Actuator 可理解为电机。MuJoCo 较为严谨,每一个关节都需要指定 Actuator 才能有动力,而非像 Legged Gym 封装的一样直接输入活动关节数目。
Actuator 有多种格式,可设置位置模式、力矩模式、速度模式以及 General 通用格式等。此处仅介绍 Position 设置方法。
<actuator>
<position class="hexapod" name="RF_HAA" joint="RF_HAA"/>
<position class="hexapod" name="RF_HFE" joint="RF_HFE"/>
<position class="hexapod" name="RF_KFE" joint="RF_KFE"/>
<position class="hexapod" name="RM_HAA" joint="RM_HAA"/>
<position class="hexapod" name="RM_HFE" joint="RM_HFE"/>
<position class="hexapod" name="RM_KFE" joint="RM_KFE"/>
<position class="hexapod" name="RB_HAA" joint="RB_HAA"/>
<position class="hexapod" name="RB_HFE" joint="RB_HFE"/>
<position class="hexapod" name="RB_KFE" joint="RB_KFE"/>
<position class="hexapod" name="LF_HAA" joint="LF_HAA"/>
<position class="hexapod" name="LF_HFE" joint="LF_HFE"/>
<position class="hexapod" name="LF_KFE" joint="LF_KFE"/>
<position class="hexapod" name="LM_HAA" joint="LM_HAA"/>
<position class="hexapod" name="LM_HFE" joint="LM_HFE"/>
<position class="hexapod" name="LM_KFE" joint="LM_KFE"/>
<position class="hexapod" name="LB_HAA" joint="LB_HAA"/>
<position class="hexapod" name="LB_HFE" joint="LB_HFE"/>
<position class="hexapod" name="LB_KFE" joint="LB_KFE"/>
</actuator>
示例使用的是六足机器人,具有 18 个活动关节,因此添加了 18 个位置模式的电机。
注:由于这 18 个关节高度重复,此处运用了 class 的概念(用来设置 kp 和 damping,以及 forcerange 等参数),class 的具体用法可参考 MuJoCo 官方 XML 文档说明。
5. 在 XML 文件中添加传感器(Sensor)
MuJoCo 的传感器及其他功能的添加主要在 XML 文件中实现。
目前使用到的传感器,一般是监控某一个点的数据。
Site 的定义:
<site name="imu" pos="0 0 0" group="5"/>
传感器定义:
<sensor>
<gyro site="imu" name="gyro"/>
<velocimeter site="imu" name="local_linvel"/>
<accelerometer site="imu" name="accelerometer"/>
<framezaxis objtype="site" objname="imu" name="upvector"/>
<framelinvel objtype="site" objname="imu" name="global_linvel"/>
<frameangvel objtype="site" objname="imu" name="global_angvel"/>
</sensor>
如果想替换进自己的 XML 文件,只需要在 XML 中创建这个点即可。
6. 在 XML 文件中添加碰撞体
注意:虽然 MuJoCo 支持直接使用 STL 网格文件作为碰撞体,但在强化学习训练过程中,如果没有将 Mesh 文件简化,训练过程中会一直报错,且运算量显著增大。建议简化碰撞体。
<geom condim="1" contype="0" conaffinity="0"/>
如果想添加碰撞体,只需要在后面设置 contype 和 conaffinity 即可,此处二者都写 0 代表不参与碰撞。


