Skip to content

デプロイ設定(config.yaml)

ファイルパス: deploy/robots/go2/config/config.yaml

実機またはSim2Simでの実行時の有限状態機械(FSM: Finite State Machine)の設定ファイルです。学習済みポリシーを実機で動作させる際に、ロボットの状態遷移と各状態でのゲイン設定を管理します。

FSM(有限状態機械)とは

FSMは、ロボットの動作を複数の「状態」に分割し、状態間の遷移を管理する仕組みです。unitree_rl_labでは以下の状態が定義されています:

  1. Passive: 脱力状態(ダンピングのみ)
  2. FixStand: 固定立位姿勢への遷移
  3. Velocity: 学習済みポリシーによる速度制御

FSM状態定義

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
FSM:
  Passive:                              # パッシブモード(脱力状態)
    mode: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]    # 各関節のモード(1=damping)
    kd: [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]      # ダンピングゲイン

  FixStand:                             # 固定立位モード
    kp: [60, 80, 80, 60, 80, 80, 60, 80, 80, 60, 80, 80]  # 比例ゲイン(各関節)
    kd: [5, 4, 4, 5, 4, 4, 5, 4, 4, 5, 4, 4]              # 微分ゲイン(各関節)
    ts: [0, 1, 2]                                          # タイムステップ
    qs: [                                                  # 各タイムステップでの目標関節角度
      [],                                                  # t=0: 現在の姿勢
      [0.0, 1.36, -2.65, 0.0, 1.36, -2.65, 0.0, 1.36, -2.65, 0.0, 1.36, -2.65],  # t=1
      [0., 0.8, -1.5, 0., 0.8, -1.5, 0., 0.8, -1.5, 0., 0.8, -1.5]               # t=2
    ]

  Velocity:                             # 速度制御モード(学習済みポリシー使用)
    policy_dir: ../../../logs/rsl_rl/unitree_go2_velocity  # ポリシーファイルのディレクトリ

各状態の詳細

Passive状態

ロボットを脱力状態にします。起動時やエラー発生時に安全に停止するための状態です。

パラメータ

1
2
mode: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
kd: [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]

説明:

  • mode: 各関節の制御モード
  • 0: トルク制御
  • 1: ダンピング制御
  • 10: 位置制御
  • kd: ダンピングゲイン [N·m·s/rad]
  • 推奨値: 1-5
  • 大きいほど減衰が強く、素早く静止する
  • 小さいほど自由に動く

関節の順序(Go2の場合)

1
2
3
4
[FR_hip, FR_thigh, FR_calf,   # 右前脚
 FL_hip, FL_thigh, FL_calf,   # 左前脚
 RR_hip, RR_thigh, RR_calf,   # 右後脚
 RL_hip, RL_thigh, RL_calf]   # 左後脚

FixStand状態

ロボットを立位姿勢に遷移させます。Passive状態から起き上がり、安定した姿勢を取るために使用します。

パラメータ

1
2
3
4
5
6
7
8
kp: [60, 80, 80, 60, 80, 80, 60, 80, 80, 60, 80, 80]
kd: [5, 4, 4, 5, 4, 4, 5, 4, 4, 5, 4, 4]
ts: [0, 1, 2]
qs: [
  [],
  [0.0, 1.36, -2.65, 0.0, 1.36, -2.65, 0.0, 1.36, -2.65, 0.0, 1.36, -2.65],
  [0., 0.8, -1.5, 0., 0.8, -1.5, 0., 0.8, -1.5, 0., 0.8, -1.5]
]

説明:

  • kp: 比例ゲイン [N·m/rad]
  • 大きいほど強く目標角度に追従
  • hip関節: 60(横方向の回転、比較的低めのゲイン)
  • thigh関節: 80(太ももの関節、高めのゲイン)
  • calf関節: 80(すねの関節、高めのゲイン)

  • kd: 微分ゲイン [N·m·s/rad]

  • 大きいほど振動を抑制
  • hip関節: 5
  • thigh/calf関節: 4

  • ts: タイムステップ [s]

  • 軌道の時間点を定義
  • [0, 1, 2]: 0秒、1秒、2秒の3点

  • qs: 各タイムステップでの目標関節角度 [rad]

  • t=0: [] = 現在の姿勢を維持
  • t=1: [0.0, 1.36, -2.65, ...] = 中間姿勢(脚を畳んだ状態)
  • t=2: [0., 0.8, -1.5, ...] = 最終姿勢(立位)

軌道の例(右前脚)

1
2
3
4
5
6
7
8
9
# t=0: 現在の姿勢
# t=1: [0.0, 1.36, -2.65]  # 脚を畳む
#      ├─ hip: 0.0 rad (0度)
#      ├─ thigh: 1.36 rad (約78度)
#      └─ calf: -2.65 rad (約-152度)
# t=2: [0.0, 0.8, -1.5]    # 立位
#      ├─ hip: 0.0 rad (0度)
#      ├─ thigh: 0.8 rad (約46度)
#      └─ calf: -1.5 rad (約-86度)

ゲイン調整のポイント

kpが大きすぎる場合: - 振動が発生する - 関節が過熱する - 軌道追従が不安定になる

kpが小さすぎる場合: - 目標角度に到達しない - 応答が遅い - 重力に負けて姿勢が崩れる

