Mujoco足式机器人强化学习训练02(URDF转XML)
URDF转XML
URDF文件转XML文件
在安装完成mujoco playground以后,设计到三维模型的导入,在sw转出的文件大多为URDF格式,但是mujoco仿真的时候大多支持xml文件
xml文件官方地提供了转换脚本,需要下载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才能有动力,而不是像leggedgym封装的一样,直接输入活动关节数目进行自动对应
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的使用,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中创建这个点即可
5. 在xml文件中添加碰撞体
此处需要注意,虽然mujoco支持直接使用stl网格文件作为碰撞体,但是在强化学习训练的过程中,如果没有将mesh文件简化,在训练的过程中会一直报错,并且运算量会显著增大,所以此处建议简化碰撞体!!!
<geom condim="1" contype="0" conaffinity="0" />
如果你想添加碰撞体,只需要在后面设置contype和conaffinity即可,此处二者都写0代表不参与碰撞
参考文献
1.https://zhuanlan.zhihu.com/p/699075829
2.https://www.bilibili.com/video/BV1tDxAzTEFM/?spm_id_from=333.1391.0.0
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)