文章目录
- 接口参考
-
- MjSim:基本模拟
- PyMjData:瞬态数据
- MjSimPool:批处理模拟
- [MjViewer:3D 渲染](https://openai.github.io/mujoco-py/build/html/reference.html#id4)
-
- `mujoco-py` 高级功能的示例:
-
- 1、[`body_interaction.py`](./examples/body_interaction.py): 显示碰撞体之间的相互作用
- 2、[`disco_fetch.py`](./examples/disco_fetch.py): 展示了如何使用 `TextureModder` 来随机化对象纹理
- 3、[`internal_functions.py`](./examples/internal_functions.py): 显示如何调用原始 mujoco 函数,如 `mjv_room2model`
- 4、[`markers_demo.py`](./examples/markers_demo.py): 显示如何将仅可视化的几何图形添加到查看器
- 5、[`serialize_model.py`](./examples/serialize_model.py): 显示如何保存和恢复模型
- 6、[`setting_state.py`](./examples/setting_state.py): 显示如何将模拟重置为给定状态
- 7、[`tosser.py`](./examples/tosser.py): 展示了一个简单的驱动物体分拣机器人应用程序
MuJoCo 是一个物理引擎,用于使用contacts进行详细、高效的刚体模拟。
mujoco-py 允许使用 Python 3 中的 MuJoCo。
该库已更新为与 2021 年 10 月 18 日发布的 MuJoCo 2.1 版兼容。
概要
要求
目前支持以下平台:
- Linux with Python 3.6+. See the
Dockerfilefor the canonical list of system dependencies. - OS X with Python 3.6+.
以下平台已弃用且不受支持:
- Windows 支持已在 2.0.2.0 中被弃用和删除。 一个已知的良好过去版本是 1.50.1.68。
- Python 2 已在 1.50.1.0 中被弃用和删除。 Python 2 用户可以留在
0.5分支。 最新版本是0.5.7,可以使用pip install mujoco-py==0.5.7安装。
安装MuJoCo
- Download the MuJoCo version 2.1 binaries for
Linux orOSX. - Extract the downloaded
mujoco210directory into~/.mujoco/mujoco210.
If you want to specify a nonstandard location for the package,
use the env variable MUJOCO_PY_MUJOCO_PATH.
安装和使用mujoco-py
要将 mujoco-py 包含在您自己的包中,请将其添加到您的要求中,如下所示:
mujoco-py<2.2,>=2.1
要以交互方式使用“mujoco-py”,请执行以下步骤:
$ pip3 install -U 'mujoco-py<2.2,>=2.1'
$ python3
import mujoco_py
import os
mj_path = mujoco_py.utils.discover_mujoco()
xml_path = os.path.join(mj_path, 'model', 'humanoid.xml')
model = mujoco_py.load_model_from_path(xml_path)
sim = mujoco_py.MjSim(model)
print(sim.data.qpos)
# [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
sim.step()
print(sim.data.qpos)
# [-2.09531783e-19 2.72130735e-05 6.14480786e-22 -3.45474715e-06
# 7.42993721e-06 -1.40711141e-04 -3.04253586e-04 -2.07559344e-04
# 8.50646247e-05 -3.45474715e-06 7.42993721e-06 -1.40711141e-04
# -3.04253586e-04 -2.07559344e-04 -8.50646247e-05 1.11317030e-04
# -7.03465386e-05 -2.22862221e-05 -1.11317030e-04 7.03465386e-05
# -2.22862221e-05]
有关高级用法,请参阅 完整文档。
缺少 GLFW
安装时的常见错误是:
raise ImportError("Failed to load GLFW3 shared library.")
当 glfw python 包无法找到 GLFW 动态库时会发生这种情况。
MuJoCo 附带了它自己的这个库的副本,可以在安装过程中使用。
将 mujoco bin 目录的路径添加到动态加载器:
LD_LIBRARY_PATH=$HOME/.mujoco/mujoco210/bin pip install mujoco-py
这在没有 GLFW 包的 Ubuntu 14.04 上特别有用。
Ubuntu安装疑难解答
因为 mujoco_py 已经编译了需要链接到提供的 MuJoCo 二进制文件的本机代码,所以它正在安装
在 linux 上可能比纯 Python 源代码包更具挑战性。
要在 Ubuntu 上安装 mujoco-py,请确保已安装以下库:
sudo apt install libosmesa6-dev libgl1-mesa-glx libglfw3
如果您安装了上述库,但仍然看到找不到 -lGL 的错误,很可能您需要直接创建符号链接:
sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/x86_64-linux-gnu/libGL.so
Development
要运行提供的单元和集成测试:
make test
要测试 GPU 支持的渲染,请运行:
make test_gpu
目前这在一定程度上取决于内部 OpenAI 基础设施,但如果您为自己的设置更改“Makefile”参数,它应该会运行。
接口参考
MjSim:基本模拟
-
mujoco_py.load_model_from_path(路径) 从路径加载模型。
-
mujoco_py.load_model_from_xml(xml_string) 从包含 XML 标记的字符串加载并返回 PyMjModel 模型。将用于在模型中创建返回的模型的 XML 字符串.xml。
-
mujoco_py.load_model_from_mjb(路径) 从编码的 MJB 字节加载并返回 PyMjModel 模型。MJB是一种MuJoCo自定义格式,包括网格/纹理等资源。
-
类
mujoco_py.MjSim(model, data=None, nsubsteps=1, udd_callback=None)MjSim 表示一个正在运行的模拟,包括其状态。
与 Gym的
MujocoEnv类似,它在内部包装了一个PyMjModel和一个PyMjData。 参数: 型号 :
PyMjModel 要模拟的模型。
数据 :
PyMjData 模拟状态的可选容器。如果出现以下情况,将创建
.
None nsubsteps : int
每次调用 step
()时要运行的 MuJoCo 步骤的可选数量。缓冲区每步只能交换一次。 udd_callback : fn(
MjSim) -> dict 用户定义动态的可选回调。 在每次调用 step() 时,它都会在 sim.udd_state 中接收一个包含当 前用户定义的动态状态的 MjSim 对象 sim,并在应用用户定义的动态后返回下一个 udd_state。 这很有用,例如 对于在历史状态函数上运行的奖励函数。
属性
方法
get_state() 返回模拟器状态的副本。
render() 从摄像机渲染视图,并将图像作为 numpy.ndarray 返回。
Args: - width (int): 所需的图像宽度。- 高度(整型):所需的图像高度。- camera_name(str):模型中相机的名称。如果无,则免费将使用相机。
深度(布尔):如果为 True,则返回深度缓冲区返回:- rgb(uint8 数组):来自相机的图像缓冲区 - 深度(浮点数组):来自相机的深度缓冲区(仅返回)如果深度 = 真)
reset() 重置仿真数据并清除缓冲区。
save() 将模拟器模型和状态作为 MuJoCo XML 或 MJB 文件保存到文件中。当前状态将另存为模型文件中的关键帧。这对于使用 MuJoCo 的模拟实用程序进行调试非常有用。
请注意,这不会保存作为 MjSimState 一部分的 UDD 状态,因为 MuJoCo 本身不支持该状态。如果要将模型与UDD状态一起保存,则应在MjModel上使用get_xml或get_mjb方法以及MjSim.get_state,并使用例如pickle保存它们。
参数:- 文件(IO 流):要将模型写入的流。- 格式:要使用的格式(“xml”或“mjb”) - keep_inertials(bool):如果为False,则删除所有<惯性>由 MuJoco 自动派生的 geoms 属性。请注意,这也会删除用户提供的那些。
set_state() 从 MjSimState 设置状态。如果 MjSimState 以前是从 numpy 数组中解压的,请考虑set_state_from_flattened,因为防御性副本是内部循环中的大量开销。
Args: - value (MjSimState): 所需的状态。- call_forward:可选择调用 sim.forward()。在以下情况下默认调用:
设置udd_callback。
set_state_from_flattened() 此帮助器方法从数组设置状态,而无需防御性副本。
step() 通过调用
mj_step来推进模拟。 如果
qpos或qvel被直接修改,则如果用户udd_callback需要访问在转发动态期间设置的 MuJoCo 状态,则需要在step()之前调用 forward()。 -
类
mujoco_py.MjSimState 表示模拟器状态的快照。
这包括时间,qpos,qvel,act和udd_state。
属性
方法
-
mujoco_py.ignore_mujoco_warnings()[来源] 用于在某个范围内关闭 mujoco 警告异常的类。适用于大型矢量化部署。
PyMjData:瞬态数据
PyMjData相关类是从 MuJoCo C 头文件自动生成的。有关此过程的详细信息,请参阅自动生成的包装器。因此,它们的结构直接遵循MuJoCo结构。
-
类
mujoco_py.PyMjData属性
actact_dotactive_contacts_efc_posactuator_forceactuator_lengthactuator_momentactuator_velocitybody_jacpbody_jacrbody_xmatbody_xposbody_xquatbody_xvelpbody_xvelrcacccam_xmatcam_xposcdofcdof_dotcfrc_extcfrc_intcinertcontactcrbctrlcvelefc_ARefc_AR_colindefc_AR_rowadrefc_AR_rownnzefc_Defc_Jefc_JTefc_JT_colindefc_JT_rowadrefc_JT_rownnzefc_J_colindefc_J_rowadrefc_J_rownnzefc_Refc_arefefc_befc_diagApproxefc_forceefc_frictionlossefc_idefc_marginefc_solimpefc_solrefefc_stateefc_typeefc_velenergygeom_jacpgeom_jacrgeom_xmatgeom_xposgeom_xvelpgeom_xvelrlight_xdirlight_xposmaxuse_conmaxuse_efcmaxuse_stackmocap_posmocap_quatnbuffernconnenefcnfnstackpstackqLDqLDiagInvqLDiagSqrtInvqMqaccqacc_uncqacc_warmstartqfrc_actuatorqfrc_appliedqfrc_biasqfrc_constraintqfrc_inverseqfrc_passiveqfrc_uncqposqvelsensordataset_joint_qposset_joint_qvelset_mocap_posset_mocap_quatsite_jacpsite_jacrsite_xma

最低0.47元/天 解锁文章
3656

被折叠的 条评论
为什么被折叠?



