مساء الخير أيها القراء! في المقالات الأخيرة ، تحدثت عن طرق SLAM الشعبية وطرق القياس البصري التي تدعم في ROS. في هذا المقال ، سأحيد قليلاً عن الموضوع وأتحدث عن إعداد والعمل مع ROS على
الكمبيوتر الصغير NVIDIA Jetson TK1 . بعد تثبيت كل ما نحتاجه ، سنقوم بالاتصال
وتجربة الكاميرا الاستريو ZED ستريولابس . لمن المثير للاهتمام أسأل تحت القات.
حول NVIDIA Jetson
للبدء ، ضع في اعتبارك منصة NVIDIA Jetson TK1. NVIDIA Jetson TK1 هو كمبيوتر صغير يعمل بتقنية NVIDIA يعتمد على
Tegra K1 SOC (CPU + GPU على شريحة واحدة مع دعم CUDA). تفتخر NVIDIA Jetson بمعالج ARM Cortex-A15 رباعي النواة بتردد 2.3 جيجا هرتز ، وتحتوي على نفس مكونات Raspberry Pi (HDMI و USB 2.0 و 3.0 و Ethernet) ، بالإضافة إلى الوحدات الخاصة بالكمبيوتر: SATA و mini-PCIe . يتميز المعالج المحمول
Tegra K1 بخصائص وبنية مشابهة جدًا لوحدات معالجة الرسومات المكتبية ، مما يسمح له بتحمل الأحمال الثقيلة بأقل استهلاك للطاقة. كما هو مذكور في
الصفحة الرسمية ، يسمح لك المعالج بتشغيل أي مهام رسومية كثيفة الموارد على اللوحة ، مثل التعرف على الوجوه ، والواقع المعزز ، وحتى مهام رؤية الكمبيوتر للمركبات غير المأهولة. يمكنك قراءة المزيد عن جميع ميزات النظام الأساسي
هنا .
يتم تمثيل الذاكرة الداخلية على NVIDIA Jetson TK1 بوحدة eMMC سعة 16 جيجابايت. بشكل افتراضي ، تأتي NVIDIA Jetson TK1 محملة مسبقًا بنظام التشغيل Ubuntu 14.04.
يتم استخدام محول 12 فولت AC / DC لتشغيل الكمبيوتر المصغر.

كاميرا ستيريو ZED
كاميرا ZED الستيريو عبارة عن كاميرا ذات عمق سلبي ، تتكون من كاميرتين RGB عاديتين ، على بعد 12 سم من بعضهما البعض ، مع رؤية تصل إلى 20 مترًا. على عكس الكاميرات النشطة (مثل ASUS Xtion و Microsoft Kinect) ، لا تحتوي كاميرا ZED الاستريو على ليزر بالأشعة تحت الحمراء لقياس المسافة. الكاميرا غير مكلفة نسبيًا (تكلف 449 دولارًا). تتميز الكاميرا بالحجم الصغير (175 × 30 × 33 مم) وخفة الوزن (159 جم).
يمكن استخدام الكاميرا
لبناء خرائط للمنطقة في الهواء الطلق على متن طائرة بدون طيار .
يمكنك قراءة المزيد عن الكاميرا
على الصفحة الرسمية .

