
Gymfc ist Flight Control Tuning Framework mit Schwerpunkt auf der Einstellungskontrolle. Gymfc wurde erstmals in das Manuskript "Verstärkungslernen für UAV-Einstellungskontrolle" eingeführt, in dem ein Simulator zur Synthese von Neuro-Flug-Einstellungssteuerungen verwendet wurde, die die Leistung eines herkömmlichen PID-Controllers überschritten haben. Seit der ersten Veröffentlichung der Projekte ist es gereift, ein modulares Rahmen für das Tuning von Flugsteuerungssystemen zu werden, nicht nur für die Synthese von Neuro-Flug-Controllern, sondern auch zum Einstellen traditioneller Controller. Gymfc ist die Hauptmethode für die Entwicklung von Controllern, die in dem weltweit ersten neuronalen Netzwerk -Firmware -Firmware -NeuroFlight verwendet werden können. Details des Projekts und seiner Architektur sind am besten in Wil Kochs These "Flugcontroller -Synthese über das Lernen des Deep -Verstärkungs -Lernens" beschrieben.
Bitte verwenden Sie die folgenden Bibtex -Einträge, um unsere Arbeit zu zitieren.
@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 veröffentlicht.So installieren Sie Gymfc und seine Abhängigkeiten von Ubuntu 18.04, ausführen,
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
pip3 install .
Gymfc läuft auf Ubuntu 18.04 und verwendet Gavebo V10.1.0 mit DART V6.7.0 für den Backend -Simulator. Um Dart mit Pavillon zu verwenden, müssen sie aus der Quelle installiert werden. Denn warum Gavebo mit Dart verwendet werden muss, sehen Sie dieses Video. Der einfachste Weg, die Abhängigkeiten zu installieren, ist das sorgfältige install_dependencies.sh -Skript. Standardmäßig wird es mit einem einzigen Job make . Sie können die Flags make die Flags mit der Umgebungsvariablen MAKE_FLAGS überschreiben. Der Bauen von Pavillon aus der Quelle ist sehr ressourcenintensiv. Wenn Sie über ausreichend Speicher verfügen, erhöhen Sie die Anzahl der parallelen Arbeitsplätze. Zum Beispiel vier Jobs parallel ausführen, um auszuführen,
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
Beachten Sie, dass dieses Skript mehr als eine Stunde dauern kann, um auszuführen. Wenn Ihr Build fehlschlägt, überprüfen Sie dmesg aber der häufigste Grund sind außerdem Fehler.
(Optional) Es wird empfohlen, eine virtuelle Umgebung für die Installation von Gymfc einzurichten. Aus dem Projekt Root Run, python3 -m venv env . Dadurch wird eine Umgebung namens env geschaffen, die von Git ignoriert wird. So deaktivieren Sie die virtuelle Umgebung, source env/bin/activate und deaktivieren, um zu deactivate .
Installieren Sie Gymfc,
pip3 install .
Dadurch werden die Python -Abhängigkeiten installiert und auch die Pavillon -Plugins und Nachrichten erstellt.
Wenn Sie den Gymfc -Code ändern möchten, müssen Sie im Bearbeitungs-/Entwicklungsmodus installieren.
pip3 install -e .
Sie müssen die Pavillon -Plugins auch manuell installieren, indem Sie ausführen.
gymfc/envs/assets/gazebo/plugins/build_plugin.sh
Wenn Sie von diesen Installationsanweisungen abweichen (z gymfc/gymfc.ini B. die Installation von Pavillon an einem anderen Ort als spezifisch in install_dependencies.sh ), müssen Sie möglicherweise den Ort des Gavebo setup.sh ändern.
Gymfc benötigt ein Flugzeugmodell (digitaler Zwilling). Das NF1 Racing Quadcopter -Modell ist in examples/gymfc_nf/twins/nf1 verfügbar, wenn Sie ein Modell zum Testen benötigen. Um alles zu testen, wird richtig installiert, ausgeführt,
python3 tests/test_start_sim.py --verbose examples/gymfc_nf/twins/nf1/model.sdf
Wenn alles in Ordnung ist, sollten Sie das NF1 Quadcopter -Modell in Pavillon sehen.
Sie sehen die folgende Fehlermeldung, da Sie den Motor- und IMU -Plugins noch nicht erstellt haben.
[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
Auch die folgende Fehlermeldung ist normal,
[Err] [DARTJoint.cc:195] DARTJoint: SetAnchor is not implemented
Verwenden Sie das NF1 -Modell zum weiteren Test -Lesebeispielen/Readme.md.
Dieses Repository enthält einen experimentellen Docker -Build in docker/demo , der die Verwendung von Gymfc demonstriert. Es wurde auf MacOS 10.14.3 und Ubuntu 18.04 getestet, der Gavebo -Client wurde jedoch nicht verifiziert, für Ubuntu zu arbeiten. Dieses Docker -Bild kann dazu beitragen, dass Sie eine unterstützte Umgebung für Gymfc leiten.
Installieren Sie für Mac Docker für Mac und Xquartz auf Ihrem System. Installieren Sie für Ubuntu Docker für Ubuntu.
Erstellen Sie das Docker -Bild
docker build . -t gymfc:demoDies wird eine Weile dauern, da es Mesa -Treiber, Pavillon und Dart zusammenstellt. Es wird empfohlen, Docker einen großen Teil der Ressourcen des Gastgebers zu geben. Alle eingehenden Verbindungen werden an Xquartz weitergeleitet:
xhost +Beispiel Verwendung, Ausführen des Bild- und Tests test_step_sim.py mit dem Solo Digital Twin.
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 " Ersetzen durch die externe IP Ihres Systems, damit Gymfc eine Verbindung zu Ihrem Xquartz -Server herstellen kann und wohin Sie das Solo -Repo geklont haben. Beachten Sie besonders, dass die Parameter test_step_sim.py den Containerpfad verwenden, nicht den Pfad des Hosts.
Die einfachste Umgebung kann mit, mit, erstellt werden, mit,
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 ) Durch Erben von FlightControlenv haben Sie jetzt Zugriff auf die Funktionen von step_sim und reset . Wenn Sie ein Openai -Fitnessstudio erstellen möchten, müssen Sie auch diese Klasse EG erben.
from gymfc . envs . fc_env import FlightControlEnv
import gym
class MyOpenAIEnv ( FlightControlEnv , gym . Env ): Der Einfachheit halber nimmt die Gymfc -Umgebung ein einzelnes aircraft_config als Eingabe der Dateisposition Ihres Flugzeugmodells model.sdf . Das SDF erklärt alle Visualisierungen, Geometrien und Plugins für das Flugzeug.
Gymfc erwartet, dass Ihr Modell die folgende Verzeichnisstruktur im Pavillon -Stil hat:
model_name/
model.config
model.sdf
plugins/
build/
Dabei enthält das plugin -Verzeichnis die Quelle für Ihre Plugins und das build -Verzeichnis enthält die gebauten binären Plugins. Gymfc wird zur Laufzeit das Build -Verzeichnis in den Pavillon -Plugin -Pfad hinzufügen, damit sie gefunden und geladen werden können.
NOTIZ! Wenn Sie externe Plugins verwenden, erstellen Sie Soft -Links zu jeder .so -Datei im Build -Verzeichnis.
Weitere bald!
Um die Flexibilität zu erhöhen und ein universelles Tuning -Framework bereitzustellen, muss der Benutzer vier Module bereitstellen: einen Flugcontroller, einen Flugsteuerungstuner, eine Umgebungsoberfläche und ein digitales Zwilling. (Hinweis: Für Neuro-Flight-Controller sind in der Regel der Flugkontroller und der Tuner in derselben, z. B. OpenAI-Basislinien eingesetzt. Dies eröffnet beispielsweise die Möglichkeiten für die Stimmung von PID -Gewinnen mithilfe von Optimierungsstrategien wie Gas und PSO. Ziel ist es, eine Sammlung von Open -Source -Modulen für die Mischung zu bieten. Wenn Sie Ihre eigenen erstellt haben, teilen Sie uns dies bitte mit und wir werden es unten hinzufügen.
Jedes Modell libAircraftConfigPlugin.so Dies ist ein Dummy -Plugin, mit dem wir beliebige Konfigurationsdaten festlegen können. Eine Beispielkonfiguration kann so aussehen,
< 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 kommuniziert mit dem Flugzeug über Google Protobuf -Nachrichten. Zumindest muss das Flugzeug Motorbefehle abonnieren und IMU -Nachrichten veröffentlichen
Topie /Flugzeug/Befehl/Motor Nachricht Typ motorCommand.Proto
Thema /Flugzeug/Sensor/IMU
Nachrichtentyp Imu.Proto
Thema /Flugzeug/Sensor/ESC
Nachrichtentyp Escsensor.Proto
Die in der These von Wil Koch verwendeten OpenAI -Umgebung und digitalen Zwillingsmodelle finden Sie in den examples/ Verzeichnissen.
Wil Koch
Vielen Dank an diese wunderbaren Menschen (Emoji -Schlüssel):
Wil Koch ? | Michael Friedrich ? | Sid Mysore ? | Varunag18 | Xabierolaz | Swapnil Pande ? ? |
Willst du einen Mitwirkenden sein?! Besuchen Sie den Beitrag zum Mitwirkenden.md, um weitere Informationen zu erhalten.