モーショントラッキング設定(tracking_env_cfg.py)
ファイルパス: source/unitree_rl_lab/unitree_rl_lab/tasks/mimic/robots/g1_29dof/*/tracking_env_cfg.py
モーションキャプチャデータを追従するタスクの設定です。BVH形式のモーションデータをnpz形式に変換したファイルを読み込み、ロボットに再現させることができます。
モーションコマンド設定 (MotionCommandCfg)
トラッキングするモーションデータと、ランダム化の範囲を設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | |
パラメータの詳細
motion_file
npz形式のモーションデータファイルのパスです。
- BVHファイルは
scripts/mimic/csv_to_npz.pyを使ってnpz形式に変換する必要があります - ファイルには以下の情報が含まれます:
- 各ボディの位置・姿勢の時系列データ
- 各関節の角度の時系列データ
- 線速度・角速度の時系列データ
anchor_body_name
モーションのアンカー(基準)となるボディ名です。
- 通常は胴体(
"torso_link")を指定 - このボディの位置・姿勢がモーションデータと一致するように学習
resampling_time_range
モーションをリサンプリングする時間範囲です。
- デフォルトでは
(1.0e9, 1.0e9)(実質無限大)に設定し、モーション全体を1エピソードで実行 - 短く設定すると、モーションの一部をランダムに切り出して学習
debug_vis
デバッグ用の可視化を有効にするかどうかです。
True: モーションの目標位置が球体として表示されるFalse: 可視化なし(学習時は無効化推奨)
pose_range
リセット時に初期姿勢に加えるランダムなオフセットの範囲です。
- ロバスト性を向上させるためのドメインランダマイゼーション
- 値が大きすぎると、初期姿勢が不自然になり学習が困難になる
velocity_range
リセット時に初期速度に加えるランダムなオフセットの範囲です。
- 動的なモーション(ダンスなど)では適度なランダム化が有効
- 静的なモーションでは小さく設定
joint_position_range
リセット時に各関節位置に加えるランダムなオフセットの範囲 [rad] です。
- 推奨値: -0.1 ~ 0.1 [rad]
- 大きすぎると不自然な姿勢から開始する可能性
body_names
トラッキングの対象とするボディのリストです。
- リストに含まれるボディの位置・姿勢がモーションデータと一致するように報酬が与えられる
- 重要なボディ(足首、手首など)を優先的に追加
モーショントラッキング報酬 (RewardsCfg)
モーションを正確に再現するための報酬関数です。
アンカーボディの追従報酬
1 2 3 4 5 6 7 8 9 10 11 | |
説明:
- アンカーボディのグローバル位置・姿勢をモーションデータに一致させる
stdパラメータ: 小さいほど厳密な一致を要求
ボディの相対位置・姿勢の追従報酬
1 2 3 4 5 6 7 8 9 10 11 | |
説明:
- アンカーボディに対する相対的な位置・姿勢を一致させる
- 手足の位置関係を正確に再現するために重要
ボディの速度追従報酬
1 2 3 4 5 6 7 8 9 10 11 | |
説明:
- ボディの線速度・角速度をモーションデータに一致させる
- 動的なモーションでは重要度が高い
正則化項目
1 2 3 4 5 6 7 8 | |
望ましくない接触のペナルティ
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
説明:
- 正規表現で、足首と手首以外のボディの接触をペナルティ
- ダンスなどでは手をつくこともあるため、重みを小さく設定
モーショントラッキング終了条件 (TerminationsCfg)
トラッキングが失敗した場合の終了条件を設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | |
パラメータの詳細
anchor_pos
アンカーボディの高さがモーションデータから一定以上離れたらエピソードを終了します。
threshold: 許容誤差 [m](デフォルト: 0.25m)
anchor_ori
アンカーボディの姿勢が一定以上傾いたらエピソードを終了します。
threshold: 許容角度 [rad](デフォルト: 0.8 rad ≈ 45度)
ee_body_pos
エンドエフェクタ(手首・足首)の高さがモーションデータから大きく離れたら終了します。
- 重要なボディの位置を厳密にチェック
イベント設定 (EventCfg)
ドメインランダマイゼーションを設定します。
起動時のランダム化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | |
定期的な外乱
1 2 3 4 5 6 | |
全体設定
1 2 3 | |
モーションデータの準備
BVHファイルからnpzへの変換
1 2 3 4 | |
モーションデータの再生・確認
1 2 3 | |
パラメータ調整のコツ
トラッキング精度を上げるには
- 報酬の
weightを調整して、位置・姿勢・速度のバランスを取る stdパラメータを小さくして、より厳密な一致を要求body_namesに重要なボディを追加
学習を安定化させるには
- 初期のランダム化範囲(
pose_range、velocity_range)を小さくする - 終了条件の
thresholdを緩くする - ドメインランダマイゼーションを弱める
動的なモーションを再現するには
- 速度追従報酬(
motion_body_lin_vel、motion_body_ang_vel)の重みを大きくする episode_length_sを長くして、モーション全体を学習- アクション変化率ペナルティを適度に設定