使用mujoco_py的示例


介绍

即使在阅读正式文档后,我也常常不理解如何使用它,因此我阅读了示例代码并总结了mujoco_py的用法示例。

使用例

创建模拟器

的实例

1
2
3
import mujoco_py
model = mujoco_py.load_model_from_path(fullpath)
sim = mujoco_py.MjSim(model, nsubsteps=n_substeps)

获取模拟器的状态

1
state = copy.deepcopy(sim.get_state())

查看来自查看器

的渲染结果

1
2
viewer = mujoco_py.MjViewer(sim)
viewer.render()

接收渲染结果为RGB图像而不会反射到查看器

1
2
3
viewer = mujoco_py.MjRenderContextOffscreen(sim, device_id=-1)
viewer.render()
data = viewer.read_pixels(width, height, depth=False)

关闭查看器

1
viewer = None

获取分钟时间dt

1
2
dt = sim.model.opt.timestep * sim.nsubsteps
# timestepは1stepあたりにかかる時間で、nsubstepsはステップ中に呼ばれるサブステップ数

从分钟时间dt

查找FPS

1
FPS = int(np.round(1.0 / dt))

重置模拟

1
2
sim.set_state(initial_state)
sim.forward()  # xpos, qposを変更したら呼ぶ必要がある

推进仿真

1
sim.step()

控制接头#1

1
2
for i in range(action.shape[0]):
    sim.data.ctrl[i] = action[i]

控制关节#2

1
sim.data.set_joint_qpos('object0:joint', object_qpos)

获取在任务空间

中标记为site的零件的位置和速度

1
2
3
pos = self.sim.data.get_site_xpos('hoge_site')
velp = self.sim.data.get_site_xvelp('hoge_site')
velr = self.sim.data.get_site_xvelr('hoge_site')

获取关节位移和速度

1
2
3
for name in sim.model.joint_names:
    qpos = sim.data.get_joint_qpos(name)
    qvel = sim.data.get_joint_qvel(name)

将零件名称转换为ID

1
2
3
4
5
6
7
# from body name to id
body_id = sim.model.body_name2id('robot0:gripper_link')
xpos = sim.data.body_xpos[body_id]

# from site name to id
site_id = self.sim.model.site_name2id('target0')
pos = sim.model.site_pos[site_id]

设置动作捕捉的位置

1
2
sim.data.set_mocap_pos('robot0:mocap', gripper_target)
sim.data.set_mocap_quat('robot0:mocap', gripper_rotation)]

样例代码

  • OpenAI体育馆fetch_env.py
  • OpenAI体育馆robot_env.py