
O GYMFC é uma estrutura de ajuste de controle de vôo, com foco no controle de atitude. O GYMFC foi introduzido pela primeira vez no manuscrito "Aprendizagem de reforço para o controle de atitude UAV", no qual um simulador foi usado para sintetizar controladores de atitude de fuga neuro que excederam o desempenho de um controlador PID tradicional. Como o lançamento inicial dos projetos, ele amadureceu para se tornar uma estrutura modular para ajustar os sistemas de controle de vôo, não apenas para sintetizar controladores de fuga neuro, mas também sintonizar os controladores tradicionais. O GYMFC é o principal método para o desenvolvimento de controladores a serem usados na Rede Neural da Primeira Rede Neural do mundo, o Firmware de Controle de Vôo Neuroflight. Detalhes do projeto e sua arquitetura são melhor descritos na tese de Wil Koch "Síntese do controlador de vôo por meio de aprendizado de reforço profundo".
Por favor, use as seguintes entradas Bibtex para citar nosso trabalho,
@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 o Gymfc e suas dependências no Ubuntu 18.04 Execute,
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
pip3 install .
O Gymfc é executado no Ubuntu 18.04 e usa o Gazebo v10.1.0 com o DART v6.7.0 para o simulador de back -end. Para usar o DART com Gazebo, eles devem ser instalados a partir da fonte. Por que o gazebo deve ser usado com o DART, consulte este vídeo. A maneira mais fácil de instalar as dependências é com o script install_dependencies.sh . Por padrão, ele será make com um único trabalho. Você pode substituir os sinalizadores make pela variável de ambiente MAKE_FLAGS . Construir o gazebo da fonte é muito intensivo em recursos. Se você tiver memória suficiente, aumente o número de trabalhos para funcionar em paralelo. Por exemplo, para executar quatro empregos na execução paralela,
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
Observe que este script pode levar mais de uma hora para ser executado. Se a sua compilação falhar, verifique dmesg , mas o motivo mais comum serão falhas fora da memória.
(Opcional) sugere -se configurar um ambiente virtual para instalar o Gymfc. A partir da execução raiz do projeto, python3 -m venv env . Isso criará um ambiente chamado env que será ignorado pelo Git. Para ativar o ambiente virtual, source env/bin/activate e desative, deactivate .
Instale o gymfc,
pip3 install .
Isso instalará as dependências do Python e também criará os plugins e mensagens do mirante.
Se você planeja modificar o código GymFC, precisará instalar no modo de edição/desenvolvimento.
pip3 install -e .
Você também terá que instalar manualmente os plugins do gazebo executando,
gymfc/envs/assets/gazebo/plugins/build_plugin.sh
Se você se desviar dessas instruções de instalação (por exemplo, instalando o Gazebo em um local diferente que não seja específico em install_dependencies.sh ), pode ser necessário alterar a localização do gazebo setup.sh definido pela variável SetupFile no gymfc/gymfc.ini .
O GYMFC exige que um modelo de aeronave (gêmeo digital) seja executado. O modelo de quadcóptero NF1 Racing está disponível em examples/gymfc_nf/twins/nf1 se você precisar de um modelo para teste. Para testar tudo está instalado corretamente, executado,
python3 tests/test_start_sim.py --verbose examples/gymfc_nf/twins/nf1/model.sdf
Se estiver tudo bem, você deve ver o modelo de quadcopter NF1 no Gazebo.
Você verá a seguinte mensagem de erro porque ainda não criou os plugins do motor e da 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
Também a seguinte mensagem de erro é normal,
[Err] [DARTJoint.cc:195] DARTJoint: SetAnchor is not implemented
Para usar o modelo NF1 para testar exemplos de leitura/readme.md.
Este repositório inclui uma construção experimental do Docker no docker/demo que demos o uso do Gymfc. Ele foi testado no MacOS 10.14.3 e no Ubuntu 18.04, no entanto, o cliente Gazebo não foi verificado para trabalhar no Ubuntu. Essa imagem do Docker pode ajudar a garantir que você esteja executando um ambiente suportado para o GymFC.
Para Mac, instale o Docker para Mac e Xquartz no seu sistema. Para o Ubuntu, instale o Docker para o Ubuntu.
Construa a imagem do Docker
docker build . -t gymfc:demoIsso vai demorar um pouco, pois compila motoristas de Mesa, Gazebo e Dart. Recomenda -se dar a Docker uma grande parte dos recursos do host. Todas as conexões recebidas serão encaminhadas para Xquartz:
xhost +Exemplo de uso, execute a imagem e teste test_step_sim.py usando o gêmeo 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 " Substituir pelo IP externo do seu sistema para permitir que o GYMFC se conecte ao seu servidor Xquartz e para onde você clonou o repositório solo. Observe especial que os parâmetros test_step_sim.py estão usando o caminho dos contêineres, não o caminho do host.
O ambiente mais simples pode ser criado,
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 ) Ao herdar o FlightControlenv, você agora tem acesso às funções step_sim e reset . Se você deseja criar uma academia aberta, também precisa herdar esta classe, por exemplo,
from gymfc . envs . fc_env import FlightControlEnv
import gym
class MyOpenAIEnv ( FlightControlEnv , gym . Env ): Por simplicidade, o ambiente Gymfc toma como entrada uma única aircraft_config , que é o local do arquivo do modelo de aeronave model.sdf . O SDF declara todas as visualizações, geometrias e plugins para a aeronave.
Gymfc espera que seu modelo tenha a seguinte estrutura de diretório de estilo gazebo:
model_name/
model.config
model.sdf
plugins/
build/
onde o diretório plugin contém a fonte dos seus plug -ins e o diretório build conterá os plugins binários construídos. O GYMFC, em tempo de execução, adicionará o diretório de construção ao caminho do plug -in do gazebo para que eles possam ser encontrados e carregados.
OBSERVAÇÃO! Se você estiver usando plugins externos, crie links soft para cada arquivo .So no diretório de compilação.
Mais em breve!
Para aumentar a flexibilidade e fornecer uma estrutura de ajuste universal, o usuário deve fornecer quatro módulos: um controlador de vôo, um sintonizador de controle de vôo, interface de ambiente e gêmeo digital. (Nota: para controladores de fuga neuro normalmente, o controlador de vôo e o sintonizador são os mesmos, por exemplo, linhas de base Openai), isso expandirá a pesquisa de controle de vôo que pode ser feita com o GymFC. Por exemplo, isso abre as possibilidades de ajustar os ganhos do PID usando estratégias de otimização como GAS e PSO. O objetivo é fornecer uma coleção de módulos de código aberto para os usuários se misturarem e combinam. Se você criou o seu próprio, informe -nos e nós o adicionaremos abaixo.
libAircraftConfigPlugin.so modelo . Este é um plug -in dummy que permite definir dados de configuração arbitrários. Um exemplo de configuração pode ser assim,
< 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 >O GYMFC se comunica com a aeronave através das mensagens do Google Protobuf. No mínimo, a aeronave deve assinar comandos de motor e publicar mensagens da IMU
Tópico /aeronave/comando/Motor Message Type MotorCommand.proto
Tópico /aeronave/sensor/imu
Tipo de mensagem imu.proto
Tópico /aeronave/sensor/esc
Tipo de mensagem escsensor.proto
O ambiente OpenAI e os modelos gêmeos digitais usados na tese de Wil Koch podem ser encontrados no examples/ Diretório.
Wil Koch
Obrigado a essas pessoas maravilhosas (key emoji):
Wil Koch ? | Michael Friedrich ? | Sid Mysore ? | Varunag18 | Xabierolaz | Swapnil Pande ? ? |
Quer se tornar um colaborador?! Visite Contribuindo.md para obter mais informações para começar.