
GymFC est le cadre de réglage du contrôle de vol avec un focus dans le contrôle de l'attitude. GymFC a été introduit pour la première fois dans le manuscrit "Apprentissage par renforcement pour le contrôle d'attitude des drones" dans lequel un simulateur a été utilisé pour synthétiser les contrôleurs d'attitude neuro-vol qui ont dépassé les performances d'un contrôleur PID traditionnel. Depuis la version initiale des projets, il a mûri pour devenir un cadre modulaire pour régler les systèmes de contrôle de vol, non seulement pour synthétiser les contrôleurs de vol neuro-vol, mais aussi le réglage des contrôleurs traditionnels. GymFC est la principale méthode pour développer des contrôleurs à utiliser dans le premier réseau de réseau neuronal du premier réseau soutenu le firmware de contrôle de vol. Les détails du projet et de son architecture sont mieux décrits dans la thèse de Wil Koch "Synthèse du contrôleur de vol via un apprentissage en renforcement profond".
Veuillez utiliser les entrées Bibtex suivantes pour citer notre travail,
@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 .Pour installer le gymfc et ses dépendances sur Ubuntu 18.04 exécuter,
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
pip3 install .
Gymfc fonctionne sur Ubuntu 18.04 et utilise Gazebo V10.1.0 avec Dart V6.7.0 pour le simulateur backend. Pour utiliser Dart avec Gazebo, ils doivent être installés à partir de Source. Pour pourquoi Gazebo doit être utilisé avec Dart, voyez cette vidéo. Le moyen le plus simple d'installer les dépendances est avec le script install_dependencies.sh fourni. Par défaut, il fonctionnera make avec un seul travail. Vous pouvez remplacer les indicateurs make avec la variable d'environnement MAKE_FLAGS . La construction de gazebo de la source est très intensive en ressources. Si vous avez une mémoire suffisante, augmentez le nombre de travaux à exécuter en parallèle. Par exemple pour exécuter quatre travaux en parallèle d'exécution,
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
Remarque, ce script peut prendre plus d'une heure à exécuter. Si votre build échoue, vérifiez dmesg , mais la raison la plus courante sera les échecs hors mémoire.
(Facultatif) Il est suggéré de configurer un environnement virtuel pour installer GymFC. De la course racine du projet, python3 -m venv env . Cela créera un environnement nommé env qui sera ignoré par Git. Pour activer l'environnement virtuel, source env/bin/activate et désactiver, deactivate .
Installer gymfc,
pip3 install .
Cela installera les dépendances Python et créera également les plugins et les messages de gazebo.
Si vous prévoyez de modifier le code GymFC, vous devrez installer en mode édition / développement.
pip3 install -e .
Vous devrez également installer manuellement les plugins en gazebo en exécutant,
gymfc/envs/assets/gazebo/plugins/build_plugin.sh
Si vous écartez de ces instructions d'installation (par exemple, l'installation de gazebo dans un endroit différent autre que spécifique dans install_dependencies.sh ), vous devrez peut-être modifier l'emplacement de la setup.sh du gymfc/gymfc.ini .
GymFC nécessite un modèle d'avion (jumeau numérique) à fonctionner. Le modèle de quadcopter NF1 Racing est disponible en examples/gymfc_nf/twins/nf1 si vous avez besoin d'un modèle pour tester. Pour tester tout est installé correctement,
python3 tests/test_start_sim.py --verbose examples/gymfc_nf/twins/nf1/model.sdf
Si tout va bien, vous devriez voir le modèle quadcopter NF1 dans Gazebo.
Vous verrez le message d'erreur suivant car vous n'avez pas encore construit le moteur et les plugins 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
Le message d'erreur suivant est également normal,
[Err] [DARTJoint.cc:195] DARTJoint: SetAnchor is not implemented
Pour utiliser le modèle NF1 pour tester davantage des exemples de lecture / Readme.md.
Ce référentiel comprend une construction expérimentale Docker dans docker/demo qui démos l'utilisation de GymFC. Il a été testé sur MacOS 10.14.3 et Ubuntu 18.04, mais le client de gazebo n'a pas été vérifié pour travailler pour Ubuntu. Cette image Docker peut vous assurer de gérer un environnement soutenu pour GymFC.
Pour Mac, installez Docker pour Mac et Xquartz sur votre système. Pour Ubuntu, installez Docker pour Ubuntu.
Construisez l'image Docker
docker build . -t gymfc:demoCela prendra un certain temps car il compile les chauffeurs de Mesa, le gazebo et la fléchette. Il est recommandé de donner à Docker une grande partie des ressources de l'hôte. Toutes les connexions entrantes seront transmises à Xquartz:
xhost +Exemple d'utilisation, exécutez l'image et tests test_step_sim.py à l'aide du jumeau numérique solo,
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 " Remplacer par l'IP externe de votre système pour permettre à GymFC de se connecter à votre serveur Xquartz et à l'endroit où vous avez cloné le repo solo. Prenez note spéciale que les paramètres test_step_sim.py utilisent le chemin des conteneurs, pas le chemin de l'hôte.
L'environnement le plus simple peut être créé avec,
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 ) En héritant de FlightControlenv, vous avez désormais accès aux fonctions step_sim et reset . Si vous souhaitez créer un gymnase Openai, vous devez également hériter de cette classe, par exemple,
from gymfc . envs . fc_env import FlightControlEnv
import gym
class MyOpenAIEnv ( FlightControlEnv , gym . Env ): Pour plus de simplicité, l'environnement gymfc prend en entrée un seul aircraft_config qui est l'emplacement du fichier de votre model.sdf de modèle aéronef.sdf. Le SDF déclare toutes les visualisations, géométries et plugins pour l'avion.
GymFC s'attend à ce que votre modèle ait la structure du répertoire de style gazebo suivant:
model_name/
model.config
model.sdf
plugins/
build/
où le répertoire plugin contient la source de vos plugins et que le répertoire build contiendra les plugins binaires construits. GymFC, au moment de l'exécution, ajoutera le répertoire de construction au chemin du plugin Gazebo afin qu'ils puissent être trouvés et chargés.
NOTE! Si vous utilisez des plugins externes, créez des liens souples vers chaque fichier .so dans le répertoire de build.
Plus à venir bientôt!
Pour augmenter la flexibilité et fournir un cadre de réglage universel, l'utilisateur doit fournir quatre modules: un contrôleur de vol, un tuner de commande de vol, une interface environnementale et un jumeau numérique. (Remarque: pour les contrôleurs de neuro-vol, généralement le contrôleur de vol et le tuner sont l'un dans le même, par exemple, Openai Baslines) Cela élargira la recherche sur le contrôle de vol qui peut être fait avec GymFC. Par exemple, cela ouvre les possibilités de régler les gains de PID en utilisant des stratégies d'optimisation telles que le gaz et le PSO. L'objectif est de fournir une collection de modules open source que les utilisateurs peuvent mélanger et assortir. Si vous avez créé le vôtre, veuillez nous le faire savoir et nous l'ajouterons ci-dessous.
Chaque modèle.sdf doit déclarer le plugin libAircraftConfigPlugin.so . Il s'agit d'un plugin factice nous permettant de définir des données de configuration arbitraires. Un exemple de configuration peut ressembler à ceci,
< 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 communique avec l'avion via des messages Google Protobuf. Au minimum, l'avion doit s'abonner aux commandes du moteur et publier des messages IMU
Sujet / Aircraft / Command / Motor Message Type MotorCommand.proto
Sujet / avion / capteur / IMU
Type de message IMU.proto
Sujet / avion / capteur / ESC
Type de message ESCSENSENSOR.proto
L'environnement OpenAI et les modèles jumeaux numériques utilisés dans la thèse de Wil Koch se trouvent dans les examples/ répertoire.
Wil Koch
Merci à ces gens merveilleux (clé emoji):
Wil Koch ? | Michael Friedrich ? | Sid Mysore ? | varunag18 | xabierolaz | Swapnil pande ? ? |
Vous voulez devenir un contributeur ?! Visitez contribution.md pour plus d'informations pour commencer.