はじめに
本記事は以下の人を対象としています.
- 筋骨格シミュレータに興味がある人
- MuJoCoに興味がある人
本記事では1_Get_Started.ipynbをGoogle Colabで実行した際の手順と結果に関してまとめる.
MyoSuiteとは
MuJoCoを学習モジュールとして組み込んだ筋骨格シミュレータ
2024年にICRAにてworkshopを展開
https://sites.google.com/view/myosuite/myosymposium/icra24
Tutorial Notebook
実施事項
Tutorialに記載のコードを1つずつ試して, Errorになったところは都度修正版を記載する.
ライブラリのinstallと環境変数設定
!pip install -U myosuite
%env MUJOCO_GL=egl
環境変数MUJOCO_GL=egl
を設定しないとmujoco.FatalError: gladLoadGL error
が出る.
https://github.com/Farama-Foundation/Gymnasium/issues/501#issuecomment-1730755393
ライブラリのimportと結果表示の関数
from myosuite.utils import gym # importが上手くいくと"MyoSuite:> Registering Myo Envs"と表示される
import skvideo.io
import numpy as np
import os
from IPython.display import HTML
from base64 import b64encode
def show_video(video_path, video_width = 400):
video_file = open(video_path, "r+b").read()
video_url = f"data:video/mp4;base64,{b64encode(video_file).decode()}"
return HTML(f"""<video autoplay width={video_width} controls><source src="{video_url}"></video>""")
- skvideo.ioの動作
- HTML, b64encodeの働きの確認
modelのimportから結果確認
# modelのimport
env = gym.make('myoElbowPose1D6MRandom-v0')
print('List of cameras available', [env.sim.model.camera(i).name for i in range(env.sim.model.ncam)])
env.reset()
frames = []
for _ in range(100):
frame = env.sim.renderer.render_offscreen(
width=400,
height=400,
camera_id=0)
frames.append(frame)
env.step(env.action_space.sample()) # take a random action
env.close()
os.makedirs('videos', exist_ok=True)
# make a local copy
skvideo.io.vwrite('videos/temp.mp4', np.asarray(frames),outputdict={"-pix_fmt": "yuv420p"})
# show in the notebook
show_video('videos/temp.mp4')
-
env.reset()
の動きの確認 -
sim.renderer
の動きの確認
いくつか警告が出てくる
/usr/local/lib/python3.10/dist-packages/gymnasium/core.py:311: UserWarning: WARN: env.sim to get variables from other wrappers is deprecated and will be removed in v1.0, to get this variable you can do `env.unwrapped.sim` for environment variables or `env.get_wrapper_attr('sim')` that will search the reminding wrappers.
logger.warn(
/usr/local/lib/python3.10/dist-packages/gymnasium/utils/passive_env_checker.py:135: UserWarning: WARN: The obs returned by the `reset()` method was expecting numpy array dtype to be float32, actual type: float64
logger.warn(
/usr/local/lib/python3.10/dist-packages/gymnasium/utils/passive_env_checker.py:159: UserWarning: WARN: The obs returned by the `reset()` method is not within the observation space.
logger.warn(f"{pre} is not within the observation space.")
List of cameras available ['side_view', 'front_view']
/usr/local/lib/python3.10/dist-packages/gymnasium/utils/passive_env_checker.py:135: UserWarning: WARN: The obs returned by the `step()` method was expecting numpy array dtype to be float32, actual type: float64
logger.warn(
/usr/local/lib/python3.10/dist-packages/gymnasium/utils/passive_env_checker.py:159: UserWarning: WARN: The obs returned by the `step()` method is not within the observation space.
logger.warn(f"{pre} is not within the observation space.")
/usr/local/lib/python3.10/dist-packages/skvideo/io/ffmpeg.py:466: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.
self._proc.stdin.write(vid.tostring())
最終結果の表示
一番最後の姿勢の画像表示
!pip install matplotlib
import matplotlib.pyplot as plt
plt.imshow(frame)
参考資料