دخول Aeronet: إطلاق quadrocopter مستقل في بيئة افتراضية


ربما ، يمكن للجميع الطيران كوادكوبتر الآن ، إذا رغبت في ذلك. ولكن من أجل حل مشكلة التحكم الذاتي ، بحيث لا تحتاج إلى تحريك عصي جهاز التحكم عن بُعد ومراقبة الطائرة باستمرار - في هذا الإعداد ، قد يتطلب الحل الكثير من الموارد: شراء وتجميع وجندى وتكوين وخلع وإسقاط وبعد الهبوط - العودة إلى بداية الدورة.


بتدريس حكام / معلمي Aeronet في مشروعنا ، نواجه الحاجة إلى برمجة مبسطة "الدخول إلى الموضوع" للمركبات غير المأهولة لمعلمي علوم الروبوتات / علوم الكمبيوتر ، والذين لديهم بالفعل مجموعة من المعرفة الأساسية.


هناك طريقة سهلة لتعلم أساسيات برمجة رحلات الطائرات بدون طيار - بيئة محاكاة افتراضية ، مثال تدريجي على الاستخدام الذي سننظر فيه في مقالتنا.


لست بحاجة إلى شراء أي شيء لترقية مهاراتك الأساسية في برمجة الطائرات بدون طيار - ما عليك سوى استخدام محاكي الطائرات بدون طيار jMAVSim لمشروع PX4. PX4 عبارة عن مجموعة برمجيات قوية مفتوحة المصدر مصممة للاستخدام على مجموعة متنوعة من المركبات بدون طيار ، سواء الطيران أو السفر على الأرض. الكود المصدري لبرنامج المشروع موجود على جيثب .


في البداية ، يوصي مؤلفو PX4 Linux Ubuntu LTS كبيئة تطوير. هناك أيضا دعم ماك. هذا العام ، ظهرت بيئة محاكاة وتطوير لـ Windows في Cygwin ، والتي يمكنها تبسيط حياة المؤسسات التعليمية الروسية التي تستخدم Windows في دروس علوم الكمبيوتر.


بعد ذلك ، سننظر في عملية تثبيت وبناء وتشغيل جهاز محاكاة تحت لينكس وتحت ويندوز.


تثبيت وتشغيل jMAVSim على Linux Ubuntu


يوصي مطورو PX4 Linux Ubuntu 16.04 LTS كنظام قياسي. يتيح لك نظام Linux إنشاء حزمة PX4 لكافة الأنظمة المدعومة (أنظمة تشغيل الأجهزة القائمة على NuttX و Qualcomm Snapdragon Flight و Linux وبيئة المحاكاة و ROS).


أولاً ، أضف المستخدم إلى مجموعة Dialout:


sudo usermod -a -G dialout $USER 

دعونا تسجيل الدخول إلى النظام لتصبح التغييرات نافذة المفعول.


يتم تثبيت مجموعة أدوات تطوير Pixhawk / NuttX ، بما في ذلك jmavsim ، تلقائيًا باستخدام البرنامج النصي ubuntu_sim_nuttx.sh . تحتاج إلى تنزيل البرنامج النصي إلى دليل المستخدم وتشغيله باستخدام الأمر


 source ubuntu_sim_nuttx.sh 

يتم الرد على جميع الأسئلة التي طرحها البرنامج النصي بشكل إيجابي.


في نهاية البرنامج النصي ، أعد تشغيل الكمبيوتر.


يبقى علينا تنزيل شفرة المصدر لوحدة التحكم التي تتحكم في الرحلة وإنشائها.


نقوم باستنساخ مستودع برنامج التحكم في الطيران PX4 مع github:


 git clone https://github.com/PX4/Firmware.git 

في مجلد البرنامج الثابت لدينا الآن شفرة المصدر الكاملة التي يتم تنفيذها في وحدة التحكم في الطيران (وفي جهاز محاكاة). في المستقبل ، يمكن أن يكون مفيدًا لغرض الدراسة وإجراء تغييرات عليه. انتقل إلى مجلد البرامج الثابتة المنسوخة في المستودع:


 cd src/Firmware 

نحن تجميع وتشغيل جهاز محاكاة:


 make px4_sitl jmavsim 

عملية التجميع الأولى تستغرق بعض الوقت. بعد الانتهاء بنجاح ، ستظهر وحدة التحكم PX4 على الشاشة:


وحدة التحكم PX4


يمكن إرسال الطائرة بدون طيار عن طريق إدخال الأمر في وحدة التحكم:


 pxh> commander takeoff 

في الطائرة بدون طيار


هبوط طائرة بدون طيار - قيادة commander land ، وقف المحاكاة - CTRL + C أو shutdown الأمر.


تثبيت وتشغيل jMAVSim على ويندوز


ظهرت أدوات PX4 Cygwin في عام 2018. هذه هي الطريقة الأقوى لتجميع / تطوير PX4 لنظام Windows. لتثبيت - قم بتنزيل وتشغيل ملف التثبيت من Github أو Amazon .


