قم بتثبيت ROS على Raspberry Pi

سبق لي أن كتبت في وقت سابق عن تثبيت rosserial_arduino لتفاعل متحكم Arduino مع منصة ROS الروبوتية في مقال سابق. rosserial_arduino عبارة عن حزمة من مكدس rosserial مصممة لمنصة ROS و "تحول" لوحة Arduino إلى عقدة ROS مستقلة يمكن أن تتفاعل معها مكونات النظام الأخرى. عند استخدام Arduino في المشاريع الروبوتية ، هناك قيد واحد مهم: لا يمكن استخدام Arduino كعقدة حوسبة كاملة يمكنها التعامل مع جميع العمليات المطلوبة للعمل العادي للروبوت. على سبيل المثال ، لا يمكنك تشغيل البرامج النصية OpenCV عليها لمهام رؤية الكمبيوتر. في هذه المقالة ، أود أن أتحدث عن تجربتي في تثبيت نظام ROS وربط Arduino بكمبيوتر صغير Raspberry Pi باستخدام حزمة rosserial_arduino المألوفة بالفعل.

صورة


التحفيز


بعد التعرف على منصة rosserial_arduino ، كان لدي سؤال: هل يمكنني بطريقة ما استخدام Arduino مع كمبيوتر صغير أكثر قوة بطريقة تجعل الروبوت أكثر استقلالية عن الكمبيوتر المحمول.
ثم أتيحت لي فكرة تجربة ROS على جهاز كمبيوتر صغير Raspberry Pi. Raspberry Pi هو كمبيوتر صغير مستقل على السبورة. يحتوي على رقاقة وحدة المعالجة المركزية وشريحة الرسومات وفتحة بطاقة SD ومدخل إيثرنت والعديد من واجهات USB ومخرج فيديو HDMI لتوصيل الشاشة. يمكنك توصيل الماوس ولوحة المفاتيح ومحرك الأقراص الصلبة الخارجي بمداخل USB.
يعد مزيج Raspberry Pi و Arduino واعدًا جدًا وقد تم استخدامه بشكل متكرر في المشاريع الروبوتية.
يسمح لك Raspberry Pi أيضًا بتوصيل كاميرا (كاميرا ويب أو كاميرا RPi Board خاصة). سقط روبوت بسيط ذو عجلات على لوحة Arduino Uno معدلة في يدي قبل عام. الآن ، بين يدي كان Raspberry Pi Model B.

صورة

تثبيت نظام التشغيل على Raspberry Pi


تحتاج أولاً إلى تثبيت توزيع Linux على "التوت". أسهل طريقة للقيام بذلك هي باستخدام مدير تثبيت NOOBS OS. يمكن قراءة كيفية القيام بذلك في هذا الدليل على بوابة Raspberry Pi الرسمية .
لقد اخترت تثبيت Raspbian ، وهو توزيع دبيان معدل مصمم خصيصًا لـ Raspberry.
ملاحظة: عند توصيل شاشة ، غالبًا ما تكون هناك مشكلات في عرض الصورة ، على وجه الخصوص ، يحدث هذا مع الشاشات القديمة التي لا تحتوي على إدخال HDMI. هنا يأتي ملف config.txt لمساعدتنا - ملف تكوين Raspberry لإعدادات الشاشة. في بعض الحالات ، يوجد بالفعل في أرشيف صور النظام (Raspbian) ، في حالة NOOBS يجب إنشاؤه في جذر بطاقة SD.
أدخل الأسطر التالية في الملف:

# For more options and information see
# http://www.raspberrypi.org/documentation/configuration/config-txt.md
# Some settings may impact device functionality. See link above for details
 
# uncomment if you get no picture on HDMI for a default "safe" mode
hdmi_safe=1
 
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1
 
# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
 
# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720
 
# uncomment if hdmi display is not detected and composite is being output
hdmi_force_hotplug=1
 
# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
 
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2
 
# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
config_hdmi_boost=4
 
# uncomment for composite PAL
#sdtv_mode=2
 
#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800


في هذه الحالة ، الخطوط المهمة هي:

hdmi_safe=1
hdmi_force_hotplug=1
config_hdmi_boost=4


في حالتي ، جعلت هذه الإعدادات من الممكن الحصول على الصورة الصحيحة على شاشة بإدخال VGA.

تكوين الوصول البعيد إلى Raspberry Pi


