Up (s₀, a₀, r₀, s₁) の実際 作成: 2026-05-21
更新: 2026-05-21


  • 初期状態 s₀ (reset 直後)
    ① 姿勢(IMU:9次元)
      roll = 0.01 rad
      pitch = -0.02 rad
      yaw = 0.00 rad

      gyro_x = 0.00
      gyro_y = 0.00
      gyro_z = 0.00

      acc_x = 0.00
      acc_y = 0.00
      acc_z = -9.81 ← 重力

    ② 関節角度(12次元)
     四足ロボットの標準姿勢
       ヒップ, 膝, 足首
       単位 rad
      [ 0.00, -0.52, 1.05, ← 前脚 左
      0.00, -0.52, 1.05, ← 前脚 右
      0.00, -0.52, 1.05, ← 後脚 左
      0.00, -0.52, 1.05 ] ← 後脚 右
       ※ -0.52 rad ≒ -30°
       ※ 1.05 rad ≒ 60°

    ③ 関節角速度(12次元)
     reset 直後はほぼ 0。
      [ 0, 0, 0,
      0, 0, 0,
      0, 0, 0,
      0, 0, 0 ]

    🟨 ④ 足先の接地状態(4次元)
      [1, 1, 1, 1]
     4 脚とも地面に接地。

    ⑤ ロボットの位置・速度(6次元)
      pos_x = 0.00
      pos_y = 0.00
      pos_z = 0.32 ← 立位の高さ

      vel_x = 0.00
      vel_y = 0.00
      vel_z = 0.00

    ⑥ 目標速度(3次元)
     reset 直後は通常 0。
      cmd_vx = 0.0
      cmd_vy = 0.0
      cmd_wz = 0.0

    すべてをまとめると(48次元の s₀)
      s₀ = [
      0.01, -0.02, 0.00, ← 姿勢(roll, pitch, yaw)
      0.00, 0.00, 0.00, ← 角速度
      0.00, 0.00, -9.81, ← 加速度

      0.00, -0.52, 1.05, ← 関節角度(前左)
      0.00, -0.52, 1.05, ← 前右
      0.00, -0.52, 1.05, ← 後左
      0.00, -0.52, 1.05, ← 後右

      0,0,0, 0,0,0, 0,0,0, 0,0,0, ← 関節角速度(12)

      1,1,1,1, ← 足の接地状態

      0.00, 0.00, 0.32, ← 位置
      0.00, 0.00, 0.00, ← 速度

      0.0, 0.0, 0.0 ← 目標速度
      ]



  • s₀ から Policy が出力する a₀
    出力は,12 次元の関節トルク (四足 × 3 関節)。
    通常 tanh で -1〜1 に正規化されたものが,a₀ になる。,
    初期の Policy はランダムなので 小さなランダム値 が出る。
      a₀ = [
      0.12, -0.05, 0.08, ← 前脚 左
      -0.03, 0.10, -0.07, ← 前脚 右
      0.04, -0.02, 0.06, ← 後脚 左
      -0.09, 0.03, -0.11 ← 後脚 右
      ]

    これに最大トルク τ_max を掛けて,実際の関節トルクに変換する。
    τ_max を仮に
      τ_max = 20 Nm
    とすると,
      実トルク τ₀ = a₀ × 20 :Nm
      τ₀ = [
      2.4, -1.0, 1.6,
      -0.6, 2.0, -1.4,
      0.8, -0.4, 1.2,
      -1.8, 0.6, -2.2
      ] Nm



  • a₀ の結果の s₁
    物理シミュレータ(Isaac Gym / MuJoCo / Bullet)は, a₀ (回転トルク) を受けて 1/60 秒(dt=0.016s)の状態 s₁を計算する。

    (1) 姿勢(IMU)
      roll = 0.012 (少し傾いた)
      pitch = -0.018 (少し戻った)
      yaw = 0.000

      gyro_x = 0.10 (角速度が発生)
      gyro_y = -0.05
      gyro_z = 0.00

      acc_x = 0.20
      acc_y = -0.10
      acc_z = -9.70 (重力+微小加速度)

    (2) 関節角度(12次元)
     トルクにより,ほんの少し動く。
      [ 0.00, -0.515, 1.048,
      0.00, -0.518, 1.052,
      0.00, -0.521, 1.047,
      0.00, -0.519, 1.053 ]

    (3) 関節角速度(12次元)
      [ 0.02, -0.10, 0.15,
      -0.03, 0.12, -0.08,
      0.05, -0.06, 0.10,
      -0.07, 0.04, -0.12 ]

    (4) 足先の接地状態(4次元)
     1脚が少し浮いた可能性:
      [1, 1, 1, 0]

    (5) ロボットの位置・速度(6次元)
      pos_x = 0.0003
      pos_y = -0.0001
      pos_z = 0.319

      vel_x = 0.02
      vel_y = -0.01
      vel_z = -0.05

    (6) 目標速度(3次元)
     変化なし:
      cmd_vx = 0.0
      cmd_vy = 0.0
      cmd_wz = 0.0


    s₀ → a₀ → s₁ の変化
    項目 s₀ s₁ 変化
    姿勢roll=0.01roll=0.012少し傾く
    関節角度-0.520-0.515わずかに伸びる
    関節角速度0±0.1動き始める
    足接地[1,1,1,1][1,1,1,0]1脚が浮く
    位置(0,0,0.32) (0.0003, −0.0001, 0.319) 微小移動
    速度0小さな速度動き始める



  • 報酬 r₀
    以下,典型的な報酬関数 ( Isaac Gym / MuJoCo で実際に使用) と,これによる計算を示す。

    (1) 前進速度の報酬(メイン)
     ロボットが前に進むほど報酬が高い。
      r_forward = w_f⋅vx
     例:ほとんど前に進めなかった:
       目標速度 0.5 m/s に対し
       実際の速度 vₓ = 0.02 m/s(初期は遅い)
       w_f = 1.0
      r_forward = 1.0 × 0.02 = 0.02

    (2) 姿勢の安定性(ロール・ピッチのペナルティ)
     ロボットが傾くとペナルティ。
      r_upright = − w_u ( | roll | + | pitch| )
     例:少し傾いた
       roll = 0.012
       pitch = -0.018
       w_u = 2.0
      r_upright = − 2.0 × (0.012 + 0.018) = − 0.06

    (3) エネルギー消費(トルクのペナルティ)
     関節トルクの二乗に比例。
      r_energy = − w_e ∑_i τ_i^2
     例:無駄なトルクを使った
       τ_i の平均が 1.5 Nm
       w_e = 0.001
      r_energy = − 0.001 × (1.5² × 12) = − 0.027

    (4) 足の滑りペナルティ
     接地している足が横に滑るとペナルティ。
     例:1脚が少し滑った → − 0.01

    (5) 転倒ペナルティ(今回は転倒していない)
     転倒したら −10 など大きなペナルティ。
     今回は転倒していないので 0。

    まとめると:
      前進速度報酬  : +0.02
      姿勢安定性   : −0.06
      エネルギー消費 : −0.027
      足の滑り    : −0.01
      転倒ペナルティ : 0

    合計:
      r₀ = 0.02 − 0.06 − 0.027 − 0.01 = − 0.077
    結果として 負の報酬 を受け取る
    (訓練初期では,これはまったく正常)


  • PPO による Policy の更新
    上に示した (s₀, a₀, r₀, s₁) の導出を,数千〜数万ステップ集める。
    これを PPO の処理にかけて,Policy を更新する。