بشكل افتراضي ، يتم تثبيت toolchain في المجلد C: \ PX4.


في الخطوة الأخيرة من برنامج التثبيت ، يمكنك تحديد المربع "استنساخ مستودع PX4 وإنشاء المحاكاة وتشغيلها باستخدام jMAVSim" (استنساخ مستودع PX4 وتجميع وتشغيل محاكي jMAVSim).


يتم تشغيل بيئة التطوير في Cygwin باستخدام ملف run-console.bat في دليل التثبيت (بشكل افتراضي ، C: \ PX4).


إذا نسيت تحديد مربع إطلاق jMAVSim أثناء عملية التثبيت - في Cygwin ، يمكنك استنساخ المستودع وتشغيل المحاكي باستخدام الأوامر:


 git clone --recursive -j8 https://github.com/PX4/Firmware.git cd Firmware make px4_sitl jmavsim 

بعد التجميع ، ستظهر وحدة التحكم PX4 ونافذة المحاكاة على الشاشة:


نافذة محاكاة JMAVSim لنظام التشغيل Windows


لم أقم بعد بعرض السماء والأشجار على نظام Windows ، بدلاً من خلفية سوداء ، كما أبلغ مطورو جهاز المحاكاة .


أوامر وحدة التحكم للسيطرة على طائرة بدون طيار هي نفسها: الإقلاع - إقلاع commander takeoff ، الهبوط - commander land ، إيقاف المحاكاة - CTRL + C أو shutdown .


رحلات مع برنامج محطة QGroundControl الأرضية


يتيح لك برنامج QGroundControl إمكانية تكوين الطائرات بدون طيار بالكامل على منصات PX4 أو ArduPilot ، بالإضافة إلى تخطيط وتنفيذ الرحلات الجوية المستقلة في الهواء الطلق عبر GPS.


رمز البرنامج مفتوح بالكامل ، ويعمل على الأنظمة الأساسية Windows و OS X و Linux و iOS و Android. يمكن تنزيل ملف التثبيت الخاص بالنظام الأساسي المطلوب في قسم التنزيل من موقع البرنامج على الويب .


لنظام Windows ، قم بتنزيل هذا الملف وتشغيله.
بعد التثبيت والإطلاق ، إذا كان jMAVSim يعمل بالفعل على جهاز الكمبيوتر الخاص بنا ، فسيقوم البرنامج بالاتصال به تلقائيًا.


يمكنك تشغيل طائرة بدون طيار في رحلة باستخدام زر Fly-Takeoff والهبوط - Land. يمكنك أيضًا إجراء رحلة افتراضية عبر نقاط GPS:


QGroundControl


رحلة طيران مستقلة مع mavros


يمكن التحكم في الطائرة بدون طيار jMAVSim الظاهري باستخدام بروتوكول mavlink ، الموضح في العديد من المقالات (على سبيل المثال ، 1 ، 2 ). لتنفيذ اتصال mavlink ، سوف نستخدم حزمة mavros لنظام ROS (نظام التشغيل الآلي) .


يوصي مطورو PX4 باستخدام ROS Kinetic.


توفر حزمة mavros الاتصال عبر بروتوكول MAVLink بين جهاز كمبيوتر يعمل بنظام ROS (على سبيل المثال ، جهاز ظاهري يعمل بنظام Linux أو Raspberry PI) ووحدة تحكم طيران (حقيقية أو في بيئة محاكاة).


تم تثبيت حزمة mavros مع حزم أخرى أثناء التثبيت الكامل لـ ROS Kinetic .


يتم إطلاق حزمة mavros مع الاتصال بجهاز محاكاة بواسطة أمر roslaunch ، مما يشير إلى عنوان IP ومنفذ الكمبيوتر الذي يعمل عليه جهاز المحاكاة:


 roslaunch mavros px4.launch fcu_url:="udp://@192.168.0.22:14557" 

إذا لم يكن جهاز المحاكاة قيد التشغيل على المضيف حيث يتم تشغيل jMAVSim ، قبل الاتصال بـ mavros ، فستحتاج إلى تمكين رسائل mavlink لإرسالها عبر الشبكة باستخدام param set MAV_BROADCAST 1 في وحدة التحكم jMAVSim. عند تنفيذ الأمر ، يتم عرض عنوان IP الخاص بالمضيف المستخدم لبروتوكول mavlink. يمكن العثور على المنفذ باستخدام أمر mavlink status في وحدة التحكم في المحاكاة:


حالة Mavlink


يجب التحقق من نجاح الاتصال بوحدة التحكم في الرحلة باستخدام الأمر:


 rostopic echo /mavros/state 

في حالة نجاح الاتصال ، ستظهر الرسائل المسماة في وحدة التحكم. نبضات mavlink ، حوالي مرة واحدة في الثانية:


نبضات mavlink


