
GymFC เป็นกรอบการปรับแต่งการควบคุมเที่ยวบินโดยให้ความสำคัญกับการควบคุมทัศนคติ GymFC ได้รับการแนะนำเป็นครั้งแรกในต้นฉบับ "การเรียนรู้การเสริมแรงสำหรับการควบคุมทัศนคติของ UAV" ซึ่งมีการใช้เครื่องจำลองเพื่อสังเคราะห์ตัวควบคุมทัศนคติของ Neuro-Flight Attitude ที่เกินประสิทธิภาพของคอนโทรลเลอร์ PID แบบดั้งเดิม เนื่องจากโครงการเปิดตัวครั้งแรกมันได้ครบกำหนดเพื่อให้กลายเป็นเฟรมเวิร์กแบบแยกส่วนสำหรับการปรับแต่งระบบควบคุมการบินไม่เพียง แต่สำหรับการสังเคราะห์ตัวควบคุมการบิน Neuro-Flight เท่านั้น แต่ยังปรับจูนคอนโทรลเลอร์แบบดั้งเดิมด้วย GYMFC เป็นวิธีหลักในการพัฒนาตัวควบคุมที่จะใช้ในโลกแรกที่สนับสนุนเครือข่ายประสาทสัมผัสกับเฟิร์มแวร์การควบคุมเที่ยวบิน Neuroflight รายละเอียดของโครงการและสถาปัตยกรรมของมันอธิบายได้ดีที่สุดในวิทยานิพนธ์ของ 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 และใช้ Gazebo v10.1.0 ด้วย Dart v6.7.0 สำหรับตัวจำลองแบ็กเอนด์ ในการใช้ DART กับ Gazebo จะต้องติดตั้งจากแหล่งที่มา เพราะทำไมศาลาต้องใช้กับ Dart ดูวิดีโอนี้ วิธีที่ง่ายที่สุดในการติดตั้งการพึ่งพาคือสคริปต์ install_dependencies.sh ที่ให้ไว้ โดยค่าเริ่มต้นมันจะ make กับงานเดียว คุณสามารถแทนที่ make Flags ด้วยตัวแปรสภาพแวดล้อม MAKE_FLAGS การสร้างศาลาจากแหล่งที่มานั้นมีทรัพยากรอย่างเข้มข้นมาก หากคุณมีหน่วยความจำเพียงพอเพิ่มจำนวนงานที่จะทำงานแบบขนาน ตัวอย่างเช่นการรันสี่งานในการดำเนินการแบบขนาน
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
หมายเหตุสคริปต์นี้อาจใช้เวลามากกว่าหนึ่งชั่วโมงในการดำเนินการ หากการสร้างของคุณล้มเหลวตรวจสอบ dmesg แต่เหตุผลที่พบบ่อยที่สุดคือความล้มเหลวของหน่วยความจำ
(ไม่บังคับ) ขอแนะนำให้ตั้งค่าสภาพแวดล้อมเสมือนจริงเพื่อติดตั้ง GymFC เข้า จาก Root Run Project, 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 ) คุณอาจต้องเปลี่ยนตำแหน่งของ Gazebo setup.sh ที่กำหนดโดยตัวแปร setupfile ใน gymfc/gymfc.ini
GymFC ต้องการรูปแบบเครื่องบิน (ดิจิตอลคู่) ทำงาน รุ่น NF1 Racing Quadcopter มีอยู่ใน examples/gymfc_nf/twins/nf1 หากคุณต้องการแบบจำลองสำหรับการทดสอบ เพื่อทดสอบทุกอย่างถูกติดตั้งอย่างถูกต้อง
python3 tests/test_start_sim.py --verbose examples/gymfc_nf/twins/nf1/model.sdf
หากทุกอย่างโอเคคุณควรเห็นรุ่น NF1 Quadcopter ใน Gazebo
คุณจะเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้เนื่องจากคุณยังไม่ได้สร้างปลั๊กอินมอเตอร์และ 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 อย่างไรก็ตามลูกค้า Gazebo ยังไม่ได้รับการยืนยันว่าทำงานให้กับ Ubuntu ภาพนักเทียบท่านี้สามารถช่วยให้แน่ใจว่าคุณกำลังใช้สภาพแวดล้อมที่รองรับสำหรับ GYMFC
สำหรับ Mac ให้ติดตั้ง Docker สำหรับ Mac และ Xquartz บนระบบของคุณ สำหรับ Ubuntu ให้ติดตั้ง Docker สำหรับ Ubuntu
สร้างภาพนักเทียบท่า
docker build . -t gymfc:demoจะใช้เวลาสักครู่ในการรวบรวมไดรเวอร์ Mesa, Gazebo และ Dart ขอแนะนำให้ให้ทรัพยากรส่วนใหญ่ของ Docker เป็นส่วนใหญ่ การเชื่อมต่อที่เข้ามาทั้งหมดจะส่งต่อไปยัง Xquartz:
xhost +ตัวอย่างการใช้งานเรียกใช้ภาพและทดสอบ test_step_sim.py โดยใช้โซโลดิจิตอลคู่
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 และ ไปยังที่ที่คุณโคลน repo เดี่ยว จดบันทึกเป็นพิเศษว่าพารามิเตอร์ 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 เดียว _config ซึ่งเป็นตำแหน่งไฟล์ของ model.sdf เครื่องบินของคุณ SDF ประกาศการสร้างภาพรูปทรงเรขาคณิตและปลั๊กอินทั้งหมดสำหรับเครื่องบิน
GymFC คาดว่าโมเดลของคุณจะมีโครงสร้างไดเรกทอรีสไตล์ศาลาต่อไปนี้:
model_name/
model.config
model.sdf
plugins/
build/
ที่ไดเรกทอรี plugin มีแหล่งที่มาสำหรับปลั๊กอินของคุณและไดเรกทอรี build จะมีปลั๊กอินไบนารีที่สร้างขึ้น GymFC จะเพิ่มไดเรกทอรี Build ลงในเส้นทางปลั๊กอิน Gazebo เพื่อให้สามารถพบและโหลดได้
บันทึก! หากคุณใช้ปลั๊กอินภายนอกสร้างลิงก์ซอฟต์ซอฟต์ไปยังแต่ละไฟล์. ดังนั้นในไดเรกทอรีบิลด์
เพิ่มเติมเร็ว ๆ นี้!
เพื่อเพิ่มความยืดหยุ่นและจัดเตรียมกรอบการปรับจูนสากลผู้ใช้จะต้องจัดเตรียมโมดูลสี่โมดูล: คอนโทรลเลอร์เที่ยวบินตัวควบคุมการบินอินเทอร์เฟซสิ่งแวดล้อมและคู่ดิจิตอล (หมายเหตุ: สำหรับตัวควบคุม Neuro-Flight โดยทั่วไปตัวควบคุมการบินและจูนเนอร์เป็นหนึ่งในสิ่งเดียวกันเช่น Openai baselines) สิ่งนี้จะขยายการวิจัยการควบคุมเที่ยวบินที่สามารถทำได้ด้วย GyMFC ตัวอย่างเช่นสิ่งนี้เปิดโอกาสในการปรับกำไร PID โดยใช้กลยุทธ์การเพิ่มประสิทธิภาพเช่นก๊าซและ PSO เป้าหมายคือการจัดทำคอลเลกชันของโมดูลโอเพ่นซอร์สเพื่อให้ผู้ใช้ผสมผสานและจับคู่ หากคุณสร้างของคุณเองโปรดแจ้งให้เราทราบและเราจะเพิ่มด้านล่าง
แต่ละ model.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
หัวข้อ /เครื่องบิน/คำสั่ง/ ประเภทข้อความ motorcommand.proto
หัวข้อ /เครื่องบิน/เซ็นเซอร์/IMU
ประเภทข้อความ imu.proto
หัวข้อ /เครื่องบิน/เซ็นเซอร์/ESC
ประเภทข้อความ escsensor.proto
สภาพแวดล้อมของ OpenAI และแบบจำลอง Digital Twin ที่ใช้ในวิทยานิพนธ์ของ Wil Koch สามารถพบได้ใน examples/ ไดเรกทอรี
Wil Koch
ขอบคุณไปที่คนที่ยอดเยี่ยมเหล่านี้ (คีย์อีโมจิ):
Wil Koch - | Michael Friedrich - | Sid Mysore - | Varunag18 | Xabierolaz | swapnil pande - - |
ต้องการเป็นผู้สนับสนุน! เยี่ยมชมการสนับสนุน. MD สำหรับข้อมูลเพิ่มเติมเพื่อเริ่มต้น