تكوين Ubuntu على NVIDIA Jetson TK1
نقوم بتوصيل NVIDIA Jetson TK1 باستخدام HDMI بالشاشة ، وسلك إيثرنت بالموصل المقابل ، وأخيرًا باستخدام محول التيار المتردد / التيار المتردد 12 فولت بمصدر الطاقة.
لتثبيت النظام على NVIDIA Jetson ، قد تحتاج إلى تثبيت JetPack TK1 (يمكن العثور على التعليمات
هنا ). لقد حصلت على NVIDIA Jetson مع تثبيت JetPack و Ubuntu 14.04 ، لذلك هنا لن أفكر في تثبيته.
لذلك سيبدأ نظام Ubuntu 14.04 تلقائيًا. للحصول على تفويض ، نستخدم اسم مستخدم وكلمة مرور أوبونتو.
تعرف على عنوان IP الخاص بمضيف Jetson:
ifconfig
احصل على مواصفات الأجهزة:
lscpu
الاستنتاج هو هذا:
Architecture: armv7l Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 4 Socket(s): 1
قد تكون هناك مشكلة في الاتصال بـ Jetson عبر SSH: يعرض ifconfig عنوان IP ، ولكن لا يمكنك الاتصال بـ Jetson على هذا العنوان. لحل المشكلة ، افتح الملف / etc / network / interface من الجذر:
sudo nano /etc/network/interface
وإضافة الخطوط:
auto eth0 iface eth0 inet dhcp
قمنا بتعيين ديناميكي لعناوين IP. قم بحفظ التغييرات وتنفيذها:
sudo ifup eth0
الآن يجب أن يعمل كل شيء. تم اتخاذ هذا القرار
من هنا .
اتصل الآن بـ Jetson عبر SSH:
ssh -X ubuntu@<ip_address>
تثبيت CUDA
للعمل مع كاميرا ZED ، نحتاج إلى ZED SDK ، الذي يتطلب CUDA الإصدار 6.5 المثبت. قم بتنزيل ملف deb الخاص بـ CUDA Toolkit 6.5 لـ L4T
من هنا (الإرشادات مأخوذة
من هنا ):
wget http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda-repo-l4t-r21.1-6-5-prod_6.5-14_armhf.deb
قم بتعيين بيانات تعريف مستودع التخزين لـ CUDA لـ L4T الذي قمت بتنزيله للتو:
sudo dpkg -i cuda-repo-l4t-r21.1-6-5-prod_6.5-14_armhf.deb
قم بتنزيل وتثبيت مجموعة أدوات CUDA نفسها بما في ذلك مجموعة أدوات OpenGL لـ NVIDIA:
sudo apt-get update
تثبيت cuda-toolkit-6-5:
sudo apt-get install cuda-toolkit-6-5
أضف مستخدم ubuntu إلى مجموعة "الفيديو" لتوفير الوصول إلى GPU:
sudo usermod -a -G video $USER
هنا $ USER هو أوبونتو.
قم بإضافة المسارات إلى مجلد تثبيت CUDA إلى البرنامج النصي bashrc وتنفيذه في المحطة الطرفية الحالية:
echo "export PATH=/usr/local/cuda-6.5/bin:$PATH" >> ~/.bashrc echo "export $PATH=/usr/local/cuda-6.5/bin:$PATH" >> ~/.bashrc source ~/.bashrc
تحقق من تثبيت مجموعة أدوات CUDA على الجهاز:
nvcc -V
تكوين USB 3.0 على Jetson TK1
بشكل افتراضي ، يتم تكوين منفذ USB 3.0 بواسطة النظام على Jetson TK1 كـ USB 2.0. نحن بحاجة إلى تكوينه على أنه USB 3.0. للقيام بذلك ، افتح الملف /boot/extlinux/extlinux.conf تحت الجذر:
sudo vi /boot/extlinux/extlinux.conf
ابحث عن السلسلة "usb_port_owner_info = 0". إذا حدث هذا السطر مرتين ، فقم بتغيير آخر تضمين. أعد كتابة "usb_port_owner_info = 0" إلى "usb_port_owner_info = 2".
قم بتثبيت ZED SDK
يبدو إجراء التثبيت مشابهًا لنظام Linux المكتبي. تجدر الإشارة فقط إلى أن OpenCV مثبت بالفعل عند تثبيت JetPack بحيث يمكنك استخدام تحسين Tegra لذلك. لذلك ، لا يلزم التثبيت اليدوي لـ OpenCV.
لاستخدام الكاميرا الستيريو ZED ، نحتاج إلى تثبيت ZED SDK 1.2. يستخدم المثبت ملف .run Jetson TK1 خاص. تنزيل المثبت:
wget https://www.stereolabs.com/developers/downloads/archives/ZED_SDK_Linux_JTK1_v1.2.0.run
قم بتعيين حقوق التنفيذ للملف وتشغيله في المحطة:
sudo chmod +x ZED_SDK_Linux_JTK1_v1.2.0.run ./ZED_SDK_Linux_JTK1_v1.2.0.run
نحن نقبل شروط اتفاقية الترخيص ، اضغط على "q" ثم "Y". بعد ذلك ، اتبع التعليمات.
قم بتشغيل ZED Explorer على Jetson نفسه (لا يعمل عند الاتصال عن بعد عبر SSH):
/usr/local/zed/tools/ZED\ Explorer