إذا لم تظهر الرسائل / لم يتم تحديثها / الحقل متصل = خطأ - لم يتم تأسيس الاتصال بجهاز التحكم في الرحلة ، ويجب أن تفهم السبب.


في وقت كتابة هذا التقرير ، تحت نظام التشغيل Windows ، وبعد أن تم تعيين الأمر param MAV_BROADCAST 1 ، بدأت الرسائل في وحدة التحكم jMAVSim تظهر في حلقة:


 WARN [mavlink] getting required buffer size failed. 

لكي يعمل جهاز المحاكاة بشكل صحيح ضمن Windows ، يجب إضافة السطر 1029 إلى ملف src / modules / mavlink / mavlink_main.cpp:


 #if defined(__APPLE__) && defined(__MACH__) || defined(__CYGWIN__) 

make px4_sitl jmavsim ترجمة / إعادة تشغيل جهاز محاكاة مع الأمر make px4_sitl jmavsim .


تم الإبلاغ عن هذه المشكلة للمطورين ، وقد يتم إصلاحها في الإصدارات المستقبلية.


بعد اتصال ناجح ، يمكنك تشغيل الطائرة بدون طيار في رحلة مستقلة باستخدام الأوامر التالية لوحدة التحكم في نظام ROS:


  • ننشر 5 مرات في الثانية نقطة الهدف لرحلة الطائرة بدون طيار في وضع OFFBOARD. لكي لا "تسقط" الطائرة بدون طيار من وضع الطيران المستقل OFFBOARD ، من الضروري نشر النقطة المستهدفة طوال الوقت ، عدة مرات في الثانية:

     rostopic pub -r 5 /mavros/setpoint_position/local geometry_msgs/PoseStamped "header: seq: 0 stamp: secs: 0 nsecs: 0 frame_id: '' pose: position: x: 0.0 y: 0.0 z: 5.0 orientation: x: 0.0 y: 0.0 z: 0.0 w: 0.0" 


  • وضعنا الطائرة بدون طيار على وضع OFFBOARD (في جلسة طرفية منفصلة جديدة):

     rosservice call /mavros/set_mode "base_mode: 0 custom_mode: 'OFFBOARD'" 

  • نرسل أمرًا لوضع الطائرة بدون طيار في وضع الطيران (أي ، "التغذية"):

     rosservice call /mavros/cmd/arming "value: true" 

بعد تنفيذ الأمر الأخير ، يجب أن تقلع الطائرة بدون طيار وتحوم على ارتفاع 5 أمتار:


تحلق jmavsim


يمكنك أيضًا تشغيل طائرة بدون طيار باستخدام رمز Python بسيط:


 import rospy from geometry_msgs.msg import PoseStamped from mavros_msgs.srv import CommandBool, SetMode rospy.init_node("offbrd",anonymous=True) rate=rospy.Rate(5) setpoint_pub=rospy.Publisher("/mavros/setpoint_position/local",PoseStamped,queue_size=10) arming_s=rospy.ServiceProxy("/mavros/cmd/arming",CommandBool) set_mode=rospy.ServiceProxy("/mavros/set_mode",SetMode) setpt=PoseStamped() setpt.pose.position.z=5 for i in range (0,10): setpoint_pub.publish(setpt) rate.sleep() set_mode(0,"OFFBOARD") arming_s(True) while (rospy.is_shutdown()==False): setpoint_pub.publish(setpt) rate.sleep() 

يستخدم الرمز أعلاه مكالمة إلى خدمات ROS نفسها كمثال استدعاء سطر الأوامر.


تحتاج إلى نسخ الرمز إلى ملف نصي ، على سبيل المثال ، fly_jmavsim.py ، وتشغيله من سطر الأوامر باستخدام python fly_jmavsim.py .


في عملية تصحيح هذا المثال ، صادفت ميزة لمحاكي jMAVSim - فهي تحتاج إلى معالج قوي للتشغيل العادي. على جهاز Linux الظاهري ، تمكن من حساب 10 FPS فقط ، وتعطل مباشرة بعد الإقلاع. على الكمبيوتر المحمول ، بينما كنت أكتب المقال ، فقد أيضًا السيطرة / التعطل بشكل دوري. ساعدت قوة الكمبيوتر المحمول - لأن عند تشغيل البطارية ، يتم تنشيط وضع توفير الطاقة ، مما يقلل من أداء المعالج ، مما يؤثر على جهاز المحاكاة مباشرةً.


استنادًا إلى الأمثلة المقدمة ، يمكن لأولئك الذين يرغبون في تطوير برامج طيران مستقلة (في مربع أو في دائرة أو في مسار تعسفي ، إلخ). يمكن أن يكون أداء مثل هذه التمارين مفيدًا في التحضير لبرمجة بعثات مستقلة على كوادوكوبتر حقيقي.


نتمنى لكم جميع الرحلات الناجحة!


المراجع


نظام تشغيل الروبوت (ROS)
الطيار الآلي PX4

Source: https://habr.com/ru/post/ar434220/


All Articles