更新日期:202409
前言:
记录下自己学习Mujoco历程,直接使用deepMind官方给的python使用方案。
 平台:
 python 3.12: DeepMind维护的Mujoco可以直接在3.8版本以后的python中直接安装。
 Anacoda:利用anacoda管理的自己python环境。避免安装过多版本的python。
1.安装
pip install mujoco
在anacoda中,点运行,选择openTerminal。
 
 一般3.8版本以上的可以顺利安装!
2.快速上手:
在命令窗terminal中运行
python -m mujoco.viewer   #代码1:启动mujoco,可以通过拖放加载模型。
python -m mujoco.viewer --mjcf=/path/to/some/mjcf.xml    #代码2:为指定的模型文件启动mujoco。
注意xml文件所在的路径中一定不要有中文!!!
 xml文件用于描述机器人机械臂模型,后缀为.xml,此处提供几篇大佬文章供参考:
 https://zhuanlan.zhihu.com/p/99991106
 https://zhuanlan.zhihu.com/p/143983506
运行代码1:
 
 弹出Mujoco窗口,但此时没有机器人模型,提示可以Drag-and-drop model file.
 
 将.xml格式的机器人模型拖入mujoco即可显示,此处文件夹路径不要有中文.
 
 如果没有xml模型,可以将下面的代码复制到txt文件中,保存,修改文件后缀为.xml,这段代码源自官方Mujoco Decumentation
<mujoco>
   <worldbody>
      <light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>    
      <geom type="plane" size="1 1 0.1" rgba=".9 0 0 1"/>
      <body pos="0 0 1">
         <joint type="free"/>
         <geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
      </body>
   </worldbody>
</mujoco>
运行代码2:
 
 代码2相当于直接打开对应文件夹的xml模型.
Python中使用
代码参考:mujoco最新教程
import time
import mujoco
import mujoco.viewer
import os
file_path = r"C:\Users\XXX\Desktop\robotxml\robot3.xml" #修改为自己的xml地址,注意地址不要有中文!!
print(f"File exists: {os.path.exists(file_path)}")
print(f"Current working directory: {os.getcwd()}")
print(f"File is readable: {os.access(file_path, os.R_OK)}")
m = mujoco.MjModel.from_xml_path(file_path)
d = mujoco.MjData(m)
with mujoco.viewer.launch_passive(m, d) as viewer:
    # 30时间步长后关闭mujoco程序窗口 viewer
    start = time.time()
    while viewer.is_running() and time.time() - start < 30:
        step_start = time.time()
        # Mj_step可以替换为同样求值的代码
        # mj_step可以替换为同样评估策略并在执行物理之前应用控制信号的代码。
        mujoco.mj_step(m, d)
        # 查看器选项的修改示例:每两秒钟切换一次接触点。
        with viewer.lock():
            viewer.opt.flags[mujoco.mjtVisFlag.mjVIS_CONTACTPOINT] = int(d.time % 2)
        # 获取物理状态的更改,应用扰动,从GUI更新选项。
        viewer.sync()
        # 粗略的计时,相对于挂钟会有漂移。
        time_until_next_step = m.opt.timestep - (time.time() - step_start)
        if time_until_next_step > 0:
            time.sleep(time_until_next_step)
分享下用的xml格式文件:
<mujoco model="example">
  <default>
    <geom rgba=".8 .6 .4 1"/>
  </default>
  <asset>
    <texture type="skybox" builtin="gradient" rgb1="1 1 1" rgb2=".6 .8 1" width="256" height="256"/>
  </asset>
  <worldbody>
    <light pos="0 1 1" dir="0 -1 -1" diffuse="1 1 1"/>
    <body pos="0 0 1">
      <joint type="ball"/>
      <geom type="capsule" size="0.06" fromto="0 0 0  0 0 -.4"/>
      <body pos="0 0 -0.4">
        <joint axis="0 1 0"/>
        <joint axis="1 0 0"/>
        <geom type="capsule" size="0.04" fromto="0 0 0  .3 0 0"/>
        <body pos=".3 0 0">
          <joint axis="0 1 0"/>
          <joint axis="0 0 1"/>
          <geom pos=".1 0 0" size="0.1 0.08 0.02" type="ellipsoid"/>
          <site name="end1" pos="0.2 0 0" size="0.01"/>
        </body>
      </body>
    </body>
    <body pos="0.3 0 0.1">
      <joint type="free"/>
      <geom size="0.07 0.1" type="cylinder"/>
      <site name="end2" pos="0 0 0.1" size="0.01"/>
    </body>
  </worldbody>
  <tendon>
    <spatial limited="true" range="0 0.6" width="0.005">
      <site site="end1"/>
      <site site="end2"/>
    </spatial>
  </tendon>
</mujoco>
使用效果如下图!
 
3.声明:引用了大佬的文章和代码,已注明,侵删!
引用
- https://mujoco.readthedocs.io/en/stable/overview.html
- https://zhuanlan.zhihu.com/p/380716224
- https://zhuanlan.zhihu.com/p/639017263
- https://zhuanlan.zhihu.com/p/656678983
- MuJoCo自定义机器人建模指南:https://zhuanlan.zhihu.com/p/143983506



















