ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MuJoCo Python 绑定:5 分钟跑通第一次物理仿真

MuJoCo Python 绑定:5 分钟跑通第一次物理仿真 MuJoCo Python 绑定5 分钟跑通第一次物理仿真【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco第一次想用 MuJoCo 做仿真却不想碰 C 语言、不想调编译MuJoCo Python 绑定MuJoCo 全称 Multi-Joint dynamics with Contact就是那条捷径。它把 C 语言写的物理内核打包成了标准 Python 包你不用再跟动态库较劲几行代码就能让一个带关节、带碰撞的场景动起来。这篇文章不打算铺陈所有接口而是按「先看懂、再跑通、最后能自己改」的顺序给你一条能直接落地的上手路径。全程十分钟级别。 心智模型先分清图纸和现场这一节帮你解决「看到一堆 MjModel、MjData 不知道谁是谁」的问题。在 MuJoCo Python 绑定里这两个对象几乎每行代码都会碰到。MjModel是图纸几何体、关节、质量这些「不会变」的东西都画在上面。MjData是现场同一张图纸机器人此刻站哪、速度多少这些「每帧都在变」的状态存在这里。一个 MjModel 可以配无数个 MjData相当于同一张图纸反复开工、随时存档重来。安装与最小可运行代码这一节帮你解决「MuJoCo 安装这一步到底敲什么」的问题。MuJoCo Python 绑定发布在 PyPI 上终端里跑一条pip install mujoco就装好依赖也一起带齐不用额外下载任何东西。装完最小可运行代码就下面这么长import mujoco xml mujoco worldbody geom namebrick typebox size0.15 0.1 0.05 rgba0.8 0.3 0.2 1/ geom nameorb pos0.35 0 0.06 typesphere size0.05 rgba0.2 0.5 0.8 1/ /worldbody /mujoco model mujoco.MjModel.from_xml_string(xml) data mujoco.MjData(model) mujoco.viewer.launch(model, data)from_xml_string从字符串读模型如果你有一个现成的.xml文件换成mujoco.MjModel.from_xml_path(路径)就行两种加载方式后面都会用到。 可视化怎么选三种查看器对比这一节帮你解决 MuJoCo 可视化里「想看到画面时该调哪个函数」的问题。模式启动方式适合谁一行代码托管查看器代码里调launch阻塞当前线程想边点边看、不想手写循环mujoco.viewer.launch(model, data)独立应用命令行跑 viewer 模块只想打开一个现成模型看看python -m mujoco.viewer --mjcf场景.xml被动查看器代码里调launch_passive不阻塞要自己掌控仿真步调with mujoco.viewer.launch_passive(model, data)托管查看器会占住你的主线程画面里能动、能用鼠标转视角最省事被动查看器反过来把控制权交还给你的代码你写while循环、它负责刷新画面。写脚本、录数据、接强化学习基本都走被动这一路。⚡ 进阶能力速览这一节帮你解决「上手之后还能玩什么」的问题四个能力各说三句。命名访问不想记编号可以按名字取。data.geom(orb).xpos直接给出那个球的位置mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_GEOM, orb)则把名字换成编号名字版更省心。MjSpec 动态建模不想手写 XML 也能造模型。spec mujoco.MjSpec()之后spec.worldbody.add_body()加一个刚体、再add_geom()挂上球或盒子最后spec.compile()编译成能仿真的 MjModel。完整玩法见 python/mjspec.ipynb。控制回调想在每步仿真里塞点自定义逻辑就注册一个回调。mujoco.set_mjcb_control(fn)之后fn 会在每个控制周期被调用一次你在里面改data.ctrl就能驱动执行器。离屏渲染录视频不开窗口的渲染负责出图。with mujoco.Renderer(model) as renderer:里循环调renderer.update_scene(data)再renderer.render()把每一帧攒成列表用mediapy一存就是视频。完整小案例让人形机器人动起来这一节帮你解决「把所有零件串成一个能跑的循环」的问题。用 MuJoCo Python 绑定跑 model/humanoid/humanoid.xml代码不到十行import numpy as np model mujoco.MjModel.from_xml_path(model/humanoid/humanoid.xml) data mujoco.MjData(model) mujoco.mj_resetDataKeyframe(model, data, 0) with mujoco.viewer.launch_passive(model, data) as viewer: while viewer.is_running(): data.ctrl[:] 0.3 * np.random.randn(model.nu) mujoco.mj_step(model, data) viewer.sync()这里关节力矩是随机的所以机器人会晃着往前挪——这正是强化学习要优化的东西。想接真实策略把data.ctrl换成你的网络输出即可。 踩坑速查这一节帮你解决「跑起来之后不对劲」的问题。现象原因解法仿真明显偏慢场景里几何体太多碰撞检测开销大砍掉看不见的 geom或把单步步长调大模型炸了、飘了关节刚度阻尼没配好或重力方向不对给关节加阻尼、检查重力与摩擦设置画面和状态对不上改了 data 却没刷新场景渲染前务必调renderer.update_scene(data)资源就这三个够用MuJoCo 教程 python/tutorial.ipynb、API 参考 doc/APIreference/index.rst、模型库 model/。剩下的就是打开终端、敲下那行import mujoco让第一个场景自己动起来。【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表