
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以獲取更多信息以開始。