LoginSignup
9
4

More than 3 years have passed since last update.

mujoco_pyの使用例

Posted at

はじめに

公式ドキュメントを読んでも使い方がよくわからないことが結構あったので、サンプルコードを読んでmujoco_pyの使用例をまとめた。

使用例

シミュレータのインスタンスを作る

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

シミュレータの状態を取得する

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

ビュアーからレンダー結果を見る

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

ビュアーには写さずRGB画像としてレンダー結果を受け取る

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

ビュアーを閉じる

viewer = None

微小時間dtを得る

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

微小時間dtからFPSを求める

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

シミュレーションをリセットする

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

シミュレーションを進める

sim.step()

関節を制御する #1

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

関節を制御する #2

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

siteタグのついたパーツのタスク空間中の位置と速度を取得する

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')

関節変位と速度を得る

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

パーツの名前をIDに変換する

# 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]

モーションキャプチャの位置を設定する

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

サンプルコード

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4