
GYMFCは、態度制御に焦点を当てたフライト制御チューニングフレームワークです。 GYMFCは、シミュレーターを使用して、従来のPIDコントローラーのパフォーマンスを超えるニューロ飛行姿勢コントローラーを合成するために使用された原稿「UAV態度制御の強化学習」で最初に導入されました。プロジェクトの初期リリース以来、ニューロ飛行コントローラーの合成だけでなく、従来のコントローラーも調整するために、飛行制御システムを調整するためのモジュラーフレームワークになることが成熟しました。 GYMFCは、世界で使用されるコントローラーを開発するための主要な方法です。プロジェクトとそのアーキテクチャの詳細については、Wil Kochの論文「Deep Reforcement Learningによる飛行コントローラー合成」で最もよく説明されています。
次のbibtexエントリを使用して、私たちの作品を引用してください。
@article{koch2019reinforcement,
title={Reinforcement learning for UAV attitude control},
author={Koch, William and Mancuso, Renato and West, Richard and Bestavros, Azer},
journal={ACM Transactions on Cyber-Physical Systems},
volume={3},
number={2},
pages={22},
year={2019},
publisher={ACM}
}
@article{koch2019flight,
title={Flight Controller Synthesis Via Deep Reinforcement Learning},
author={Koch, William},
journal={arXiv preprint arXiv:1909.06493},
year={2019}
}