kdが大きすぎる場合: - 動きが鈍くなる - エネルギー効率が悪い

kdが小さすぎる場合: - 振動が発生しやすい - オーバーシュートが大きい

推奨調整手順

  1. まずkpを小さめの値(30-40)から開始
  2. 振動が発生しなければ徐々にkpを増やす
  3. 振動が発生したらkdを増やして減衰を強化
  4. 関節ごとに負荷が異なるため、個別に調整

Velocity状態

学習済みポリシーを使用して速度制御を行います。

パラメータ

1
policy_dir: ../../../logs/rsl_rl/unitree_go2_velocity

説明:

  • policy_dir: 学習済みモデル(model_*.pt)が格納されているディレクトリへのパス
  • デプロイコントローラから見た相対パスで指定
  • 最新のチェックポイントが自動的にロードされる

ポリシーファイルの配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
deploy/robots/go2/
├─ config/
│  └─ config.yaml
└─ build/
   └─ main              # 実行ファイル

logs/rsl_rl/unitree_go2_velocity/
├─ model_1000.pt
├─ model_2000.pt
├─ ...
└─ model_50000.pt       # 最新のモデル

状態遷移

一般的な状態遷移の流れ:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[起動]
  ↓
Passive(安全確認)
  ↓
FixStand(立ち上がり)
  ↓
Velocity(学習済みポリシーによる歩行)
  ↓
FixStand(停止前の姿勢安定化)
  ↓
Passive(停止)

ロボットごとの設定例

Go2(四足歩行ロボット)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
FSM:
  Passive:
    mode: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
    kd: [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]

  FixStand:
    kp: [60, 80, 80, 60, 80, 80, 60, 80, 80, 60, 80, 80]
    kd: [5, 4, 4, 5, 4, 4, 5, 4, 4, 5, 4, 4]
    ts: [0, 1, 2]
    qs: [
      [],
      [0.0, 1.36, -2.65, 0.0, 1.36, -2.65, 0.0, 1.36, -2.65, 0.0, 1.36, -2.65],
      [0., 0.8, -1.5, 0., 0.8, -1.5, 0., 0.8, -1.5, 0., 0.8, -1.5]
    ]

  Velocity:
    policy_dir: ../../../logs/rsl_rl/unitree_go2_velocity

H1(二足歩行ロボット)

二足歩行ロボットは関節数が多く、バランス制御が重要です。

1
2
# H1の場合は関節数に応じて配列のサイズを調整
# 腰、脚、腕など、すべての関節に対してゲインを設定

実機展開時の注意事項

安全確認

  1. 初回起動時:
  2. 必ずPassive状態から開始
  3. ロボットが予期しない動きをした場合、すぐに緊急停止できるように準備

  4. ゲイン調整:

  5. シミュレーションと実機ではゲインが異なる場合がある
  6. 実機では小さめのゲインから開始し、徐々に上げる

  7. 軌道確認:

  8. FixStandの軌道が実機で実行可能か事前に確認
  9. 関節角度制限を超えていないか確認

デバッグ

学習済みポリシーがうまく動作しない場合:

  1. ドメインギャップの確認:
  2. シミュレーションと実機の物理パラメータの違い
  3. 地面の摩擦係数の違い
  4. モーターの応答性の違い

  5. ゲイン調整:

  6. 実機のモーターのトルク特性に合わせてゲインを調整
  7. オーバーシュートや振動が発生する場合はkdを増やす

  8. 観測値のスケール:

  9. IMUのノイズレベルが学習時と異なる場合がある
  10. センサーのキャリブレーションを確認

カスタマイズ例

より安定した立ち上がりのために

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
FixStand:
  kp: [50, 70, 70, 50, 70, 70, 50, 70, 70, 50, 70, 70]  # ゲインを少し下げる
  kd: [6, 5, 5, 6, 5, 5, 6, 5, 5, 6, 5, 5]              # ダンピングを増やす
  ts: [0, 1, 2, 3]                                       # 時間を延長
  qs: [
    [],
    [0.0, 0.7, -1.3, ...],  # より緩やかな中間姿勢1
    [0.0, 1.0, -2.0, ...],  # より緩やかな中間姿勢2
    [0.0, 0.8, -1.5, ...]   # 最終姿勢
  ]

異なる立位姿勢

1
2
3
4
5
qs: [
  [],
  [0.0, 1.2, -2.4, 0.0, 1.2, -2.4, 0.0, 1.2, -2.4, 0.0, 1.2, -2.4],
  [0.0, 0.6, -1.2, 0.0, 0.6, -1.2, 0.0, 0.6, -1.2, 0.0, 0.6, -1.2]  # より低い姿勢
]

トラブルシューティング

ロボットが立ち上がれない

  • kpが小さすぎる可能性 → 増やす(60 → 80)
  • 軌道の時間が短すぎる → tsを延長
  • 中間姿勢が不適切 → qsを調整

立ち上がり時に振動する

  • kpが大きすぎる可能性 → 減らす(80 → 60)
  • kdが小さすぎる可能性 → 増やす(4 → 6)

ポリシーが読み込めない

  • policy_dirのパスが正しいか確認
  • モデルファイル(model_*.pt)が存在するか確認
  • ファイルのパーミッションを確認