強化学習を用いた飛行制御プログラムの作成

障害物を避けつつ、目標に飛んでいくエージェントを作成する

プロジェクトの目標

大学の地形観測用の小型無人飛行機"Maya"に障害物回避機能を持たせることがこのプロジェクトの目標であった。 障害物回避の達成にはさまざまな手法があるが、私たちの班は強化学習を用いることとなった。

成果

もともとの"Maya"の制御プログラムはSimulinkにて実装されていたため、強化学習でもMatlab/Simulinkを用いることとした。 Matlabを用いた強化学習には主に2通りの方法があり、一つがmファイルにクラスを作成し、そこで学習を行うものである。 そして二つ目がSimulinkを活用する方法である。

まず手始めに、小型飛行機セスナをモデルとした垂直方向のみを考慮したクラスをmファイルで作成し、強化学習をさせた。 このモデルではactionとしてエンジンスロットルと昇降舵を用いている。これらの操作量はローレベルと言われ、機体の挙動に直接影響する。 緑の楕円は障害物を示し、赤い点はゴール地点を示している。

ローレベルの操作量のため、エージェントはまず飛ぶことから学習しなくてはならず、学習は非常に不安定であった。 上のgif画像でも度々機体が急激に上に向いてエピソードが終了していることが確認できる。

このモデルのGithubのレポジトリはこちら

そのため、Mayaへの学習は既存の伝達関数に基づいた制御ループを用い、方向や速度といったハイレベルの操作量を入力することにした。 以下の画像の左がSimulinkの構成であり、右が問題設定である。 緑の丸が通過すべき領域であり、黒い丸が障害物である。

実際の学習ではSimulinkでの飛行シミュレーションに非常に時間がかかり、十分なエピソード数を稼ぐことができないことが問題となった。 そのため、以下に示す非常に簡易化した運動モデルを用いて学習を行い、そのモデルを後に実際のMayaのモデルに応用する、という手法をとった。

\begin{align} \begin{pmatrix} X(n) \\ Y(n) \\ Z(n) \end{pmatrix} &= \begin{pmatrix} X(n-1) \\ Y(n-1) \\ Z(n-1) \end{pmatrix} + VK \cdot \begin{pmatrix} cos(\gamma(n)) cos(\chi(n)) \\ cos(\gamma(n)) sin(\chi(n)) \\ -sin(\gamma(n)) \end{pmatrix} \cdot Ts\\ \begin{pmatrix} \chi(n) \\ \gamma(n) \end{pmatrix} &= \begin{pmatrix} \chi(n-1) \\ \gamma(n-1) \end{pmatrix} + \begin{pmatrix} \dot{\chi}(n) \\ \dot{\gamma}(n) \end{pmatrix} \cdot Ts \end{align}

パラメータのチューニングの後、一つ目の通過地点を安定して通過できるようになった。

同じモデルをさらに学習させた結果、二つ目の通過地点を通過できるようになった。

その後、この学習済みのモデルを実際のMayaの制御モデルに応用した。 速度一定の仮定に基づいて簡易化されたモデルで学習を行ったため、実際の制御モデルでは目標を達成することができなかった。 しかし、その軌跡は目標への到達を目指していることが十分に伺え、十分な改善を施せばこの手法が適応可能であることがわかった。

 

このモデルのGithubのレポジトリはこちら(Mayaの実際の制御モデルの著作権は大学に付属するため、残念ながら公開することができない)