MuJoCo 入门教程(三)Python 绑定

系列文章目录

 


前言

        从 2.1.2 版开始,MuJoCo 附带使用 pybind11 以 C++ 开发的本地 Python 绑定。Python API 与底层的 C API 保持一致。这导致了一些非 Python 代码结构(如函数参数的顺序),但其好处是 API 文档适用于两种语言。

        Python 绑定作为 mujoco 包发布在 PyPI 上。这些都是底层绑定,旨在尽可能直接访问 MuJoCo 库。不过,为了提供开发人员期望在典型 Python 库中使用的 API 和语义,这些绑定在许多地方故意与原始 MuJoCo API 有所不同,本页将对此进行详细记录。

        Google DeepMind 的 dm_control 强化学习库(在 1.0.0 版本之前,该库基于 ctypes 实现了自己的 MuJoCo 绑定)已更新为依赖于 mujoco 包,并继续得到 Google DeepMind 的支持。dm_control 中的更改对以前版本的用户来说应该基本透明,但直接依赖于其底层 API 的代码可能需要更新。详情请查阅迁移指南。

        对于 mujoco-py 用户,我们在下文中提供了帮助迁移的说明。

 


 

一、教程笔记本

        这里有使用 Python 绑定的 MuJoCo 教程:colab

二、安装

        建议通过 PyPI 安装此软件包:

pip install mujoco

        MuJoCo 库的副本作为软件包的一部分提供,无需单独下载或安装。

三、交互式查看器

        作为 Python 软件包的一部分,mujoco.viewer 模块提供了一个交互式图形用户界面查看器。它与随 MuJoCo 二进制版本一起发布的仿真应用程序基于相同的代码库。支持三种不同的使用情况:

3.1 独立应用程序

  • python -m mujoco.viewer
    会启动一个空的可视化会话,可通过拖放方式加载模型。
  • python -m mujoco.viewer --mjcf=/path/to/some/mjcf.xml
    启动指定模型文件的可视化会话。

 

3.2 托管查看器

        通过函数 viewer.launch 从 Python 程序/脚本中调用。该函数会阻塞用户代码,以支持物理循环的精确计时。如果用户代码是作为引擎插件或物理回调实现的,并在 mj_step 期间被 MuJoCo 调用,则应使用此模式。

  • viewer.launch()
    会启动一个空的可视化会话,可通过拖放方式加载模型。
  • viewer.launch(model)
    为给定的 mjModel 启动一个可视化会话,在该会话中,可视化器会在内部创建自己的 mjData 实例
  • viewer.launch(model, data)
    与上述操作相同,但可视化器会直接对给定的 mjData 实例进行操作,退出时数据对象将被修改。

3.3 被动查看器

        调用 viewer.launch_passive(model,data)。该函数不会阻塞,允许用户代码继续执行。在此模式下,用户脚本负责计时和推进物理状态,除非用户明确同步传入事件,否则鼠标拖动扰动将不起作用。

警告

        在 MacOS 上,launch_passive 要求通过特殊的 mjpython 启动器执行用户脚本。mjpython 命令是作为 mujoco 软件包的一部分安装的,可直接用于替代常用的 python 命令,并支持相同的命令行标志和参数集。例如,脚本可以通过 mjpython my_script.py 执行,IPython shell 可以通过 mjpython -m IPython 启动。

         launch_passive 函数返回一个句柄,可用于与查看器交互。它具有以下属性:

  • cam、opt 和 pert 属性:分别对应 mjvCamera、mjvOption 和 mjvPerturb 结构。
  • lock():为作为上下文管理器的查看器提供一个互斥锁。由于查看器运行自己的线程,用户代码必须确保在修改任何物理或可视化状态之前持有查看器锁。这些属性包括传递给 launch_passive 的 mjModel 和 mjData 实例,以及查看器句柄的 cam、opt 和 pert 属性。
  • sync():同步 mjModel、mjData 和 GUI 用户输入自上次调用 sync 后的状态。为了允许用户脚本在无需锁定查看器的情况下对 mjModel 和 mjData 进行任意修改,被动查看器不会在同步调用之外访问或修改这些结构。
  • 用户脚本必须调用同步才能使查看器反映物理状态的变化。同步函数还会将用户输入从图形用户界面传回 mjOption(位于 mjModel 内部)和 mjData,包括启用/禁用标志、控制输入和鼠标扰动。
  • update_hfield(hfieldid):更新指定 hfieldid 处的高度字段数据,以便后续渲染。
  • update_mesh(meshid): 更新指定网格 ID 上的网格数据,以便后续渲染使用。
  • update_texture(texid): 更新指定 texid 处的纹理数据,以便后续渲染使用。
  • close():以编程方式关闭查看器窗口。该方法可以在不锁定的情况下安全调用。
  • is_running():如果查看器窗口正在运行,则返回 True;如果已关闭,则返回 False。该方法可在不加锁的情况下安全调用。
  • user_scn:一个 mjvScene 对象,允许用户在渲染场景中添加更改渲染标志和添加自定义可视化地形。它与查看器内部用于渲染最终场景的 mjvScene 是分开的,完全由用户控制。用户脚本可以调用 mjv_initGeom 或 mjv_makeConnector 等脚本向 user_scn 添加可视化几何图形,在下一次调用 sync() 时,查看器就会将这些几何图形添加到未来渲染的图像中。同样,用户脚本也可以更改 user_scn.flags,这些更改将在下一次调用 sync() 时被接收。同步()调用还会将通过图形用户界面对渲染标志所做的更改复制到 user_scn 中,以保持一致性。例如
    with mujoco.
  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。下面是一个简单的OpenCV入门教程Python版本): 1. 安装OpenCV库:首先,你需要安装OpenCV库。可以使用pip命令在命令行中执行以下命令进行安装: ``` pip install opencv-python ``` 2. 导入OpenCV库:在Python脚本中,你需要导入OpenCV库才能使用其中的函数和类。可以使用以下代码导入OpenCV库: ```python import cv2 ``` 3. 读取和显示图像:使用OpenCV可以轻松读取和显示图像。以下是一个读取和显示图像的示例代码: ```python # 读取图像 image = cv2.imread('image.jpg') # 显示图像 cv2.imshow('Image', image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 4. 图像处理:OpenCV提供了许多图像处理函数,可以对图像进行各种操作,如调整大小、裁剪、旋转、滤波等。以下是一个简单的图像处理示例代码: ```python # 调整图像大小 resized_image = cv2.resize(image, (new_width, new_height)) # 裁剪图像 cropped_image = image[y:y+h, x:x+w] # 旋转图像 rotated_image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE) # 图像滤波 blurred_image = cv2.GaussianBlur(image, (kernel_size, kernel_size), 0) ``` 5. 视频处理:除了图像处理,OpenCV还可以处理视频。以下是一个简单的视频处理示例代码: ```python # 打开视频文件 video = cv2.VideoCapture('video.mp4') while True: # 读取视频帧 ret, frame = video.read() if not ret: break # 显示视频帧 cv2.imshow('Video', frame) # 按下 'q' 键退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放视频对象和关闭窗口 video.release() cv2.destroyAllWindows() ``` 这只是OpenCV的入门教程的一小部分,OpenCV还有很多其他功能和应用。你可以通过阅读OpenCV官方文档和参考其他教程来深入学习和探索OpenCV的更多功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值