يمكنك الاتصال بلوحة Raspberry Pi عبر الشبكة عبر SSH. للقيام بذلك ، يجب توصيل Raspberry Pi بالشبكة إما من خلال كابل إيثرنت (يوجد إدخال خاص على اللوحة لهذا) أو عبر محول Wi-Fi متصل بمنفذ USB. عندما تقوم بتوصيل كابل إيثرنت ، فإن Raspberry يتلقى تلقائيًا عنوان IP على الشبكة ويصبح متاحًا على الفور.
إذا كنت تستخدم محولًا ، فأنت بحاجة إلى تنفيذ عدد من الإجراءات البسيطة.
استخدمت محول TPLINK Wi-Fi التالي: قم

صورة

بتوصيل المحول بمنفذ USB وتحقق مما إذا تم الكشف عن الجهاز في النظام بواسطة الأمر

$ iwconfig

الآن نقوم بمسح المساحة للبحث عن الشبكات اللاسلكية المتاحة:

$ sudo iwlist wlan0 scan

يشير حقل ESSID في إخراج الأمر إلى اسم نقطة الوصول.
اتصل الآن بنقطة الوصول لتشفير WPA باستخدام الأداة المساعدة wpa_supplicant.
باستخدام الأداة المساعدة wpa_passphrase ، والتي تعد جزءًا من حزمة wpa_supplicant ، نقوم بإنشاء كلمة مرور بناءً على مفتاح الوصول:

$ wpa_passphrase <hotspot_name> <hotspot_access_key>

حيث hotspot_name و hotspot_access_key هما اسم نقطة الوصول ومفتاح الوصول على التوالي.
تقوم الأداة المساعدة بإرجاع سلسلة psk التي تم إنشاؤها.
بعد ذلك ، يتم إدراج كتلة الشبكة بالكامل ، التي تحتوي على شبكة ssid وخط psk ، في نهاية ملف التكوين /etc/wpa_supplicant/wpa_supplicant.conf وحفظها. أخيرًا ، نعيد تشغيل Raspberry Pi ونتحقق من اتصال الشبكة.
للاتصال عبر SSH في الطرفية على جهاز الكمبيوتر ، تحتاج إلى تشغيل الأمر:

$ ssh pi@<raspi_ip>

حيث <raspi_ip> هو عنوان IP raspberry ، والذي يمكن التعرف عليه بواسطة الأمر ifconfig الذي يتم تنفيذه مباشرة في جهاز raspberry الطرفي.
للتواصل عبر SSH مع إمكانية تشغيل التطبيقات الرسومية ، استخدم الأمر:

$ ssh -X pi@<raspi_ip>

يمكنك الاتصال بـ "Malinka" في وضع سطح المكتب البعيد باستخدام برنامج Virtual Network Computing (VNC). تتم الإدارة عن طريق نقل ضغطات المفاتيح على لوحة المفاتيح وحركات الماوس من كمبيوتر إلى آخر وترحيل محتويات الشاشة عبر شبكة كمبيوتر. نظام VNC مستقل عن المنصة.
أولاً ، قم بتثبيت خادم VNC على Raspberry Pi باستخدام الأمر في الطرفية:

$ sudo apt-get install tightvncserver

بعد اكتمال التثبيت ، قم بتشغيل الأمر:

$ vncserver :1 -geometry 1280x800 -depth 16

سيبدأ هذا الأمر خادم VNC. في هذه الحالة ، هذا يعني أن جلسة X افتراضية قيد التشغيل (عرض تقديمي افتراضي لسطح المكتب Raspberry Pi). الآن ، بعد بدء تشغيل عميل VNC والاتصال به ، ستكون متصلاً بسطح المكتب الافتراضي هذا.
المعلمة: 1 يحدد رقم المنفذ الذي سيتم تشغيل عملية VNC عليه. تعيّن المعلمة الهندسية دقة سطح المكتب الظاهري (في هذه الحالة ، الحجم). تحدد معلمة العمق عمق ألوان شاشة سطح المكتب بالبتات (8 و 16 و 24 ، والافتراضي هو 16).
في البداية ، سيطلب منك خادم VNC إدخال كلمة مرور ، والتي سيتم طلبها عند الاتصال بسطح المكتب البعيد.
الآن قم بتثبيت عميل VNC على جهاز كمبيوتر سطح المكتب:

$ sudo apt-get install xtightvncviewer

نحن على استعداد للاتصال بسطح المكتب البعيد Malinka:

$ vncviewer <raspi_ip>:1

وأدخل كلمة المرور.
تفتح نافذة بصورة سطح مكتب مشابهة لهذه: من

صورة

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

ربط اردوينو بتوت العليق


يمكن توصيل Arduino بجهاز Raspberry Pi بسهولة مثل جهاز الكمبيوتر العادي. للبدء ، قم بتثبيت Arduino IDE على Raspberry Pi:

