Lee et al 2020 "Learning Quadrupedal Locomotion over Challenging Terrain"から紐解く四足ロボット強化学習の「秘伝のタレ」

# はじめに
はじめまして！2023年末までOMRON SINIC X（OSX）で機械学習によるロボット制御の研究インターンをしていた[渕岡湧仁(フチオカユニ)](https://yunifuchioka.github.io/)と申します！松尾研では[第一回TRAILロボナイト](https://trail.t.u-tokyo.ac.jp/ja/blog/23-08-11-robonight-1st/)発表者としてご講演させていただき、それ以来OSXとオフィスがとても近いこともあって頻繁に松尾研ロボット部門のTRAILにお邪魔させていただきました！今回はそのお礼として[基盤モデル×Robotics Advent Calendar 2023](https://qiita.com/advent-calendar/2023/robot-ai)の21日目の記事として投稿します！

修士では[四足ロボットの強化学習](https://youtu.be/bW9dUpMXiO4?si=k_I_BzA2mbwUe429)について研究をしていたので、本記事では2020年Science Roboticsに搭載された、ETH Zürich Robotic Systems LabとIntelの研究者らの["Learning Quadrupedal Locomotion over Challenging Terrain"](https://leggedrobotics.github.io/rl-blindloco/)という論文について紹介します。著者はJoonho Lee, Jemin Hwangbo, Lorenz Wellhausen, Vladlen Koltun, とMarco Hutterになります。

最近のハイペースに進んでいるロボットラーニング分野の基準だと2020年発表の論文は古いとみなされるかもしれませんが、この論文は今現在も四足ロボット強化学習の基礎であり、四足ロボットのみならずロボット学習の分野全般に多大な影響を及ぼした、今でも理解する価値がある論文だと個人的に感じています。当時は最適化を利用したモデルベース（すなわち機械学習を使わない）制御が歩行ロボットでは主流でしたが、本論文は強化学習を使って当時のモバイルロボットが移動できる地形の範囲を大幅に広げ、分野において新しい基準を作った研究だと思っています。本論文が発表された当時とある先輩が「四足ロボット研究が終わってしまった、、、」とぼやいていたのが個人的に印象深かったです。（もちろんこの論文の後も四足ロボット分野はたくさん発展して、今でも課題はたくさん残っているのでご心配なく！）

今現在も様々な歩行制御の基礎となってる本研究について、詳しく理解していきましょう！基本的には論文紹介をしますが、強化学習はとても扱いづらいという評判があるので、僕個人が自分の研究を通して蓄積した四足ロボット強化学習の知見も織り交ぜて紹介します！

# 全体図
## 動画
まずは動画で、実際に動いているところを見てみましょう！

<iframe width="560" height="315" src="https://www.youtube.com/embed/9j2a1oAHDL8?si=2QNVVS3FltVFRPwm" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" loading="lazy" allowfullscreen></iframe>

## 問題設定や特徴
一言で言うと、四足ロボットが野外の多様で難しい地形を歩けるように、シミューレーション環境だけで強化学習によるコントローラーの取得を目的にする研究です。

![sim-to-real.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622501/e9e2fd0d-c3a9-4e5d-01c1-6d9d4134ace2.png)

さらに詳しく論文の特徴をまとめると下記のようになります。
- Blind: すなわちカメラやLiDARなどの視覚情報を全く使っていない。人間が目をつむっても力覚や三半規管を使ってある程度は歩けるように、ロボットは接触を通して地面を「感じて」歩いています。
- Sim-to-real: 実機ロボットから得たデータは使わず、シミューレーションだけで学習した動きを実環境で何もfinetuningせずにそのまま実装しています(zero-shot)。
- 実際の野外環境だと草に足が引っかかったり水による抵抗など様々なシミューレーションするのが難しい影響があるはずのに、環境の複雑なモデリングやたくさんの実機データを使わずとも、シミューレーション内で3種類の地形を歩けるように学習するだけにこれらの環境に対応できるような学習に成功しています（下記の図を参照）。
- ANYmal-BとANYmal-Cの２つの世代の四足ロボットに実装できています。
- 本研究をベースに[二年後に発表された視覚情報も取り入れたコントローラー](https://leggedrobotics.github.io/rl-perceptiveloco/)は、DARPA Subterranean Challengeという国際ロボコンで優勝し、2024年1月現在では最も多様な地形を歩けるロボットコントローラーだと思います。

![sim-vs-real-environments.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622501/f9ef41d7-32ab-e92b-1e95-1958cddfa641.png)

次に、これらの結果をどう出せたのか手法について詳しく見てみましょう！

# 手法
手法の全体図は下記の通りです。少し情報量が多いので、一つずつ詳しく見ていきましょう。
![system-diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622501/bc071b81-1c30-d5b7-7e57-16708cd07e02.png)

## A. 「ずる」して学習

おそらく本論文の一番の特徴であり、後の研究でも一番引用されているポイントがstudent-teacher ["Learning by Cheating"](https://arxiv.org/abs/1912.12294)だと思います。この手法では二段会で、まず「先生」を学習させてから(Step 1)、その行動を真似るように「生徒」を学習させる(Step 2)のが基本的な構造です。

![system-diagram-part-a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622501/a5cbbd96-c792-f593-7b1d-9691f4c5cd79.png)

まず、先生は本物のセンサーからは得られないシミュレーターから直接「ずる」して得た情報(privileged information)をもとに強化学習で行動を学習します。次に、生徒は先生の行動を真似るように模倣学習で学習します。ただ、先生とは違って本物のセンサーから得られるデータの歴史(proprioceptive history)をインプットとして使います。生徒ポリシーは実際のロボットに搭載されているセンサーの情報だけで制御しているので、そのまま本物のロボットに移転させられます！

さらに詳しく説明すると、下記のポイントが述べられます。
- 「ずる」して得た情報はシミュレーション上でしか得られないので、sim-to-realの性質を上手く利用している手法だと言えるでしょう。
- そもそもこの手法が上手くいく前提として、先生がシミュレーターから得る「ずる」情報(足の接触状態、摩擦パラメーターなど)は、センサー情報の歴史から推定できるという仮定があります。例えば、長らく足を動かそうとしているのに動いてくれない状態だと「なんか引っかかってるかな？」とロボットが予測してくれるイメージです。
- 図で見れるように、環境の状態を潜在空間に落とし込むEncoderと、その潜在的環境情報$l_t$とロボットからのセンサー情報$o_t$から行動$a_t$を作成するMulti-Layer Perceptron (MLP, すなわちポリシー)によってネットワークが分かれています。本論文だと潜在環境情報$l_t$とポリシーが作成した行動$a_t$の両方を生徒が先生を真似るように学習しますが、[後に出た関連論文](https://ashish-kmr.github.io/rma-legged-robots/)ではポリシーは再学習せずに環境情報だけを真似たり、可能な実装方法は様々なようです。
- 現代制御理論的な考えで言うと、先生学習の段階では状態推定問題を一旦無視して制御の学習だけをして、一方で生徒学習ではただ先生を真似る行動だけをして状態推定を学んでいる、という解釈の仕方ができると思います。
    - （さらに言うと状態推定問題と最適化制御問題を同時に解ける事が古典的な制御法と比較して強化学習の一番の強みな気がしますが、これは未だ模索中の個人的な仮説です。）
- 生徒エンコーダーは[Temporal Convolutional Network (TCN)](https://github.com/locuslab/TCN)という時系列データに相性がいいアーキテクチャを利用しています。Gated Recurrent Network(GRU)との比較も論文に記載しています。

## B. 地形のカリキュラム
先程述べたように、たくさんの地形を歩かせられるように三種類の地形(Hills, Steps, Stairs)をシミューレーション上で作成している訳ですが、効果的に難しい地形に対応できるよう学習させるために「カリキュラム学習」を利用しています。いきなり難しすぎる問題を強化学習に解かせようとするとなかなか上手い具合に学習してくれないので、学習の進歩具合に応じて簡単すぎず難しすぎないちょうどいい地形を用意するのがポイントです。

![system-diagram-part-b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622501/86716389-36fa-ff79-d48b-27009d6716fe.png)

学習時に「簡単すぎず難しすぎないちょうどいい地形」をどう用意するのか、という問題ですが、まずは「地形の難しさ」をTraversability（日本語訳すると「横断しやすさ」?）で数値化します。具体的には、「目標の方向に秒速0.2メートル以上で進める確率」を指定されたポリシーにおける地形のTravserabilityと定義します。次に、地形を2つか3つのパラメーター(階段の高さ、広さ、など)から自動作成できるProcedural Generationのパイプラインを用意します。パラメーター数値が似た地形は難しさも似ているという仮定のもと、Traversabilityが0.5から0.9の地形をSequential Importance Sampling Particle Filterで作成します。その地形で強化学習を進め、ポリシーがその地形を歩けるようになった段階で、より難易度の高い地形を再作成していきます。
![terrain-traversability.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622501/e597c209-d979-497f-00a1-838484b1ef32.png)

少し具体的なコメントですが、「地形の難しさ」の数値化方法として直接強化学習に利用する報酬や、value functionを予測するcritic networkの値も使えますが（[実際に使った研究もあります](https://www.cs.ubc.ca/~van/papers/2020-allsteps/index.html)）、本研究で利用されている報酬関数は様々な項が入り組んでおり複雑なため、こちらの定義法の方が直感的とのことです。

## C. 歩行ロボットの知見を取り入れた低レイヤー制御
### Action
最終的にモータードライバーに入力するコマンドは一般的には高周波数のトルクか位置コマンドですが、強化学習ポリシーにどういう情報を出力させてこれらのコマンドを作成するのかは強化学習ロボティクスでとても重要な判定要素だと思います。

一番単純かつナイーブな方法はポリシーに直接モーターのトルクを出力させることですが、この方法は[学習が非効率的](https://www.cs.ubc.ca/~van/papers/2017-SCA-action/index.html)なのに加えて、一般的な強化学習ポリシー周波数は30~100Hzとトルク制御には遅すぎる、シミューレーションと実機モーターのトルク出力性質の類似性にとても依存している、そもそもロボットのタスクにおいて力やトルクは位置と比べて抽象的すぎる、などの理由でsim-to-real歩行ロボット強化学習ではこの方法は一般的には使われていません。

代わりに、頻繁に使われている方法ではモーターごとに関節角度のPD制御器を用意し、目標の角度の値をポリシーに出力させます。角度のPD制御とは言いつつも、[PDゲインが低いので](https://www.science.org/doi/10.1126/scirobotics.aau5872)目標の角度には到達せず、環境と柔らかく接触し大体の目標位置に足を動かすイメージです。もう一つの解釈として、「PD制御をわざわざ強化学習に学習させる必要はない」とも言えると思います。

この論文ではさらに、「逆運動学(inverse kinematics)や基本的な歩き方もわざわざ強化学習に学習させる必要はない」の気持ちで、人間が作成した歩くように動く足の軌道作成モジュール(foot trajectory generator)の周波数や、作成された足先の位置座標の上に足す相対位置(foot position residuals)などをポリシーの出力としています。

![system-diagram-part-c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622501/e860ab2c-3389-c6a1-4409-63e90cd8118b.png)


### Observation
ポリシーの入力となるobservationですが、基本的には移動方向などの目標情報とセンサーから得られる情報で構成されていますが、一つポイントとしてはロボットの角度と速度を得るために過去研究の[状態推定法 (Extended Kalman Filter、EKF)](https://ieeexplore.ieee.org/document/6577984)を利用しています。ロボットに搭載されている三半規管の役割を果たすIntertial Measurement Unit (IMU)というセンサーからは 1) 加速度、2) 角速度、3) 磁気から得られる大体の北の方角のみを得られて、それらの情報と足の角度や接触状態を足して、角度と速度といった直感的な情報を予測するシステムがこちらのEKFとなります。

## D. その他の実装詳細
### アクチュエーターモデル
本研究で利用されているANYmalというロボットですが、各関節にはモーターの出力にバネを足した機構的な柔らかさを持ったアクチュエーター(Series Elastic Actuator)を利用しています。様々な電子制御や物理的柔らかさを精密にモデリングするのは難しいらしく、[過去研究で開発された教師あり学習で事前に学習させたアクチュエーターのモデル](https://www.science.org/doi/10.1126/scirobotics.aau5872)をシミュレーターに入れて学習しています。記事序盤では実機ロボットから得たデータは学習に使用していない、と述べましたが、厳密に言うとこちらのアクチュエーターモデル学習には（アクチュエーターだけの）実機データが利用されています。

### 報酬関数
強化学習アルゴリズムにどういう動作を学習してほしいかを定義する報酬関数(reward function)ですが、7つの項によって作成されています。目標方向への移動速度や、目標方面を向く動きを達するための項や、トルクを使いすぎない、足以外で地面に接触しない、などの安全を考慮した項のように、どれも直感的な意味合いを持っています。ですが、それらのバランスや数式的な定義の仕方はおそらくたくさんのチューニングが必要だったのではないかと思います。これはこの論文に限らず強化学習ロボティクスの未だ未解決の課題だと思います。

ちなみに、もう一つの報酬関数の設計理念として、模範的な動作を真似るように報酬を設計する方法があります。模範的な動作データとして、[人間](https://xbpeng.github.io/projects/DeepMimic/index.html)や[動物](https://xbpeng.github.io/projects/Robotic_Imitation/index.html?ref=axion.zone)のモーションキャプチャーデータ、[人間が直接プログラムした軌道](https://www.cs.ubc.ca/~van/papers/2019-CORL-cassie/index.html)、[人間がロボットを動かして得た軌道](https://sites.google.com/view/corl2022-wasabi/home)、[モデルベースの最適化で導き出した軌道](https://www.cs.ubc.ca/~van/papers/2022-opt-mimic/index.html)などがあります。この方法の特徴として、どういう動作をしてほしいかの指定がほとんど模範データに含まれているので、報酬関数の設計が比較的単純に済みます。こう言うと聞こえはいいですが、多様な環境やタスク全てに対応する模範データを作るのが難しいといった問題があるのに加え、動作のどの部分を優先的に模倣学習するのかの重みパラメーターや安全なsim-to-real用のregularization項など、どっちにしろたくさんチューニングをしなくてはいけない部分がたくさんあります。

未だに強化学習ロボティクスにおいて大変な報酬関数チューニング作業から逃れる方法は存在しない、といったところでしょう。ただ四足ロボットのような過去研究が多い分野だと参考にできる論文がたくさんあるので、それらをベースに始めると良いでしょう。

### Domain Randomization
Domain randomization (dynamics randomizationとも表記される)は、実機ロボットを一度も見たことがない学習ポリシーがsim-to-realで実機ロボットに効果的に動きを移転するためによく利用される手法です。具体的には、ロボットの動力方程式を左右するパラメーターを、学習時の各シミュレーションにおいてランダムに変える方法です。この手法を利用する理由として、個人的には2つの解釈が考えられます。
1. 「実際のロボットのパラメーター数値もこの中に含まれてるだろう」という意気込みで実機ロボットに一致するであろうパラメーターを含めたくさんのパラメーターにも対応できるように学習させる。
2. 実際のロボットにもセンサーのノイズや状況において微妙なアクチュエーター性質のズレなどがあるので、それらにも対応できるように全体的にロバストになるように学習させる。

1の解釈だけでは上記のアクチュエーターモデルのように、よりモデル同定を頑張れば上手く行きそうだとツッコミがきそうですが(実際に[実機ロボットデータで極限にまでモデルをfine tuningし、randomizationを使用しないsim-to-real強化学習論文も存在します](https://youtu.be/fBiataDpGIo?si=IMCozb9AizP5vmih))、2の解釈と合わせることで、理論の段階からランダム性を考慮した強化学習の性質を上手く利用して、実環境においてロバストなコントローラーを作成する方法と考えられます。ちなみにrandomizationをむやみにやりすぎると、[保守的すぎて効果的にタスクを達成するポリシーを学習してくれないと示した論文もあります。](https://www.pair.toronto.edu/understanding-dr/)今回の論文では、1) ロボット機体にランダムな外乱、2) 足と地形の摩擦パラメーターのランダム設定、と 3) observationにランダムなノイズを加えたdomain randomizationを利用したらしいです。

# 結果とDiscussion
本論文ではジャーナル論文らしく、丁寧に成功確率とCost of Transport (CoT, 歩行ロボットのエネルギー効率を示す数値)を使って、同じ研究室で過去に使っていたモデルベースのコントローラーと比較をしています。ですが、一番の結果は、動画で見れるように以前のコントローラーとは比にならないほどの多様な地形をロバストに歩く姿と、この論文を機に世界中の四足ロボット研究室が強化学習を使い始めた事実ではないかと思います。

その他にも、論文でさらに検証されていることや、個人的に気になったポイントについてもう少し掘り下げていきましょう。

## 生徒が学習した環境状態の可視化
以前述べたように生徒はセンサーデータの歴史から環境に関する様々な情報を予測しているわけですが、実際にどれぐらい効果的に予測が出来ているのかを可視化している実験が論文に記載されています。

生徒は高次元かつ多様な意味合いを持つ環境情報を潜在変数$l_t$で表すように学習していますが、この実験では潜在変数$l_t$から元の環境情報を抽出するためのdecoderを学習します。ポリシーを学習しているときにVariational AutoEncoder (VAE)のencoderだけを学習していて、あとから実験のためだけにdecoderを学習するイメージです。こちらのdecoderはあくまでも可視化実験だけのもので、実際のロボット制御には利用されません。

1つ目は足と地面の間の摩擦の予測です。この実験では摩擦の高い地面を歩き始めて、途中からツルツル滑る地面を歩く様子を示しています。滑り始めた瞬間、しっかり予測された摩擦も低くなることが確認できます。
![student-latent-friction.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622501/54d4dc3e-595e-2b7b-2a9b-d97726219169.png)

2つ目は足回りの地形の予測です。赤い楕円の中心が予測された地形の高さで、楕円の厚さが予測の不確実性を表しています。しっかり地形に沿って予測されていて、しかも屋内の予測しやすそうな地面だと不確実性が低いことが確認できます。
![student-latent-terrain.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622501/cb7a0056-5d78-2a3f-5eb4-c348d79373cd.png)

これらの結果から、生徒はセンサー歴史から地面の様子を予測し、ロボットはしっかり地面を「感じながら」歩いていると結論付けられると思います。

## ビジョン?
本研究で利用されているロボットANYmalは様々な深度カメラやLiDARを搭載していますが、なぜこれらの視覚情報を使わないのか、というのは自然な疑問だと思います。結論から言うと、ビジョン情報も取れるロボットであれば、これらの情報も本当は利用すべきだと思います。個人的には[二年後に発表された視覚情報も取り入れた追跡研究](https://leggedrobotics.github.io/rl-perceptiveloco/)がこの研究の最終形態だと思います。

ただ、ビジョンを上手く取り入れるなら、制御とは若干関係のないビジョン特有の課題をまず解く必要があると思います。足などが邪魔して上手く地形を見れないocclusion問題、森の中など硬い地面とは無関係の物体で深度情報が狂ってしまう問題、そもそも深度などの中間的な表現を使わず画像をそのまま入力に使おうとすると、シミューレーション上でとてもリアルな画像をレンダリングしなくてはいけないといった問題があります。これらの問題を一旦無視してビジョン以外のセンサーで地面との接触をしっかり感知しながらロバストに歩かせる途中経過論文、というのが本研究の位置づけだと個人的に解釈しています。歩行制御において環境との効果的な接触はタスクに欠かせない能力なので、それをこれほどまでしっかりやった研究は本論文が初めてだと思います。

## 柔らか関節と強化学習との相性
最後は論文には記載されていない個人的な仮説ですが、強化学習ロボティクスと電子制御あるいは機構から来る柔らかさにはとても重要な関係性があるような気がします。この論文で利用されているANYmalロボットは、先程述べたようにバネが入ったSeries Elastic Actuatorを利用しているのに加えて、電子的にも低めのPDゲイン設定によってある程度の柔らかさを持っているそうです。似た時期に発表された[大型の二足歩行ロボットを初めて強化学習で歩かせることに成功した研究](https://www.cs.ubc.ca/~van/papers/2019-CORL-cassie/index.html)もバネが足の機構の一分に含まれています。それ以外にも一般的に強化学習でよく使われているUnitree社などが製造する四足ロボットですが、こちらは機構的な柔らかさこそは無いですが、MITのBiomimetic Robotics Labが始めた大きめのブラッシュレスモーターに低いギア比のトランスミッションを通してベクトル制御で動かすといった、電子的な柔らかさ取り入れたアクチュエーターの設計理念に依存しているのではないかと睨んでいます。

それに比べると、四足ロボットが流行る前に主流だった歩行ロボットは高めのギア比のトランスミッション使った大型のヒューマノイドロボットのような気がします。もしかしたらこういった硬いロボットは産業用ロボット用の高ゲインPIDを使った制御法や、二足歩行ロボットで使用されていたZMP制御などと相性が良くて、対象的に、古典的な方法だとモデリングや制御が難しい柔らかいロボットは強化学習と相性が良いのではないか、というのが僕の仮説です。直接柔らかさを動きの一部として使わずとも、柔らかさを通して得られる位置制御の誤差から、環境との接触から来る力を観測して、それを上手く利用して強化学習は効果的な歩行を実現しているのではないかと思っています。

強化学習を全く使わないモデルベースの制御で一番効果的な結果を出しているロボットはおそらくBoston DynamicsのヒューマノイドAtlasですが、こちらのロボットは関節の柔らかさは最小限に収めた油圧と高ゲイン制御を利用しているのも、僕の仮説をある程度裏付けていると思います。このブログを執筆している2024年1月現在では、ヒューマノイドロボットのハードウェア開発が大きく流行っていて、これからUnitreeの比較的安価なヒューマノイドロボットが販売されるにつれて機械的機構と制御法との関連性についてどう研究が発展していくのかがとても楽しみです。

こういった話が面白いと感じたら、是非一緒に強化学習ロボティクスの分野で研究をしましょう！

# まとめ
本記事では、"Learning Quadrupedal Locomotion over Challenging Terrain" という四足ロボット強化学習においてとても重要な論文を紹介しつつ、同時に僕個人が蓄積してきたこの分野では一般的となった手法についても、紹介していきました。

僕は主に海外で研究をやってきましたが、こうやって日本語の記事を残すことによって、強化学習でロボットを動かそうとしている誰かの参考になっていただければ嬉しいです。

では、本記事は以上となります。ここまで読んでいただいてありがとうございました！
(そして、めちゃくちゃ今更ですが、基盤モデルxRobotics Advent Calendarと言いつつ、基盤モデルと一切関係のない内容で、すいませんでした笑)