
GymFC adalah kerangka kerja tuning kontrol penerbangan dengan fokus dalam kontrol sikap. GymFC pertama kali diperkenalkan dalam naskah "Pembelajaran Penguatan untuk Kontrol Sikap UAV" di mana simulator digunakan untuk mensintesis pengontrol sikap neuro-flight yang melebihi kinerja pengontrol PID tradisional. Sejak rilis awal proyek telah matang untuk menjadi kerangka kerja modular untuk menyetel sistem kontrol penerbangan, tidak hanya untuk mensintesis pengontrol neuro-flight tetapi juga menyetel pengontrol tradisional juga. GymFC adalah metode utama untuk mengembangkan pengontrol yang akan digunakan di dunia saraf pertama yang mendukung firmware kontrol penerbangan neuroflight. Rincian proyek dan arsitekturnya paling baik dijelaskan dalam tesis Wil Koch "sintesis pengontrol penerbangan melalui pembelajaran penguatan yang mendalam".
Silakan gunakan entri Bibtex berikut untuk mengutip pekerjaan kami,
@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 .Untuk memasang GymFC dan ketergantungannya di Ubuntu 18.04 Execute,
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
pip3 install .
GymFC berjalan di Ubuntu 18.04 dan menggunakan Gazebo V10.1.0 dengan DART V6.7.0 untuk simulator backend. Untuk menggunakan DART dengan Gazebo, mereka harus diinstal dari sumber. Untuk alasan Gazebo harus digunakan dengan DART lihat video ini. Cara termudah untuk menginstal dependensi adalah dengan skrip install_dependencies.sh yang disediakan. Secara default itu akan make dengan satu pekerjaan. Anda dapat mengganti bendera make dengan variabel lingkungan MAKE_FLAGS . Membangun gazebo dari sumber sangat intensif sumber daya. Jika Anda memiliki memori yang cukup, meningkatkan jumlah pekerjaan yang harus dijalankan secara paralel. Misalnya untuk menjalankan empat pekerjaan dalam eksekusi paralel,
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
Catatan, skrip ini mungkin memakan waktu lebih dari satu jam untuk dieksekusi. Jika build Anda gagal memeriksa dmesg tetapi alasan paling umum adalah kegagalan di luar memori.
(Opsional) Disarankan untuk mengatur lingkungan virtual untuk memasang GymFC ke dalam. Dari root root proyek, python3 -m venv env . Ini akan menciptakan lingkungan bernama env yang akan diabaikan oleh Git. Untuk mengaktifkan lingkungan virtual, source env/bin/activate dan untuk menonaktifkan, deactivate .
Instal GymFC,
pip3 install .
Ini akan menginstal dependensi Python dan juga membangun plugin dan pesan gazebo.
Jika Anda berencana untuk memodifikasi kode GymFC, Anda perlu menginstal dalam mode Edit/Pengembangan.
pip3 install -e .
Anda juga harus memasang plugin gazebo secara manual dengan mengeksekusi,
gymfc/envs/assets/gazebo/plugins/build_plugin.sh
Jika Anda menyimpang dari instruksi instalasi ini (misalnya, memasang gazebo di lokasi yang berbeda selain spesifik di install_dependencies.sh ), Anda mungkin perlu mengubah lokasi gazebo setup.sh yang ditentukan oleh setupfil variabel di gymfc/gymfc.ini .
GymFC membutuhkan model pesawat (Digital Twin) untuk dijalankan. Model quadcopter balap NF1 tersedia dalam examples/gymfc_nf/twins/nf1 jika Anda memerlukan model untuk pengujian. Untuk menguji semuanya diinstal dengan benar,
python3 tests/test_start_sim.py --verbose examples/gymfc_nf/twins/nf1/model.sdf
Jika semuanya baik -baik saja, Anda akan melihat model NF1 Quadcopter di Gazebo.
Anda akan melihat pesan kesalahan berikut karena Anda belum membangun plugin motor dan 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
Juga pesan kesalahan berikut adalah normal,
[Err] [DARTJoint.cc:195] DARTJoint: SetAnchor is not implemented
Untuk menggunakan model NF1 untuk pengujian lebih lanjut, baca contoh/readme.md.
Repositori ini mencakup pembangunan buruh eksperimental di docker/demo yang demo penggunaan GymFC. Ini telah diuji pada MacOS 10.14.3 dan Ubuntu 18.04, namun klien Gazebo belum diverifikasi untuk bekerja untuk Ubuntu. Gambar Docker ini dapat membantu memastikan Anda menjalankan lingkungan yang didukung untuk GYMFC.
Untuk Mac, instal Docker untuk Mac dan Xquartz di sistem Anda. Untuk Ubuntu, instal Docker untuk Ubuntu.
Bangun gambar Docker
docker build . -t gymfc:demoIni akan memakan waktu beberapa saat karena mengkompilasi driver mesa, gazebo dan dart. Disarankan untuk memberi Docker sebagian besar sumber daya tuan rumah. Semua koneksi yang masuk akan diteruskan ke xquartz:
xhost +Contoh penggunaan, jalankan gambar dan tes test_step_sim.py menggunakan kembar 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 " Mengganti oleh IP eksternal sistem Anda untuk memungkinkan GymFC terhubung ke server Xquartz Anda dan ke tempat Anda mengkloning repo solo. Perhatikan parameter test_step_sim.py menggunakan jalur wadah, bukan jalur host.
Lingkungan paling sederhana dapat dibuat dengan,
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 ) Dengan mewarisi FlightControlenv, Anda sekarang memiliki akses ke fungsi step_sim dan reset . Jika Anda ingin membuat gym openai, Anda juga perlu mewarisi kelas ini misalnya,
from gymfc . envs . fc_env import FlightControlEnv
import gym
class MyOpenAIEnv ( FlightControlEnv , gym . Env ): Untuk kesederhanaan lingkungan GymFC mengambil sebagai input satu aircraft_config yang merupakan lokasi file model.sdf model pesawat Anda.sdf. SDF menyatakan semua visualisasi, geometri, dan plugin untuk pesawat.
GymFC mengharapkan model Anda memiliki struktur direktori gaya gazebo berikut:
model_name/
model.config
model.sdf
plugins/
build/
Di mana Direktori plugin berisi sumber untuk plugin Anda dan Direktori build akan berisi plugin biner yang dibangun. GymFC akan, saat runtime, menambahkan direktori build ke jalur plugin gazebo sehingga dapat ditemukan dan dimuat.
CATATAN! Jika Anda menggunakan plugin eksternal, buat tautan lunak untuk setiap file .so di direktori build.
Lebih banyak hadir segera!
Untuk meningkatkan fleksibilitas dan memberikan kerangka kerja tuning universal, pengguna harus menyediakan empat modul: pengontrol penerbangan, tuner kontrol penerbangan, antarmuka lingkungan, dan kembar digital. (Catatan: Untuk pengontrol neuro-flight biasanya pengontrol penerbangan dan tuner adalah satu dalam hal yang sama, misalnya, openai baselines) Ini akan memperluas penelitian kontrol penerbangan yang dapat dilakukan dengan GymFC. Misalnya ini membuka kemungkinan untuk menyetel keuntungan PID menggunakan strategi optimasi seperti gas dan PSO. Tujuannya adalah untuk menyediakan koleksi modul open source untuk dicampur dan dicocokkan oleh pengguna. Jika Anda telah membuat sendiri, beri tahu kami dan kami akan menambahkannya di bawah ini.
Setiap model.sdf harus mendeklarasikan plugin libAircraftConfigPlugin.so . Ini adalah plugin dummy yang memungkinkan kami untuk mengatur data konfigurasi yang sewenang -wenang. Contoh konfigurasi mungkin terlihat seperti ini,
< 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 berkomunikasi dengan pesawat melalui pesan protobuf Google. Minimal pesawat harus berlangganan perintah motor dan mempublikasikan pesan IMU
Topik /Pesawat/Perintah/ Jenis Pesan Motor MotorCommand.proto
Topik /Pesawat/Sensor/IMU
Jenis Pesan IMU.PROTO
Topik /Pesawat/Sensor/ESC
Jenis Pesan Escsensor.proto
Lingkungan OpenAI dan model kembar digital yang digunakan dalam tesis Wil Koch dapat ditemukan dalam examples/ direktori.
Wil Koch
Terima kasih kepada orang -orang yang luar biasa ini (Kunci Emoji):
Wil Koch ? | Michael Friedrich ? | Sid Mysore ? | varunag18 | xabierolaz | Swapnil Pande ? ? |
Ingin menjadi kontributor?! Kunjungi Contributing.md untuk informasi lebih lanjut untuk memulai.