1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mujoco やってみた(2足歩行)

1
Last updated at Posted at 2026-05-15

はじめに

前回、Mujocoをインストールから、お試しプログラム(4足歩行、倒立振り子)まで体験しました。今回は、その続きで2足歩行をやってみました。

2足歩行

プログラムは前回とほぼ同じです。以下の2か所の InvertedPendulum-v5 を

train_env = gym.make("InvertedPendulum-v5")

eval_env = gym.make(
    "InvertedPendulum-v5",
    render_mode="human",
    width=1400,
    height=900
)

以下のように、Walker-2d-v5 に入れ替えただけです。

train_env = gym.make("Walker2d-v5")

eval_env = gym.make(
    "Walker2d-v5",
    render_mode="human",
    width=1400,
    height=900
)

あとは、歩行ロボットと一緒に視点(カメラ位置)が連動するようにしました。
まず、プログラムの最初の方で、mujoco を import しておきます。

import mujoco

そして、以下の部分を

obs, info = eval_env.reset()
eval_env.unwrapped.mujoco_renderer.viewer.cam.distance = 2.0
eval_env.unwrapped.mujoco_renderer.viewer.cam.elevation = -20

今回は以下で置き換えています。カメラ位置は特に、
viewer.cam.type = mujoco.mjtCamera.mjCAMERA_TRACKING
で有効にしています。

obs, info = eval_env.reset()
viewer = eval_env.unwrapped.mujoco_renderer.viewer
viewer.cam.type = mujoco.mjtCamera.mjCAMERA_TRACKING
viewer.cam.trackbodyid = 1
viewer.cam.distance = 4.0
viewer.cam.elevation = -10

念のため、全体リストを示します。二足歩行は学習量が多く必要なため、
model.learn(total_timesteps=500000)
のように 500000 と大きな値にしています。

ファイル名は train_5.py で保存して、実行しました。

import gymnasium as gym
from stable_baselines3 import PPO
import mujoco

# =========================
# 学習用環境(描画なし)
# =========================
train_env = gym.make("Walker2d-v5")

# =========================
# PPOモデル作成
# =========================
model = PPO(
    "MlpPolicy",
    train_env,
    verbose=1
)

# =========================
# 学習
# =========================
model.learn(total_timesteps=500000)

# =========================
# モデル保存
# =========================
model.save("ppo_Walker2d-v5")

# 学習環境終了
train_env.close()

# =========================
# 評価用環境(描画あり)
# =========================
eval_env = gym.make(
    "Walker2d-v5",
    render_mode="human",
    width=1400,
    height=900
)

obs, info = eval_env.reset()

viewer = eval_env.unwrapped.mujoco_renderer.viewer

viewer.cam.type = mujoco.mjtCamera.mjCAMERA_TRACKING

viewer.cam.trackbodyid = 1
viewer.cam.distance = 4.0
viewer.cam.elevation = -10



episode_reward = 0.0

# =========================
# 学習済みモデルで動作確認
# =========================
for step in range(1000):

    # 学習済みモデルが行動を決定
    action, _states = model.predict(
        obs,
        deterministic=True
    )

    # 1ステップ進める
    obs, reward, terminated, truncated, info = eval_env.step(action)

    # 報酬加算
    episode_reward += reward

    # 状態表示
    print(f"step = {step}")
    print("action =", action)
    print("reward =", reward)
    print("episode_reward =", episode_reward)
    print()

    # エピソード終了判定
    if terminated or truncated:

        print("Episode finished")
        print("Total episode reward =", episode_reward)
        print()

        obs, info = eval_env.reset()
        episode_reward = 0.0

eval_env.close()

total_timesteps=500000 としたおかげで、スキップするような動きができるようになりました。

おわりに

Mujoco サンプルプログラムとして「2足歩行」を試してみました。

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?