التصميم:

يعتمد مفهوم تصميم مشروعنا على استخدام تقنية SLAM على ROS بشكل رئيسي. لتحقيق هذه المفاهيم، نحتاج إلى نظام تشغيل وحاسوب محمول (وحدة معالجة) على هيكل سيارة التحكم عن بعد لمنحها ميزة الحركة والتحكم المستقل. كما استخدمنا كاميرا RGB-D وماسح LIDAR لجمع البيانات وإنشاء خرائط ثنائية وثلاثية الأبعاد للبيئة وتحديد موقع السيارة للتحكم عن بعد، مما يجعلهما اختيارًا مناسبًا لهذه الحالة. بعد جمع البيانات ومعالجتها، يقوم تطبيق التحكم بتحريك السيارة من خلال نظام مدمج أو نظام حركة.

القسم ٢.١: استعراض التصميم

يتكون تصميم النموذج الأولي الذي اخترناه خلال البحث من العناصر التالية:

  • جمع البيانات.
  • وحدة المعالجة.
  • نظام مدمج أو نظام حركة.
  • بيئة ROS.

٢.١.١ جمع البيانات:

قمنا بإختيار جهاز RPLIDAR A1 وكاميرا RGB-D من نوع Xbox360 Kinect لجمع البيانات من البيئة.

٢.١.١.١ RPLIDAR A1:

يعتمد على مبدأ تحديد المسافة بالليزر ويعمل بشكل دائري لأداء مسح ليزري بزاوية 360 درجة لمحيطه ومن ثم إنشاء خريطة مخططة للبيئة التي حوله. يتمتع بمعدل مسح يصل إلى 5.5 هرتز، ويوفر مدة عينة تبلغ 0.125 مللي ثانية، ونطاق زاوية 360 درجة، ومدى يتراوح بين 0.15 متر إلى 6 أمتار. يُستخدم لبناء خرائط ثنائية الأبعاد بنطاق زاوية 360 درجة في البيئة الداخلية.

الصورة ١: RPLIADAR A1

تجربة:

بعد إعداد المشروع على سيارة التحكم عن بعد التي نشير إليها في القسم ٢.١، قم بتوصيل جهاز RPLIDAR بجهاز Raspberry Pi وتشغيل هذا الأمر:

الصورة ٢: النتيجة تعرض خريطة ثنائية الأبعاد مع مسح ليزري على برنامج RVIZ للغرفة.

هذه الصورة تظهر نقاط المسح بالليزر التي تم جمعها من RPLIDAR على التصور المرئي لـ RVIZ لتصور حالة سيارة التحكم عن بعد.

٢.١.١.٢ Xbox360 Kinect RGB-D:

كاميرا ملائمة بالنسبة لمتطلبات المشروع، حيث تتمتع بنطاق يتراوح بين 50 سم إلى 5 أمتار، وزاوية رؤية بمقدار 57 درجة أفقيًا و 43 درجة عموديًا، ودقة تصوير عمق 16 بت بحجم 320×240 بكسل بمعدل 30 إطارًا في الثانية لكل من الصورة بالألوان والعمق، ومنفذ USB مع مشع للأشعة تحت الحمراء ومستشعر عمق بالأشعة تحت الحمراء، يمنح Kinect قدرات قياس العمق. وهو مناسب للبيئة الداخلية، ومتوافق مع نظام ROS. سيحتاج الجهاز العتادي للكاميرا إلى توصيلة طاقة بجهد 12 فولت مع محول منفذ USB لتوصيله بجهاز كمبيوتر.

الصورة ٣: Xbox360 Kinect RGB-D camera

تجربة:
قم بتوصيل كابل USB لـ Kinect بجهاز Raspberry Pi وتشغيل هذا الأمر:

هذا الأمر يقوم بتشغيل launch ROS لتشغيل كاميرا Kinect على جهاز Raspberry Pi.

الصورة ٤: النتيجة تظهر خريطة ثنائية الأبعاد مع PointCloud2 على برنامج RVIZ.

هذه الصورة تُظهر سحابة النقاط وصورة العمق للغرفة وتصورها على برنامج RVIZ، والتي تُستخدم من قبل تطبيقات مختلفة في سيارة التحكم عن بعد.

٢.١.٢ وحدة المعالجة

تعتمد وحدة المعالجة على جهاز Raspberry Pi 4B وهو كمبيوتر لوحي صغير يعمل بنظام Linux ويمكنه تشغيل مجموعة متنوعة من أنظمة التشغيل المبنية على Linux، بما في ذلك Raspberry Pi OS وUbuntu Mate وSnappy Ubuntu Core ومراكز وسائط مبنية على Kodi مثل OSMC وLibreElec، والعديد من الأنظمة الأخرى.