$ sudo apt-get update
$ sudo apt-get install arduino

قم بتشغيل أمر Arduino IDE:

$ arduino

يتصل Arduino IDE بجهاز Raspberry Pi عبر كابل برمجة USB الخاص به. يتطلب مثل هذا الاتصال فصل وحدة التحكم التسلسلية. بشكل افتراضي ، يقوم Raspberry Pi بتكوين المنفذ التسلسلي (GPIO14-GPIO15) لتوفير معلومات التمهيد. كما يسمح لك بتسجيل الدخول إلى Raspberry Pi من خلال جهاز متصل. لتتمكن من برمجة Arduino ، تحتاج إلى تعطيل هذا الخيار بشكل افتراضي.
لتعطيل المصادقة ، قم بتحرير ملف نظام inittab:

$ sudo nano /etc/inittab


ابحث عن الخط:

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

التعليق عليها:

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

بعد ذلك ، احفظ وأغلق الملف.
عند التشغيل ، يرسل Raspberry Pi رسائل التصحيح إلى المنفذ التسلسلي. قد يكون هذا مفيدًا في بعض الحالات ، ولكننا نحتاج الآن إلى تعطيل هذه الوظيفة. للقيام بذلك ، قم بتحرير ملف نظام cmdline.txt:

$ sudo nano /boot/cmdline.txt

ابحث عن الخط:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

وإزالة كتلة معلمة وحدة التحكم للحصول على خط مثل هذا:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

أحفظ وأغلق الملف.
لكي يتم تطبيق التغييرات من قبل النظام ، تحتاج إلى إعادة تشغيل Raspberry Pi:

$ sudo reboot

يمكنك الآن توصيل لوحة Arduino بمنفذ USB على Raspberry Pi ، وتهيئة Arduino IDE لنموذج لوحة Arduino وتحميل الرسم عليه.

تعيين ROS و rosserial_arduino


اخترت تثبيت ROS Indigo. يتم وصف تعليمات تثبيت ROS Indigo بالتفصيل في الصفحة الرسمية .
أوصي بتثبيت خيار تثبيت ROS-Comm. من تجربتي الخاصة ، يمكنني القول أن تثبيت خيار سطح المكتب يمكن أن يستغرق وقتًا طويلاً جدًا من أجل الظهر.
بعد تثبيت ROS وحل جميع التبعيات باستخدام أداة rosdep ، نقوم ببساطة بتجميع catkin_workspace:

$ catkin_make
$ catkin_make install


تشغيل رسومات rosserial_arduino على Raspberry Pi


الآن لدينا rosserial_arduino مثبت ويمكننا تشغيله:

$ roslaunch rosserial_python serial_node.py /de/ttyACM0

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

$ catkin_make install

تعليق! عند تحميل الرسومات في Arduino IDE ، قد يحدث خطأ "خطأ فادح: سلسلة: لا يوجد مثل هذا الملف أو تجميع الدليل". هذا يعني أن لدينا أنواع رسائل ROS في ros_lib ، ولكن يجب أيضًا تجميعها في الأنواع المقابلة لـ Arduino. تحتاج إلى تجميعها بهذه الطريقة:

$ cd <sketchbook>/libraries
$ rm -rf ros_lib
$ rosrun rosserial_python make_libraries.py .

يمكنك الآن العمل مع rosserial_arduino على Raspberry Pi بالطريقة نفسها المتبعة على جهاز الكمبيوتر العادي: إنشاء العقد ، والاشتراك في المواضيع ، والنشر في المواضيع ، وما إلى ذلك.
يمكنك توصيل كاميرا RPi Board بـ Raspberry Pi واستخدام حزمة cv_bridge ROS (واجهة ROS للتفاعل مع OpenCV ، يمكن العثور على وصف هنا ) لأداء مهام رؤية الكمبيوتر.
بالمناسبة ، إن الروبوت الخاص بي مسلح بالكامل:

صورة

صورة

استنتاج


آمل أن تكون هذه المقالة مدخلاً جيدًا لك لبدء العمل مع ROS على Raspberry Pi وسيكون لديك أفكارك الخاصة لاستخدام Raspberry Pi بالتعاون مع Arduino أو غيرها من وحدات التحكم الدقيقة من هذا النوع. أتمنى لك حظًا سعيدًا في تجاربك ومشاريعك ، وآمل أن أشارك قريبًا أفكاري الجديدة في المقالات التالية!

ملاحظة: بعض الإرشادات مأخوذة من الكتاب بواسطة V. Petin ، "إلكترونيات. الحواسيب الصغيرة التوت التوت. دليل عملي. "

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


All Articles