examples Directoryに掲載されています。Ubuntu 18.04の実行にGYMFCとその依存関係をインストールするには、
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
pip3 install .
GYMFCはUbuntu 18.04で実行され、Backend SimulatorにDART V6.7.0でGazebo V10.1.0を使用しています。 GazeboでDARTを使用するには、ソースからインストールする必要があります。 GazeboをDARTで使用する必要がある理由については、このビデオをご覧ください。依存関係をインストールする最も簡単な方法は、提供されたinstall_dependencies.shスクリプトを使用することです。デフォルトでは、単一のジョブでmakeを実行します。 MAKE_FLAGS環境変数を使用して、 makeフラグをオーバーライドできます。ソースからガゼボを構築することは非常にリソース集中です。十分なメモリがある場合、並行して実行するジョブの数を増やします。たとえば、並列実行で4つのジョブを実行するには、
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
注意してください、このスクリプトは実行に1時間以上かかる場合があります。ビルドが失敗した場合、 dmesgチェックしますが、最も一般的な理由はメモリ外の障害です。
(オプション)Virtual環境をセットアップしてGYMFCをインストールすることをお勧めします。プロジェクトルートランから、 python3 -m venv env 。これにより、Gitで無視されるenvという名前の環境が作成されます。仮想環境を有効にするために、 source env/bin/activate 、非アクティブ化し、 deactivate 。
GYMFCをインストールし、
pip3 install .
これにより、Python依存関係がインストールされ、Gazeboプラグインとメッセージが作成されます。
GYMFCコードの変更を計画している場合は、編集/開発モードにインストールする必要があります。
pip3 install -e .
また、実行してGazeboプラグインを手動でインストールする必要があります。
gymfc/envs/assets/gazebo/plugins/build_plugin.sh
このインストール手順から逸脱している場合(たとえば、 install_dependencies.shの特定以外の別の場所にGazeboをインストールする場合)、 gymfc/gymfc.iniの変数SetupFileで定義されたGazebo setup.shの場所を変更する必要があります。
GYMFCでは、実行するには航空機モデル(デジタルツイン)が必要です。 NF1レーシングQuadcopterモデルは、テスト用のモデルが必要な場合はexamples/gymfc_nf/twins/nf1で利用できます。すべてをテストするには、すべてが正しく実行されます、
python3 tests/test_start_sim.py --verbose examples/gymfc_nf/twins/nf1/model.sdf
すべてが問題ない場合は、GazeboにNF1 Quadcopterモデルが表示されるはずです。
モータープラグインとIMUプラグインをまだ構築していないため、次のエラーメッセージが表示されます。
[Err] [Plugin.hh:187] Failed to load plugin libgazebo_motor_model.so: libgazebo_motor_model.so: cannot open shared object file: No such file or directory
[Err] [Plugin.hh:187] Failed to load plugin libgazebo_imu_plugin.so: libgazebo_imu_plugin.so: cannot open shared object file: No such file or directory
また、次のエラーメッセージは正常です。
[Err] [DARTJoint.cc:195] DARTJoint: SetAnchor is not implemented
NF1モデルを使用してさらにテストするには、例/readme.mdを読み取ります。
このリポジトリには、GYMFCの使用をデモするdocker/demoの実験的なDockerビルドが含まれています。 MacOS 10.14.3およびUbuntu 18.04でテストされていますが、GazeboクライアントはUbuntuで動作することを検証していません。このDocker画像は、GYMFCのサポートされている環境を確実に実行していることを確認できます。
Macの場合、システムにMac用のDockerとXquartzをインストールします。 ubuntuの場合は、ubuntuのDockerをインストールしてください。
Docker画像を作成します
docker build . -t gymfc:demoメサのドライバー、ガゼボ、ダーツをコンパイルするので、これにはしばらく時間がかかります。 Dockerにホストのリソースの大部分を与えることをお勧めします。すべての着信接続はXquartzに転送されます。
xhost +使用する例、Solo Digital Twinを使用して画像を実行し、テストtest_step_sim.pyを実行します。
docker run -ti -e DISPLAY= < hostip > :0
-v < path-to-gymfc-digitaltwin-solo > /models/solo/model.sdf:/gymfc/demo/models/solo/model.sdf
gymfc:demo
" python3 /gymfc/tests/test_step_sim.py --gymfc-config /gymfc/gymfc.ini --verbose /gymfc/demo/models/solo/model.sdf 1 1 1 1 "交換するシステムの外部IPによって、GYMFCがXquartzサーバーに接続できるようにしますソロレポをクローニングした場所に。 test_step_sim.pyパラメーターは、ホストのパスではなく、コンテナパスを使用していることに特に注意してください。
最も単純な環境は、で作成できます。
from gymfc . envs . fc_env import FlightControlEnv
class MyEnv ( FlightControlEnv ):
def __init__ ( self , aircraft_config , config = None , verbose = False ):
super (). __init__ ( aircraft_config , config_filepath = config , verbose = verbose ) FlightControlenvを継承することにより、 step_simとreset機能にアクセスできます。 Openaiジムを作成したい場合は、このクラスを継承する必要があります。
from gymfc . envs . fc_env import FlightControlEnv
import gym
class MyOpenAIEnv ( FlightControlEnv , gym . Env ): 簡単にするために、GYMFC環境は、航空機model.sdfのファイルの場所である単一のaircraft_config入力するために取得します。 SDFは、航空機のすべての視覚化、形状、プラグインを宣言します。
GYMFCは、モデルが次のガゼボスタイルのディレクトリ構造を持つことを期待しています。
model_name/
model.config
model.sdf
plugins/
build/
pluginディレクトリにプラグインのソースが含まれている場合、 buildディレクトリにはビルドバイナリプラグインが含まれます。 GYMFCは、実行時に、ビルドディレクトリをGazeboプラグインパスに追加して、見つけてロードできるようにします。
注記!外部プラグインを使用している場合、ビルドディレクトリ内の各.SOファイルへのソフトリンクを作成します。
もうすぐ来る!
柔軟性を高め、ユニバーサルチューニングフレームワークを提供するには、ユーザーはフライトコントローラー、フライトコントロールチューナー、環境インターフェイス、デジタルツインの4つのモジュールを提供する必要があります。 (注:ニューロフライトコントローラーの場合、通常、フライトコントローラーとチューナーは同じものです。たとえば、Openaiベースラインなど)これにより、GYMFCで実行できるフライトコントロール調査が拡大します。たとえば、これにより、ガスやPSOなどの最適化戦略を使用してPIDゲインを調整する可能性が開かれます。目標は、ユーザーがミックスしてマッチするためのオープンソースモジュールのコレクションを提供することです。独自に作成した場合は、お知らせください。以下に追加します。
各モデル.sdfは、 libAircraftConfigPlugin.soプラグインを宣言する必要があります。これはダミープラグインであり、任意の構成データを設定できます。構成の例は、このように見えるかもしれません、
< plugin name = " config " filename = " libAircraftConfigPlugin.so " >
<!-- Define the total number of motors that shall be controlled -->
< motorCount >4</ motorCount >
<!-- The center of thrust must be defined in order to attach the aircraft
model to the simulation. The offset will in relation to this specified link -->
< centerOfThrust >
< link >battery</ link >
< offset >0 0 0.058</ offset >
</ centerOfThrust >
<!-- Specify all the sensors this aircraft supports. Valid sensor types
are "imu, esc, and battery" -->
< sensors >
< sensor type = " imu " >
< enable_angular_velocity >true</ enable_angular_velocity >
< enable_linear_acceleration >true</ enable_linear_acceleration >
< enable_orientation >true</ enable_orientation >
</ sensor >
<!--
<sensor type="esc">
<enable_angular_velocity>true</enable_angular_velocity>
<enable_temperature>true</enable_temperature>
<enable_current>true</enable_current>
</sensor>
<sensor type="battery">
<enable_voltage>true</enable_voltage>
<enable_current>true</enable_current>
</sensor>
-->
</ sensors >
</ plugin >GYMFCは、Google Protobufメッセージを介して航空機と通信します。少なくとも、航空機はモーターコマンドを購読し、IMUメッセージを公開する必要があります
トピック/航空機/コマンド/モーターメッセージタイプMotorcommand.proto
トピック/航空機/センサー/IMU
メッセージタイプimu.proto
トピック/航空機/センサー/ESC
メッセージタイプESCSENSOR.PROTO
Wil Kochの論文で使用されているOpenai環境とデジタルツインモデルは、 examples/ディレクトリにあります。
ウィル・コッホ
これらの素晴らしい人々に感謝します(絵文字キー):
ウィル・コッホ ? | マイケル・フリードリッヒ ? | シド・マイソール ? | varunag18 | Xabierolaz | Swapnil Pande ? ? |
貢献者になりたいですか?!詳細については、Contributing.mdにアクセスしてください。