介绍
即使在阅读正式文档后,我也常常不理解如何使用它,因此我阅读了示例代码并总结了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) |
获取在任务空间
中标记为
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