
GymFC是飞行控制调谐框架,重点是态度控制。 GymFC首先是在手稿“无人机态度控制的强化学习”中引入的,其中使用模拟器来合成超过传统PID控制器性能的神经飞行态度控制器。自从项目初始发布以来,它已经成熟成为调整飞行控制系统的模块化框架,不仅用于合成神经飞行员控制器,还用于调整传统控制器。 GymFC是开发控制器的主要方法,用于世界第一神经网络支持飞行控制固件神经灯。在威尔·科赫(Wil Koch)的论文“通过深入的强化学习综合综合”中,最好描述该项目及其架构的细节。
请使用以下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上运行,并将凉亭V10.1.0与DART V6.7.0用于后端模拟器。要与凉亭一起使用DART,必须从源安装它们。关于为什么必须与Dart一起使用凉亭,请参见此视频。安装依赖项的最简单方法是提供提供的install_dependencies.sh脚本。默认情况下,它将通过一个工作make 。您可以使用MAKE_FLAGS环境变量覆盖make标志。来自来源建立凉亭是非常大量资源的。如果您有足够的内存增加以并行运行的作业数量。例如,在并行执行中运行四个作业,
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中的特定位置安装凉亭),则可能需要更改由gymfc/gymfc.ini中变量设置的凉亭setup.sh的位置。SH。
GymFC需要飞机型号(数字双胞胎)才能运行。如果您需要测试模型,则NF1赛车四轮摩托车型号可以在examples/gymfc_nf/twins/nf1中获得。要测试所有内容的安装正确运行,
python3 tests/test_start_sim.py --verbose examples/gymfc_nf/twins/nf1/model.sdf
如果一切正常,您应该在凉亭中看到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/demo中进行的实验码头版本,该版本是演示GymFC的使用。它已经在MacOS 10.14.3和Ubuntu 18.04上进行了测试,但是尚未确认凉亭客户端为Ubuntu工作。此Docker图像可以帮助您确保您正在为GymFC运行支持的环境。
对于Mac,在系统上安装Mac和Xquartz的Docker。对于Ubuntu,为Ubuntu安装Docker。
构建Docker图像
docker build . -t gymfc:demo这将需要一段时间,因为它编译了台面驱动程序,凉亭和飞镖。建议为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。 SDF宣布飞机的所有可视化,几何形状和插件。
Gymfc希望您的模型具有以下凉亭风格的目录结构:
model_name/
model.config
model.sdf
plugins/
build/
plugin目录包含插件的源,并且build目录将包含构建的二进制插件。 GymFC将在运行时将构建目录添加到凉亭插件路径中,以便可以找到并加载它们。
笔记!如果您使用的是外部插件,则在构建目录中创建到每个.so文件的软链接。
更快即将到来!
为了提高灵活性并提供通用的调谐框架,用户必须提供四个模块:飞行控制器,飞行控制调谐器,环境界面和数字双胞胎。 (注意:对于神经飞行控制器,通常是飞行控制器和调谐器,例如OpenAI基线),这将扩大可以使用GymFC进行的飞行控制研究。例如,这为使用GAS和PSO等优化策略调整PID增益的可能性开辟了可能性。目的是提供开源模块的集合,供用户混合和匹配。如果您创建了自己的,请告诉我们,我们将在下面添加。
每种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消息
主题/飞机/命令/电机消息类型Motorcommand.proto
主题/飞机/传感器/IMU
消息类型imu.proto
主题/飞机/传感器/ESC
消息类型ESCSENSOR.PROTO
Wil Koch论文中使用的OpenAI环境和数字双胞胎模型可以在examples/目录中找到。
威尔·科赫(Wil Koch)
谢谢这些好人(表情符号钥匙):
威尔·科赫(Wil Koch) ? | 迈克尔·弗里德里希(Michael Friedrich) ? | 席德·迈索尔 ? | Varunag18 | Xabierolaz | Swapnil Pande ? ? |
想成为贡献者吗?请访问贡献。md以获取更多信息以开始。