
GymFC - это структура настройки управления полетом с акцентом на управление отношением. GymFC был впервые введен в рукописи «обучение подкреплению для управления отношением БПЛА», в которой симулятор использовался для синтеза контроллеров нейро полета, которые превышали производительность традиционного контроллера PID. После первоначального выпуска проектов он стал модульной структурой для настройки систем управления полетом, не только для синтеза контроллеров нейро полета, но и настройки традиционных контроллеров. GymFC является основным методом разработки контроллеров, которые будут использоваться в первой мировой нейронной сети, поддерживаемой прошивкой управления полетом NeuroFlight. Детали проекта и его архитектуры лучше всего описаны в тезисе Уила Коха «Синтез контроллера полета посредством глубокого обучения подкреплению».
Пожалуйста, используйте следующие записи 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 .Установить Gymfc и его зависимости от Ubuntu 18.04 выполнить,
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
pip3 install .
Gymfc работает на Ubuntu 18.04 и использует Gazebo V10.1.0 с DART V6.7.0 для бэкэнд -симулятора. Чтобы использовать DART с беседкой, они должны быть установлены из Source. Ибо, почему беседка должна использоваться с DART увидеть это видео. Самый простой способ установки зависимостей - сценарий install_dependencies.sh . По умолчанию он будет make с одним заданием. Вы можете переопределить флаги make с переменной среды MAKE_FLAGS . Строительство беседки из источника очень интенсивно. Если у вас достаточно памяти, увеличьте количество заданий для работы параллельно. Например, чтобы запустить четыре задания на параллельном выполнении,
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
Обратите внимание, что этот скрипт может занять более часа. Если ваша сборка не пройдет, проверьте dmesg , но наиболее распространенной причиной будут сбои в нерабочее время.
(Необязательно) Предполагается настроить виртуальную среду для установки GymFC. От проекта root Run, python3 -m venv env . Это создаст среду с именем env , которая будет игнорирована GIT. Чтобы включить виртуальную среду, source env/bin/activate и деактивируйте, deactivate .
Установить Gymfc,
pip3 install .
Это установит зависимости Python, а также создаст плагины и сообщения беседки.
Если вы планируете изменить код GymFC, вам необходимо установить в режиме редактирования/разработки.
pip3 install -e .
Вам также придется вручную установить плагины беседки, выполнив,
gymfc/envs/assets/gazebo/plugins/build_plugin.sh
Если вы отклоняетесь от этих инструкций по установке (например, установка беседки в другое место, отличное от конкретного в install_dependencies.sh ), вам может потребоваться изменить местоположение беседки setup.sh , определяемой переменной setupfile в gymfc/gymfc.ini .
Gymfc требует запуска самолета (цифровой близнец). Модель Quadcopter Racing NF1 доступна в examples/gymfc_nf/twins/nf1 если вам нужна модель для тестирования. Чтобы проверить все, установлено правильно, запускается,
python3 tests/test_start_sim.py --verbose examples/gymfc_nf/twins/nf1/model.sdf
Если все в порядке, вы должны увидеть модель Quadcopter NF1 в беседке.
Вы увидите следующее сообщение об ошибке, потому что вы еще не создали плагины двигателя и 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.
Этот репозиторий включает в себя экспериментальную сборку Docker в docker/demo , которая демонстрирует использование GymFC. Он был протестирован на MacOS 10.14.3 и Ubuntu 18.04, однако клиент беседки не был проверен на работу в Ubuntu. Это изображение Docker может помочь убедиться, что вы используете поддерживаемую среду для GymFC.
Для Mac установите Docker для Mac и Xquartz в вашу систему. Для Ubuntu установите Docker для Ubuntu.
Создайте изображение Docker
docker build . -t gymfc:demoЭто займет некоторое время, когда он собирает драйверы Mesa, беседку и дротик. Рекомендуется дать Docker большую часть ресурсов хозяина. Все входящие соединения будут переходить к Xquartz:
xhost +Пример использования, запустите изображение и тест test_step_sim.py, используя 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 " Заменять по внешнему 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 принимает вход в одну aircraft_config , которая является местоположением файла модели вашей модели самолета model.sdf . SDF объявляет все визуализации, геометрии и плагины для самолета.
Gymfc ожидает, что ваша модель будет иметь следующую структуру каталогов в стиле беседки:
model_name/
model.config
model.sdf
plugins/
build/
где каталог plugin содержит источник для ваших плагинов, а каталог build будет содержать встроенные двоичные плагины. Gymfc во время выполнения будет добавлять каталог сборки в плагин -плагин беседка, чтобы их можно было найти и загрузить.
ПРИМЕЧАНИЕ! Если вы используете внешние плагины, создайте мягкие ссылки на каждый файл .so в каталоге сборки.
Скоро выйдет!
Чтобы повысить гибкость и обеспечить универсальную структуру настройки, пользователь должен предоставить четыре модуля: контроллер полета, тюнер управления полетом, интерфейс среды и цифровой близнец. (Примечание. Для контроллеров нейро полета обычно контроллер полета и тюнер являются одним и тем же, например, базовыми показателями OpenAI), это расширит исследование управления полетом, которое можно провести с помощью GymFC. Например, это открывает возможности для настройки прироста PID с использованием стратегий оптимизации, таких как газ и PSO. Цель состоит в том, чтобы предоставить коллекцию модулей с открытым исходным кодом для пользователей для смешивания и соответствия. Если вы создали свой собственный, сообщите нам об этом, и мы добавим его ниже.
Каждая модель.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
Тема /воздушное судно/команда/ тип сообщения Motor MotorCommand.proto
Тема /самолет/датчик/IMU
Тип сообщения imu.proto
Тема /самолет/датчик/ESC
Тип сообщения Escsensor.proto
Среда Openai и цифровые двойные модели, используемые в тезисе Уила Коха, можно найти в examples/ каталоге.
Уил Кох
Спасибо этим замечательным людям (ключ эмодзи):
Уил Кох ? | Майкл Фридрих ? | Сид Майсур ? | varunag18 | Xabierolaz | Swapnil Pande ? ? |
Хотите стать участником?! Посетите Anforming.md для получения дополнительной информации, чтобы начать.