
Gymfc es el marco de ajuste de control de vuelo con un enfoque en el control de actitud. Gymfc se introdujo por primera vez en el manuscrito "Aprendizaje de refuerzo para el control de actitud de UAV" en el que se usó un simulador para sintetizar controladores de actitud neuro-vuelo que excedieron el rendimiento de un controlador PID tradicional. Desde el lanzamiento inicial de los proyectos, ha madurado para convertirse en un marco modular para ajustar los sistemas de control de vuelo, no solo para sintetizar controladores neuro-vuelo, sino también ajustar los controladores tradicionales también. Gymfc es el método principal para desarrollar controladores que se utilizarán en el mundo de la Primera Red Neural, el firmware de control de vuelo de la red neuronal, Neuroflight. Los detalles del proyecto y su arquitectura se describen mejor en la tesis de Wil Koch "Síntesis de controlador de vuelo a través del aprendizaje de refuerzo profundo".
Utilice las siguientes entradas de Bibtex para citar nuestro trabajo,
@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 .Para instalar Gymfc y sus dependencias en Ubuntu 18.04 ejecutar,
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
pip3 install .
Gymfc se ejecuta en Ubuntu 18.04 y usa Gazebo V10.1.0 con Dart V6.7.0 para el simulador de backend. Para usar Dart con Gazebo, deben instalarse desde la fuente. Por qué se debe usar Gazebo con Dart, vea este video. La forma más fácil de instalar las dependencias es con el script install_dependencies.sh proporcionado. Por defecto, se ejecutará make con un solo trabajo. Puede anular los indicadores make con la variable de entorno MAKE_FLAGS . La cigarrabo de la fuente de la fuente es muy intensiva en recursos. Si tiene suficiente memoria, aumente el número de trabajos para ejecutarse en paralelo. Por ejemplo, ejecutar cuatro trabajos en la ejecución paralela,
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
Tenga en cuenta que este script puede tardar más de una hora en ejecutarse. Si su compilación falla, verifique dmesg pero la razón más común será fallas fuera de memoria.
(Opcional) Se sugiere configurar un entorno virtual para instalar Gymfc en. Desde el Proyecto Root Run, python3 -m venv env . Esto creará un entorno llamado env que será ignorado por Git. Para habilitar el entorno virtual, source env/bin/activate y desactivar, deactivate .
Instalar gymfc,
pip3 install .
Esto instalará las dependencias de Python y también construirá los complementos y mensajes de Gazebo.
Si planea modificar el código GYMFC, deberá instalar en modo de edición/desarrollo.
pip3 install -e .
También tendrá que instalar manualmente los complementos de Gazebo ejecutando,
gymfc/envs/assets/gazebo/plugins/build_plugin.sh
Si se desvía de estas instrucciones de instalación (por ejemplo, la instalación de la glorieta en una ubicación diferente que no sea específica en install_dependencies.sh ), es posible que deba cambiar la ubicación de la setup.sh gymfc/gymfc.ini cigado.
Gymfc requiere un modelo de aeronave (gemelo digital) para ejecutar. El modelo NF1 Racing Quadcopter está disponible en examples/gymfc_nf/twins/nf1 si necesita un modelo para la prueba. Para probar todo se instala correctamente,
python3 tests/test_start_sim.py --verbose examples/gymfc_nf/twins/nf1/model.sdf
Si todo está bien, debería ver el modelo NF1 Quadcopter en Gazebo.
Verá el siguiente mensaje de error porque aún no ha construido los complementos del motor y la 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
También el siguiente mensaje de error es normal,
[Err] [DARTJoint.cc:195] DARTJoint: SetAnchor is not implemented
Para usar el modelo NF1 para pruebas adicionales, Read ejemplos/readme.md.
Este repositorio incluye una construcción experimental de Docker en docker/demo que demos el uso de Gymfc. Se ha probado en MacOS 10.14.3 y Ubuntu 18.04, sin embargo, el cliente de Gazebo no ha sido verificado para trabajar para Ubuntu. Esta imagen de Docker puede ayudar a garantizar que esté ejecutando un entorno compatible para Gymfc.
Para Mac, instale Docker para Mac y Xquartz en su sistema. Para Ubuntu, instale Docker para Ubuntu.
Construye la imagen Docker
docker build . -t gymfc:demoEsto llevará un tiempo a medida que compila conductores de mesa, glori una glorieta y dart. Se recomienda dar a Docker una gran parte de los recursos del anfitrión. Todas las conexiones entrantes reenviarán a Xquartz:
xhost +Ejemplo de uso, ejecute la imagen y pruebe test_step_sim.py usando el gemelo digital 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 " Reemplazar por la IP externa de su sistema para permitir que Gymfc se conecte a su servidor Xquartz y a donde clonaste el repositorio en solitario. Tome, tenga en cuenta que los parámetros test_step_sim.py están utilizando la ruta de contenedores, no la ruta del host.
El entorno más simple se puede crear con,
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 ) Al heredar FlightControlenv, ahora tiene acceso a las funciones step_sim y reset . Si desea crear un gimnasio Operai, también debe heredar esta clase, por ejemplo,
from gymfc . envs . fc_env import FlightControlEnv
import gym
class MyOpenAIEnv ( FlightControlEnv , gym . Env ): Para simplificar, el entorno Gymfc toma como entrada una sola aircraft_config , que es la ubicación del archivo de su modelo de aeronave model.sdf . El SDF declara todas las visualizaciones, geometrías y complementos para la aeronave.
Gymfc espera que su modelo tenga la siguiente estructura de directorio de estilo Gazebo:
model_name/
model.config
model.sdf
plugins/
build/
Donde el directorio plugin contiene la fuente de sus complementos y el directorio build contendrá los complementos binarios construidos. Gymfc, en tiempo de ejecución, agregará el directorio de compilación a la ruta del complemento Gazebo para que se puedan encontrar y cargar.
¡NOTA! Si está utilizando complementos externos, cree enlaces suaves a cada archivo .so en el directorio de compilación.
¡Más próximamente!
Para aumentar la flexibilidad y proporcionar un marco de sintonización universal, el usuario debe proporcionar cuatro módulos: un controlador de vuelo, un sintonizador de control de vuelo, interfaz de entorno y gemelo digital. (Nota: para los controladores neuro-vuelo, generalmente, el controlador de vuelo y el sintonizador son uno en las mismas líneas de base de OpenAi), esto ampliará la investigación de control de vuelo que se puede hacer con Gymfc. Por ejemplo, esto abre las posibilidades de ajustar las ganancias del PID utilizando estrategias de optimización como el gas y el PSO. El objetivo es proporcionar una colección de módulos de código abierto para que los usuarios se mezclen y coincidan. Si ha creado el suyo, háganoslo saber y lo agregaremos a continuación.
Cada modelo.sdf debe declarar el complemento libAircraftConfigPlugin.so . Este es un complemento ficticio que nos permite establecer datos de configuración arbitrarios. Una configuración de ejemplo puede verse así,
< 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 se comunica con el avión a través de los mensajes de Google ProtoBuf. Como mínimo, la aeronave debe suscribirse a los comandos del motor y publicar mensajes IMU
Topic /Aircraft/Command/Motor Message Tipo MotorCommand.Proto
Tema /aeronave/sensor/IMU
Tipo de mensaje iMu.proto
Tema /avión/sensor/ESC
Tipo de mensaje Escsensor.proto
El entorno Operai y los modelos gemelos digitales utilizados en la tesis de Wil Koch se pueden encontrar en los examples/ directorio.
Wil Koch
Gracias a estas maravillosas personas (Key Emoji):
Wil Koch ? | Michael Friedrich ? | Sid Mysore ? | varunag18 | Xabierolaz | Swapnil pande ? ? |
¿Quieres convertirte en un contribuyente? Visite contribuyendo.md para obtener más información para comenzar.