概述

  • mujoco是一种物理引擎
  • 在速度和精度方面优于其他物理引擎
  • mujoco没有提供商业级优化器
  • 正在开发Optico新产品,提供了商业级优化器
  • mojoco将用户的便携性和计算效率进行了分层设计
  • 可以加载MJCF的xml格式文件也可以加载URDF模型文件。
  • mujoco2.0开始简称mujoco,之前称为mujocopro

    Mujoco

    Mujoco是一个动态库,具有C-API,可与windows、Linux和macOs兼容。适用于具有计算背景的研究人员和开发人员。
    其包括:

  • xml解析器

  • 模型编译器
  • 模拟器
  • 交互式OpenGL可视化器

MuJoCo 可用于实现基于模型的计算,如控制合成、状态估计、系统识别、机制设计、反向动态数据分析、机器学习应用的平行采样。它也可以用作更传统的模拟器,包括游戏和交互式虚拟环境的应用程序。

Mujoco HAPTIX

MuJoCo HAPTIX 是一款具有全功能 GUI 的最终用户产品,旨在提供与 Gazebo 相关的功能,但基于 MuJoCo 物理引擎。它仅与 64 位 Windows 兼容。它有一个基于插座的 API,可显示主库中可用的函数和数据结构的子集。HAPTIX 可用作通用模拟器,或可作为根据 DARPA 手感应和触摸接口 (HAPTIX) 程序的需要定制的模拟器。为了实现后一个目标,它集成了实时运动捕获,用于移动模拟假手的底座,以及跟踪用户头部并实现立体虚拟环境。

MuJoCo Unity Plugin

‎MuJoCo Unity Plugin旨在用 MuJoCo 物理替换统一中的默认模拟器,使 MuJoCo 用户能够利用 Unity 的渲染和编辑功能。

Mujoco VR

‎MuJoCo VR 将 MuJoCo 物理与 HTC Vive 使用的 OpenVR 工具包集成,并实现交互式虚拟环境。与奥库鲁斯裂谷的对接可以以类似的方式完成。‎

模型实例

image.png
‎所有运行时间计算都使用 mjModel 执行,mjModel 太复杂,无法手动创建。这就是为什么我们有两个层次的建模。高水平的存在是为了方便用户:其唯一目的是将之汇编成一个低级别模型,根据该模型可以执行计算。由此产生的 mjModel 可以加载并保存到二进制文件 (MJB),但无法分解,因此应始终将模型维护为 XML 文件‎.
以下图表显示了获取 mjModel 的不同路径(同样,第二个要点尚未可用):‎
image.png
下面是一个简单的模型在穆乔科的MJCF格式。它定义了固定在世界上的平面,一个能够更好地照亮物体和投射阴影的光线(即使有一个内置的大灯,通常足够),以及一个带有6个DOF的浮动盒子(这就是”免费”接头的作用)。‎
hello.xml

  1. <mujoco>
  2. <worldbody>
  3. <light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
  4. <geom type="plane" size="1 1 0.1" rgba=".9 0 0 1"/>
  5. <body pos="0 0 1">
  6. <joint type="free"/>
  7. <geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
  8. </body>
  9. </worldbody>
  10. </mujoco>

Mujoco - 图3
如果模拟此模型,盒子将落在地上。下面提供了被动动态的基本模拟代码,无需渲染。‎
hello.c

  1. #include "mujoco.h"
  2. #include "stdio.h"
  3. char error[1000];
  4. mjModel* m;
  5. mjData* d;
  6. int main(void)
  7. {
  8. // activate MuJoCo
  9. mj_activate("mjkey.txt");
  10. // load model from file and check for errors
  11. m = mj_loadXML("hello.xml", NULL, error, 1000);
  12. if( !m )
  13. {
  14. printf("%s\n", error);
  15. return 1;
  16. }
  17. // make data corresponding to model
  18. d = mj_makeData(m);
  19. // run simulation for 10 seconds
  20. while( d->time<10 )
  21. mj_step(m, d);
  22. // free model and data, deactivate
  23. mj_deleteData(d);
  24. mj_deleteModel(m);
  25. mj_deactivate();
  26. return 0;
  27. }