MuJoCo基础仿真构建 小小白向简单示例

建模概述

MuJoCo 中有几个称为“模型”的实体。 用户在以 MJCF 或 URDF 编写的 XML 文件中定义模型。 然后,该软件可以在不同媒体(文件或内存)和不同描述级别(高或低)上创建同一模型的多个实例。 所有组合都是可能的,如下表所示:

High LevelLow Level
FileMJCF/URDF (XML)MJB (binary)
MemorymjCModel (C++ class)mjModel (C struct)

所有运行时计算均使用 mjModel 执行,该模型太复杂而无法手动创建。 这就是为什么我们有两个层次的建模。 高层的存在是为了方便用户:它的唯一目的是编译成可以执行计算的低层模型。 生成的 mjModel 可以加载并保存到二进制文件 (MJB) 中,但是这些文件是特定于版本的并且无法反编译,因此模型应始终保留为 XML 文件。

(内部)C++ 类 mjCModel 与 MJCF 文件格式大致一一对应。 XML 解析器解释 MJCF 或 URDF 文件并创建相应的 mjCModel。 原则上,用户可以通过编程方式创建 mjCModel,然后将其保存到 MJCF 或编译它。 然而,此功能尚未公开,因为无法从独立于编译器的库导出 C++ API。 有计划围绕它开发一个 C 包装器,但目前解析器和编译器总是一起调用,并且只能在 XML 中创建模型。

下图显示了获取 mjModel 的不同路径(同样,第二个要点尚不可用):

  • (文本编辑器)→ MJCF/URDF 文件→(MuJoCo parser → mjCModel → MuJoCo compiler)→ mjModel
  • (用户代码)→ mjCModel →(MuJoCo compiler)→ mjModel
  • MJB 文件→(MuJoCo loader)→ mjModel

示例

这是 MuJoCo 的 MJCF 格式的简单模型。 它定义了一个固定在世界上的平面、一个可以更好地照亮物体并投射阴影的灯光,以及一个具有 6 个自由度的浮动框(这就是“自由”关节的作用)。简单的一个MJCF文件


<!-- demo_1.xml -->
<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 10" quat=".33 .44 .55 .66">
      <joint type="free"/>
      <geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
    </body>
  </worldbody>
</mujoco>

下面从零搭建这个MuJoCo可视化应用。使用Cmake构建MinGW Makefiles,(个人习惯如下结构写c),从CMakeLists.txt开始。需要预先配置好MinGW c编译环境。
建立项目结构如下:
在这里插入图片描述

使用MuJoCo发布版Releases · deepmind/mujoco (github.com)里的Sample下basic.cc文件,这是加载MJCF并OpenGL可视化的demo。MuJoCo使用OpenGL渲染,对接GLFW,OpenGL推荐有认识,推荐学习资源:主页 - LearnOpenGL CN (learnopengl-cn.github.io)

  • include:头文件,从MuJoCo和GLFW发布版里整个拷贝
  • lib:库文件glfw3.dll mujoco.lib mujoco.dll
  • model:存放MJCF模型,上述demo_1.xml
  • src:源码,MuJoCo发布版Sample内的basic.cc
  • CMakeLists.txt:cmake必须
    CMakeLists.txt内简单一写:
cmake_minimum_required(VERSION 3.5)

project(MuJoCoDemo_1)

# 安装路径
set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/install) 
# 库路径
set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib)
# include路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
# 抓代码
file(GLOB SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc)

# 生成可执行程序MuJoCoDemo_1
add_executable(MuJoCoDemo_1 ${SOURCES})

# 链接glfw3和mujoco库
target_link_libraries(MuJoCoDemo_1 ${LIB_DIR}/mujoco.lib)
target_link_libraries(MuJoCoDemo_1 ${LIB_DIR}/glfw3.dll)

# install到一起去
install(FILES ${LIB_DIR}/mujoco.dll ${LIB_DIR}/glfw3.dll ${CMAKE_CURRENT_SOURCE_DIR}/model/demo_1.xml
        DESTINATION ${CMAKE_INSTALL_PREFIX})
install(TARGETS MuJoCoDemo_1  
        RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX})  

到项目目录中,执行:

cmake -B ./build -G "MinGW Makefiles"
cmake --build ./build
cmake --install ./build

进入install路径下,可以测试程序了,很简单:

.\MuJoCoDemo_1.exe .\demo_1.xml

结果,天上掉下个小绿块儿,按下Backspace可以reset重新掉落:
在这里插入图片描述

这个红色的平面和绿色的快都是由demo_1.xml中描述的。MJCF建模语言参考MJCF XML Reference

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值