يحتوي على معالج ARM-Cortex A72 بنواة 64 بت يعمل بسرعة 1.5 جيجاهرتز، و 2 جيجابايت من الذاكرة العشوائية، وشبكة LAN اللاسلكية 802.11 b/g/n/ac، و 2 منافذ USB2 و 2 منافذ USB3، ودعم لدبابيس GPIO.
على الرغم من وجود خيارات أفضل مثل Nvidia Jetson nano، إلا أنه بسبب عدم توفره، تم استخدام Raspberry Pi 4B بدلاً من Nvidia Jetson nano لتثبيت توزيعة ROS noetic على نظام التشغيل Ubuntu 20.04.

الصورة ٥: : Raspberry Pi 4B

٢.١.٣ نظام الحركة:

بدون كهرباء لن يكون له فائدة كبيرة، وأسهل طريقة لجعله يتحرك على الأقل هي تطبيق الجهد المناسب للمحركات ذات التيار المباشر. جزء من السبب في عدم القدرة على توصيل المحرك مباشرة بجهاز Raspberry Pi أو Arduino هو أن المحركات تتطلب جهدًا نسبيًا عاليًا وتيارًا عاليًا بالمقارنة مع ما يمكن التعامل معه من خلال المنافذ الموجودة على هذه اللوحات. بدلاً من ذلك، نستخدم مُشغل محرك ليأخذ إشارة ذات جهد منخفض وتيار منخفض من المُتحكم ويستخدم مصدر الطاقة لتبسيطه وإنشاء جهدًا أعلى وتيارًا أعلى لتشغيل المحركات. تُسمى هذه الإشارة بالجهد بالتعبير عن التحكم بالعرض للأمام والخلف.
فيما يلي احتياجات مُشغل المحرك لتوليد PWM وضبط الإشارات بما يكفي. المُشغل الموضح في الصورة ٦، يُعطي ردود فعل إلى مُشغل المحرك مع معلومات السرعة والموضع.

الصورة ٦: نظام الحركة.

إطار سيارة التحكم عن بعد يحتوي على محرك DC (بدون مُشفر) ومحرك خدمة (Servo motor) متصلين بمُشغل محرك L298N كما هو موضح في الشكل رقم ٦ للتحكم في سرعة واتجاه دوران المحركين. بالإضافة إلى ذلك، هناك تقنية PWM التي أشرنا إليها سابقًا للتحكم في السرعة، وجسر H-Bridge للتحكم في اتجاه الدوران.

  • PWM: يمكن التحكم في محرك DC عن طريق تغيير القيمة المتوسطة للجهد المُدخل والتي تُشار إليها بنسبة الواجب. كلما زادت نسبة الواجب، زاد الجهد المُطبق على المحرك DC وهكذا. يُوضح الشكل أدناه نسبة الواجب.
الصورة ٧: تقنية PWM مع مختلف نسب الواجب والجهود المتوسطة.
  • جسر H-Bridge: يمكن التحكم في اتجاه دوران محرك DC عن طريق تغيير قطبية الجهد المُطبق عليه. إغلاق مفتاحين محددين في نفس الوقت يعكس قطبية الجهد المطبق على المحرك. وهذا يتسبب في تغيير اتجاه دوران المحرك.
الصورة ٨: H-Bridge circuit
  • Arduino UNO: هو لوحة تحكم مصغرة تعتمد على ATmega328P. يحتوي على 14 منافذ للإدخال/الإخراج الرقمية (يمكن استخدام 6 منها كمخرجات PWM)، و 6 مداخل تناظرية، ومُذبذب 16 ميجاهرتز، واتصال USB بالكمبيوتر أو مدخل طاقة بجهد 7-12 فولت، وزر إعادة التعيين. علاوة على ذلك، يتم توصيل Arduino UNO بجهاز Raspberry Pi باستخدام كابل USB، وبروتوكول rosserial للسماح بتدفق الرسائل داخل وخارج Arduino.
الصورة ٩: توصيل الاسلاك في نظام الحركة.

٢.١.٤ بيئة ROS:

التنقل هو حركة الروبوت نحو وجهة معينة. من المهم أن تجد المسار المُحسَّن بين الخيارات المختلفة للمسار، وتجنب العوائق مثل الجدران. للتنقل باستخدام الليزر لتحديد الموقع وتجنب العوائق بواسطة كاميرا Kinect، يتعين عليك إنشاء خريطة للبيئة التي تريد التحرك فيها.

٢.١.٤.١ نظام الخرائط:

