- 初期状態 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次元)
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脚が少し浮いた可能性:
(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.01 | roll=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 を更新する。
|