前回の記事の歩行シミュレーションで Unitree G1 の安定した後ろ向き歩行を実現できました。
シミュレーション中 learning iteration ごとに以下の表示がされていましたが、これらが何を意味するのか紐解いていきます。
各評価指標の意味
################################################################################
Learning iteration 1499/1500
Computation: 38055 steps/s (collection: 1.244s, learning 0.047s)
Mean action noise std: 0.78
Mean value_function loss: 0.0053
Mean surrogate loss: -0.0052
Mean entropy loss: 27.8460
Mean reward: 21.60
Mean episode length: 986.38
Episode_Reward/track_lin_vel_xy_exp: 0.9094
Episode_Reward/track_ang_vel_z_exp: 0.6373
Episode_Reward/lin_vel_z_l2: -0.0069
Episode_Reward/ang_vel_xy_l2: -0.0151
Episode_Reward/dof_torques_l2: -0.0086
Episode_Reward/dof_acc_l2: -0.0156
Episode_Reward/action_rate_l2: -0.2520
Episode_Reward/feet_air_time: 0.0499
Episode_Reward/flat_orientation_l2: -0.0049
Episode_Reward/dof_pos_limits: -0.0052
Episode_Reward/termination_penalty: -0.0042
Episode_Reward/feet_slide: -0.0147
Episode_Reward/joint_deviation_hip: -0.0222
Episode_Reward/joint_deviation_arms: -0.0722
Episode_Reward/joint_deviation_fingers: -0.0557
Episode_Reward/joint_deviation_torso: -0.0303
Metrics/base_velocity/error_vel_xy: 0.2570
Metrics/base_velocity/error_vel_yaw: 0.6734
Episode_Termination/time_out: 0.9810
Episode_Termination/base_contact: 0.0190
--------------------------------------------------------------------------------
Total timesteps: 73728000
Iteration time: 1.29s
Time elapsed: 00:32:23
ETA: 00:00:01
| Reward term | 意味 | 詳細 | 目標 |
|---|---|---|---|
track_lin_vel_xy_exp | vx, vy の速度指令に実速度が追従できているか | exp(-((vx_cmd - vx)² + (vy_cmd - vy)²) / std²)。exp は指数関数。誤差が小さいほど 1 に近づく。G1 Flat では std = 0.5 | 高い |
track_ang_vel_z_exp | wz の旋回速度指令に実際の yaw rate が追従できているか | exp(-(wz_cmd - wz)² / std²)。wz の単位は rad/s。誤差が小さいほど 1 に近づく。G1 Flat では std = 0.5 | 高い |
lin_vel_z_l2 | 上下方向 z に揺れる・跳ねる動きを罰する | vz²。上下方向の速度が大きいほど penalty が大きくなる | 0 に近い |
ang_vel_xy_l2 | roll / pitch 方向に激しく回転することを罰する | wx² + wy²。roll / pitch 方向の角速度が大きいほど penalty が大きくなる | 0 に近い |
dof_torques_l2 | 大きな関節 torque を使うことを罰する | Σ τj²。対象 joint の torque の二乗和。必要以上に力の大きい動作を抑える。G1 Flat では主に hip / knee joint が対象 | 0 に近い |
dof_acc_l2 | 急激な関節運動を罰する | Σ q̈j²。実際の関節 acceleration の二乗和。関節を急激に加速させる動作を抑える | 0 に近い |
action_rate_l2 | 前 step から action が急変することを罰する | Σ(action_t - action_(t-1))²。joint position command の急激な変化を抑え、滑らかな動作を促す | 0 に近い |
feet_air_time | 二足歩行らしく片足支持・遊脚時間を確保できていることを褒める | 片足支持時の接地時間 / 遊脚時間を利用して reward を計算する。G1 Flat では最大 0.4 s まで評価される。ほぼ停止 command の場合は reward を与えない | 高い |
flat_orientation_l2 | robot が roll / pitch 方向に傾くことを罰する | g_x² + g_y²。robot 座標系で見た重力ベクトル g の x, y 成分の二乗和。robot が水平なら重力はほぼ z 軸方向になるため g_x ≈ g_y ≈ 0 | 0 に近い |
dof_pos_limits | 関節角が soft limit(学習・制御用の limit)を超えることを罰する | Σ max(q_min - q, 0) + max(q - q_max, 0)。soft joint limit 内なら 0。G1 では ankle pitch / roll が対象 | 0 |
termination_penalty | 転倒などによる episode の異常終了を強く罰する | I(terminated)。異常終了時は 1、通常時は 0。G1 では weight -200 が掛かる。通常の time out は対象外 | 0 |
feet_slide | 接地中の足が床の上を滑ることを罰する | Σ ||v_foot,xy|| × I(contact)。接地している foot の x-y 方向速度が大きいほど penalty が大きくなる | 0 に近い |
joint_deviation_hip | hip yaw / roll が default 姿勢から大きく外れることを罰する | Σ |qj - qj_default|。hip yaw / roll の default joint position からのずれを評価する | 0 に近い |
joint_deviation_arms | 腕関節が default 姿勢から大きく外れることを罰する | Σ |qj - qj_default|。shoulder / elbow の default joint position からのずれを評価する | 0 に近い |
joint_deviation_fingers | 指関節が default 姿勢から動きすぎることを罰する | Σ |qj - qj_default|。歩行に不要な finger joint の動きを抑える | 0 に近い |
joint_deviation_torso | torso joint が default 姿勢から大きく外れることを罰する | |q_torso - q_torso_default|。torso の不要な回転を抑える | 0 に近い |
指標は主に以下の 3 つに分別できます。
- 指令追従
- 安全・安定性(転倒しない)
- 動作品質(動きのなめらかさ)
torso や hip がどこを指しているのか曖昧だったので、図示しました。

報酬の収束
以下のように 1500 iteration 目だと、いくつかの reward は改善中でした。特に、角速度指令への追従性(track_ang_vel_z_exp)は、後方に歩くとき直進しない事象と関連していそうなので改善したいですね。


















まとめ
今回の記事では、Unitree G1 の強化学習シミュレーションで使われている報酬関数の指標についてまとめました。報酬の種類がたくさんあり、1500 iteration の学習ではまだ学習しきれていないものもありそうです。weight を変えてみて、歩行がどう変化するかを調べてみても面白そうです。

コメント