يمنح نظام الخرائط للروبوت تقديرًا مثاليًا للموقع، وسلسلة من القياسات لتحديد الخريطة للبيئة. تمكن الخريطة الروبوت من تحديد موقعه بنفسه وتلقي الأوامر للتنقل إلى موقع محدد داخل الخريطة. للقيام بذلك، نحتاج إلى بعض المعلومات مثل الأودومتريا، وماسح الليزر، وسحابة النقاط. كما أن هناك العديد من أنواع الخرائط التي يمكننا استخدامها مع ROS مثل Gmapping و Hector Mapping و RTAB-Map:

  • Gmapping: هو حزمة توفر SLAM (Simultaneous Localization and Mapping) بناءً على الليزر. يمكنك إنشاء خريطة شبكية ثنائية الأبعاد (مثل خريطة مخطط الطابق في المبنى) من بيانات الليزر والمواقع (الأودومتر) التي يجمعها روبوت متنقل.
  • Hector Mapping: هو نهج SLAM يمكن استخدامه بدون أودومتر. يستفيد من معدل التحديث العالي لماسح الليزر الحديث ويوفر تقديرات موضعية ثنائية الأبعاد. تم استخدام النظام بنجاح على الروبوتات البرية غير المأهولة، والمركبات السطحية غير المأهولة، وأجهزة الرسم اليدوية، والبيانات المسجلة من طائرات الطراز الرباعي.
  • RTAB-Map: هو نهج SLAM مستند إلى الرسم البياني للأشعة RGB-D والاستيريو والليزر يعتمد على مُدرّج إغلاق الحلقة التكراري بناءً على المظهر. يستخدم جهاز كشف إغلاق الحلقة نهج “كيس الكلمات” لتحديد مدى احتمال وجود صورة جديدة قادمة من موقع سابق أم موقع جديد. علاوة على ذلك، يمكن استخدامه بمفرده مع كاميرا Kinect المحمولة، أو كاميرا استيريو، أو ماسح ضوئي ثلاثي الأبعاد لرسم الخرائط ذات الدرجات الست للحرية، أو على روبوت مجهز بجهاز قياس المسافة بالليزر لرسم الخرائط ذات الدرجات الثلاث للحرية.
    لاحظ أن الخريطة المناسبة هي RTAB-Map، حيث يستخدم كاميرا RGB-D وماسح الليزر.
٢.١.٤.٢ URDF:

قد تكون هناك العديد من المكونات البرمجية المختلفة التي تحتاج إلى معرفة الخصائص الفيزيائية للروبوت. للحفاظ على التناسق والبساطة، من الجيد أن تحتفظ بكل هذه المعلومات في موقع واحد مشترك، حيث يمكن لأي كود الرجوع إليها. في ROS، يُطلق على هذا الموقع وصف الروبوت وتُخزن المعلومات في ملف URDF (تنسيق الوصف الموحد للروبوت) .
بالإضافة إلى ذلك، يصف ملف URDF الروبوت كشجرة من الروابط، التي تكون متصلة بمفاصل. تمثل الروابط المكونات الفيزيائية للروبوت، وتمثل المفاصل كيفية تحرك رابط واحد بالنسبة لرابط آخر، وبذلك يُعرِّف بشكل فعال موقع الروابط في الفضاء.
يتم تمرير هذا إلى عقدة robot_state_publisher التي تجعل البيانات متاحة على موضوع /robot_description، وتبث التحويلات المناسبة. إذا كانت هناك أي مفاصل تتحرك، فإن robot_state_publisher سيتوقع رؤية القيم المدخلة المنشورة على موضوع /joint_states، وأثناء إجراء الاختبارات الأولية يمكننا استخدام joint_state_publisher_gui لتزييف تلك القيم.

الصورة ١٠: العقد المنشورة لتصور وصف الروبوت في محاكاة Rviz.

القسم ٢: المواصفات الوظيفية

٢.٢.١ مستوى التصميم ١:

Battery
المدخلاتPower supply.
المخرجات-Processing Unit.
-RGB-D Camera.
-LIDAR system.
-Movement system.
الوظيفةتوفير الطاقة الكافية لجميع الوحدات.
Localization and Mapping system
المدخلات-Battery.
-LIDAR system.
المخرجات– Movement system.
الوظيفةتحديد الموقع وإنشاء خريطة من خلال جمع البيانات من الـ LIDAR.
Identification system
المدخلات-RGB-D Camera system.
المخرجات-Movement system.
الوظيفةاكتشاف العقبات.
Processing Unit
المدخلات-RGB-D camera system.
-LIDAR system.
-Battery.
المخرجات-Movement system.
الوظيفةجمع البيانات ومعالجتها وإعطاء الأوامر لنظام الحركة.
Movement system
المدخلات– Processing Unit.
المخرجات-car movement.
الوظيفةالحصول على الأوامر من وحدة المعالجة وإعطاء إجراء للسيارة.

٢.٢.٢ مخطط سير المشروع:

العمليةالوصف
Start the Car.قم بتشغيل السيارة.
Set a target Point.تحديد الموقع والتحرك الى المنطقة المحدد.
Localization and Mapping.البحث عن الموقع الحالي ورسم خرائط للبيئة بواسطة مستشعر LIDAR لتحديد العوائق.
Follow the path to the target point.تقدير المسار إلى النقطة المستهدفة باستخدام الخوارزميات بكفاءة.
Avoid the obstacle.تجنب العائق عن طريق الذهاب إلى اليسار أو اليمين، إلى الأمام، أو إلى الخلف.
Move the car.المضي قدما حتى الوصول إلى النقطة المستهدفة.
Stop the car.إيقاف تشغيل السيارة بعد الوصول إلى النقطة المستهدفة.

Previous post مشروع سيارة ذاتية القيادة: الفصل الأول
Next post مشروع سيارة ذاتية القيادة: الفصل الثالث