GymFC هو إطار ضبط التحكم في الطيران مع التركيز في التحكم في الموقف. تم تقديم GymFC لأول مرة في المخطوطة "التعلم التعزيز للسيطرة على موقف الطائرات بدون طيار" تم استخدام محاكاة لتوليف وحدات تحكم المواقف العصبية التي تجاوزت أداء وحدة تحكم PID التقليدية. نظرًا لأن الإصدار الأولي للمشاريع ، فقد نضجت لتصبح إطارًا وحدات لضبط أنظمة التحكم في الطيران ، ليس فقط لتجميع وحدات التحكم في الطيران العصبي ولكن أيضًا ضبط وحدات التحكم التقليدية أيضًا. GymFC هي الطريقة الأساسية لتطوير وحدات التحكم لاستخدامها في أول شبكة Neuroflight 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 مع مراقبة ، يجب تثبيتها من المصدر. لسبب استخدام Gazebo مع Dart انظر هذا الفيديو. أسهل طريقة لتثبيت التبعيات هي برنامج install_dependencies.sh
المقدم. بشكل افتراضي ، سيتم make
مع وظيفة واحدة. يمكنك تجاوز أعلام make
مع متغير بيئة MAKE_FLAGS
. بناء مراقبة من المصدر كثيف الموارد للغاية. إذا كان لديك ذاكرة كافية زيادة عدد الوظائف لتشغيلها بالتوازي. على سبيل المثال لتشغيل أربع وظائف بالتوازي مع التنفيذ ،
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
ملاحظة ، قد يستغرق هذا البرنامج النصي أكثر من ساعة للتنفيذ. إذا فشل البناء الخاص بك ، تحقق من dmesg
، لكن السبب الأكثر شيوعًا هو الإخفاقات خارج الذاكرة.
(اختياري) يُقترح إعداد بيئة افتراضية لتثبيت GymFC فيها. من مشروع ROUT RUN ، python3 -m venv env
. سيؤدي ذلك إلى خلق بيئة تدعى env
والتي سيتم تجاهلها بواسطة Git. لتمكين البيئة الافتراضية ، source env/bin/activate
وإلغاء تنشيط ، deactivate
.
تثبيت Gymfc ،
pip3 install .
سيؤدي ذلك إلى تثبيت تبعيات Python وأيضًا إنشاء ملحقات ورسائل Gazebo.
إذا كنت تخطط لتعديل رمز GymFC ، فستحتاج إلى التثبيت في وضع التحرير/التطوير.
pip3 install -e .
سيتعين عليك أيضًا تثبيت ملحقات Gazebo يدويًا من خلال التنفيذ ،
gymfc/envs/assets/gazebo/plugins/build_plugin.sh
gymfc/gymfc.ini
كنت تنحرف عن تعليمات التثبيت هذه (على سبيل المثال ، تثبيت Gazebo في موقع مختلف بخلاف install_dependencies.sh
) ، فقد تحتاج إلى تغيير موقع setup.sh
Gazbo.
يتطلب GymFC نموذج طائرة (توأم رقمي) لتشغيله. يتوفر طراز Quadcopter NF1 Racing في 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 التجريبي في docker/demo
يتجاوز استخدام GymFC. تم اختباره على MacOS 10.14.3 و Ubuntu 18.04 ، ولكن لم يتم التحقق من عميل Gazebo للعمل لدى Ubuntu. يمكن أن تساعد صورة Docker هذه في ضمان قيامك بتشغيل بيئة مدعومة لـ GymFC.
لنظام التشغيل Mac ، قم بتثبيت Docker لـ Mac و Xquartz على نظامك. لأوبونتو ، قم بتثبيت Docker لأوبونتو.
بناء صورة Docker
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 الخاص بك و إلى حيث قمت باستنساخ الريبو الفردي. لاحظ خاصًا أن معلمات 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
على المكونات الإضافية الثنائية المصممة. ستضيف GAMFC ، في وقت التشغيل ، دليل البناء إلى مسار Gazebo Plugin حتى يمكن العثور عليه وتحميله.
ملحوظة! إذا كنت تستخدم الإضافات الخارجية ، قم بإنشاء روابط ناعمة لكل ملف. لذا في دليل الإنشاء.
المزيد قريبا!
لزيادة المرونة وتوفير إطار ضبط عالمي ، يجب على المستخدم توفير أربع وحدات: وحدة تحكم في الطيران وموالف التحكم في الطيران وواجهة البيئة والتوأم الرقمي. (ملاحظة: بالنسبة إلى وحدات التحكم في النقل العصبي عادةً ما تكون وحدة تحكم الطيران والمواسئ واحدة في نفس الوقت ، على سبيل المثال ، Openai BaseLines) سيؤدي ذلك إلى توسيع أبحاث التحكم في الطيران التي يمكن القيام بها مع GymFC. على سبيل المثال ، يفتح هذا إمكانيات ضبط مكاسب PID باستخدام استراتيجيات التحسين مثل الغاز و PSO. الهدف من ذلك هو توفير مجموعة من الوحدات النمطية مفتوحة المصدر للمستخدمين لخلط ومطابقة. إذا كنت قد أنشأت بنفسك ، فيرجى إخبارنا وسنضيفه أدناه.
يجب أن يعلن كل 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 ونماذج التوأم الرقمية المستخدمة في أطروحة Wil Koch في examples/
الدليل.
ويل كوخ
شكراً لهؤلاء الأشخاص الرائعين (مفتاح الرموز التعبيرية):
ويل كوخ ؟ | مايكل فريدريش ؟ | سيد ميسور ؟ | varunag18 | Xabierolaz | swapnil pande ؟ ؟ |
تريد أن تصبح مساهما؟! تفضل بزيارة المساهمة. md لمزيد من المعلومات للبدء.