تثبيت برنامج تشغيل ROS للكاميرا الستيريو ZED
لقد استخدمت ROS Indigo في تجاربي. تثبيت التبعيات لبرنامج ROS:
sudo apt-get install ros-indigo-tf2-ros ros-indigo-image-transport ros-indigo-dynamic-reconfigure ros-indigo-urdf
قم بتثبيت ROS wrapper للكاميرا ZED:
cd ~/catkin_ws/src git clone https://github.com/zastrix/zed-ros-wrapper.git git checkout ef3ad46f14cf62ff21083829a1fa6879d20246de cd ~/catkin_ws catkin_make
قم بتشغيل zed_wrapper بتنفيذ الأوامر التالية في نوافذ مختلفة من الجهاز:
roscore roslaunch zed_wrapper zed.launch
نعرض الموضوعات النشطة:
rostopic list
في القائمة ، بالإضافة إلى المواضيع القياسية ، سنرى موضوعات بالبادئة / zed:
/zed/depth/camera_info /zed/depth/depth_registered /zed/joint_states /zed/left/camera_info /zed/left/image_raw_color /zed/left/image_rect_color /zed/odom /zed/point_cloud/cloud_registered /zed/rgb/camera_info /zed/rgb/image_raw_color /zed/rgb/image_rect_color /zed/right/camera_info /zed/right/image_raw_color /zed/right/image_rect_color
تشغيل rqt_image_view:
rosrun rqt_image_view rqt_image_view
عند اختيار الموضوع / زيد / العمق / العمق المسجل لدينا خريطة العمق:

صورة RGB من الكاميرا اليسرى (/ zed / left / image_raw_color):

وأخيرًا ، صورة RGB من الكاميرا اليمنى (/ zed / right / image_raw_color):

يتم نشر بيانات الكاميرا في الموضوعات / zed / rgb / image_raw_color و / zed / عمق / عمق_مُسجل بتردد 15 هرتز.
اكتشفنا تكرار نشر سحابة نقطة في الموضوع / zed / point_cloud / cloud_registered:
rostopic hz /zed/point_cloud/cloud_registered
average rate: 4.146 min: 0.202s max: 0.371s std dev: 0.04798s window: 11 average rate: 4.178 min: 0.191s max: 0.371s std dev: 0.04306s window: 16
قم بتشغيل rviz على Jetson نفسها (لم أتمكن من تشغيله بنجاح عند الاتصال عبر ssh مع خيار -x):
rosrun rviz rviz


SLAM على NVIDIA Jetson مع كاميرا ZED ستيريو
لنجرب الآن كاميرا ZED في مهمة عملية. في NVIDIA Jetson ، يمكنك بسهولة تشغيل خوارزمية SLAM RTAB-MAP. أولاً ، قم بتثبيت ROS wrapper لـ RTAB-MAP:
sudo apt-get install ros-indigo-rtabmap-ros
الآن قم بتشغيل rtabmap باستخدام كاميرا ZED. إذا لم يكن لدينا zed_wrapper قيد التشغيل ، فقم بتشغيله:
rosrun zed_wrapper zed_wrapper_node
تشغيل rtabmap:
rtabmap
حدد كاميرا ZED في نافذة rtabmap كمصدر:

لم أختبر RTAB-MAP على NVIDIA Jetson ، لذا أترك لكم ، أعزائي القراء ، فرصة تجربة خوارزمية SLAM هذه. يمكن العثور على استخدام RTAB-MAP في آخر مقالتين (
هنا وهنا ).
آمل أن تكون هذه المقالة نقطة بداية جيدة بالنسبة لك لاستخدام كاميرا الستيريو ZED والكمبيوتر الصغير NVIDIA Jetson. أتمنى لك حظًا سعيدًا في التجارب ونراكم قريبًا!
ملاحظة: إن رأيك حول اختيار كاميرا ستيريو غير مكلفة للتجريب أمر مثير للاهتمام. دعم ROS ليس بالأمر الكبير ، والأهم من ذلك السعر. يرجى كتابة خياراتك في التعليقات على المقال.
PS (تحديث): أود أن أجرب كاميرات ستيريو سلبية مثل ZED. مرغوب فيه قادر على العمل مع Raspberry Pi 3.