مساء الخير أيها القراء! في المقالات الأخيرة ، تحدثت عن طرق 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.