جدول المحتويات:

برنامج Jetson Nano Quadruped Robot Object التعليمي: 4 خطوات
برنامج Jetson Nano Quadruped Robot Object التعليمي: 4 خطوات

فيديو: برنامج Jetson Nano Quadruped Robot Object التعليمي: 4 خطوات

فيديو: برنامج Jetson Nano Quadruped Robot Object التعليمي: 4 خطوات
فيديو: Jetson Nano Quadruped Robot Object Detection + Teleoperation 2024, يونيو
Anonim
Image
Image

Nvidia Jetson Nano عبارة عن مجموعة مطور تتكون من SoM (نظام على الوحدة النمطية) ولوحة الناقل المرجعية. إنه مستهدف بشكل أساسي لإنشاء أنظمة مدمجة تتطلب طاقة معالجة عالية لتطبيقات التعلم الآلي ورؤية الآلة ومعالجة الفيديو. يمكنك مشاهدة مراجعة مفصلة لها على قناة يوتيوب الخاصة بي.

تحاول Nvidia أن تجعل Jetson Nano سهلة الاستخدام وسهلة لتطوير المشاريع قدر الإمكان. حتى أنهم أطلقوا دورة تدريبية صغيرة حول كيفية بناء الروبوت الخاص بك باستخدام Jetson Nano ، بعد أيام من إطلاق اللوحة. يمكنك العثور على التفاصيل حول هذا المشروع هنا.

ومع ذلك ، واجهت بعض المشاكل مع Jetbot كمشروع:

1) لم يكن ملحمة بما يكفي بالنسبة لي. Jetson Nano هي لوحة شيقة للغاية تتمتع بقدرات معالجة رائعة وجعل صنع روبوت بسيط بعجلات يبدو وكأنه شيء محبط للغاية.

2) اختيار الأجهزة. يتطلب Jetbot بعض الأجهزة باهظة الثمن / يمكن استبدالها ببدائل أخرى - على سبيل المثال ، يستخدمون عصا التحكم للتشغيل عن بعد. يبدو الأمر ممتعًا ، لكن هل أحتاج حقًا إلى عصا تحكم للتحكم في الروبوت؟

لذلك ، مباشرة بعد أن حصلت على Jetson Nano بدأت العمل في مشروعي الخاص ، وهو Jetspider. كانت الفكرة هي تكرار العروض التوضيحية الأساسية التي يمتلكها Jetbot ، ولكن مع أجهزة أكثر شيوعًا وقابلة للتطبيق على مجموعة متنوعة من المشاريع.

الخطوة 1: جهز أجهزتك

جهز أجهزتك
جهز أجهزتك

في هذا المشروع ، استخدمت نموذجًا أوليًا مبكرًا لروبوت زوري رباعي الأرجل ، من إنتاج شركة Zoobotics. لقد كان مستلقياً في مختبر شركتنا لفترة طويلة. لقد جهزته بحامل خشبي مقطوع بالليزر لـ Jetson Nano وحامل كاميرا. تصميمهم مملوك ، لذلك إذا كنت تريد إنشاء شيء مشابه لروبوت Jetson Nano الخاص بك ، فيمكنك إلقاء نظرة على مشروع Meped ، وهو مماثل رباعي الأرجل بتصميم مفتوح المصدر. في الواقع ، نظرًا لأنه لم يكن لدى أي شخص شفرة المصدر لمتحكم Zuri الدقيق (Arduino Mega) في مختبرنا ، فقد استخدمت الكود من Meped مع بعض التعديلات الطفيفة في إزاحة الساقين / القدمين.

لقد استخدمت كاميرا ويب عادية متوافقة مع Raspberry Pi وواي فاي USB dongle.

النقطة الأساسية هي أنه نظرًا لأننا سنستخدم Pyserial للتواصل التسلسلي بين متحكم دقيق و Jetson Nano ، يمكن لنظامك بشكل أساسي استخدام أي نوع من وحدات التحكم الدقيقة ، طالما أنه يمكن توصيله بـ Jetson Nano بكابل تسلسلي USB. إذا كان الروبوت الخاص بك يستخدم محركات DC وسائق محرك (على سبيل المثال يعتمد على L298P) ، فمن الممكن توصيل سائق المحرك مباشرة مع Jetson Nano GPIO. ولكن ، لسوء الحظ ، للتحكم في الماكينات ، يمكنك فقط استخدام متحكم دقيق آخر أو برنامج تشغيل مؤازر I2C مخصص ، نظرًا لأن Jetson Nano لا يحتوي على أجهزة GPIO PWM.

للتلخيص ، يمكنك استخدام نوع الروبوت مع أي متحكم يمكن توصيله بجيتسون نانو باستخدام كابل بيانات USB. لقد قمت بتحميل كود Arduino Mega إلى مستودع جيثب لهذا البرنامج التعليمي والجزء المتعلق بربط Jetson Nano مع Arduino هنا:

إذا (Serial.available ()) {switch (Serial.read ()) {

{

حالة 1':

إلى الأمام()؛

استراحة؛

الحالة "2":

الى الخلف()؛

استراحة؛

الحالة "3":

انعطف يمينا()؛

استراحة؛

الحالة "4":

انعطف لليسار()؛

استراحة؛

نتحقق مما إذا كانت هناك بيانات متاحة ، وإذا كانت متوفرة ، فمررها إلى هيكل التحكم في حالة التبديل. انتبه ، أن البيانات من المسلسل تأتي كأحرف ، لاحظ علامة الاقتباس المفردة حول الأرقام 1 ، 2 ، 3 ، 4.

الخطوة 2: قم بتثبيت الحزم الضرورية

لحسن الحظ بالنسبة لنا ، تأتي صورة نظام Jetson Nano الافتراضية مع الكثير من الأشياء المثبتة مسبقًا (مثل OpenCV و TensorRT وما إلى ذلك) ، لذلك نحتاج فقط إلى تثبيت حزمتين أخريين لجعل الكود يعمل وتمكين SSH.

لنبدأ بتمكين SSH في حالة رغبتك في القيام بكل ما تبقى من العمل عن بُعد.

sudo apt التحديث

sudo apt install openssh-server

سيبدأ خادم SSH تلقائيًا.

للاتصال بجهاز Ubuntu الخاص بك عبر LAN ، ما عليك سوى إدخال الأمر التالي:

ssh اسم المستخدم @ ip_address

إذا كان لديك جهاز يعمل بنظام Windows ، فستحتاج إلى تثبيت عميل SSH ، على سبيل المثال Putty.

لنبدأ بتثبيت Python Package Manager (pip) و Pillow لمعالجة الصور.

sudo apt install python3-pip python3-pil

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

sudo apt تثبيت python3-smbus python-pyserial

بوابة استنساخ

سي دي جيتبوت

sudo apt-get install cmake

sudo python3 setup.py install

أخيرًا ، قم بنسخ مستودع Github الخاص بي لهذا المشروع إلى مجلد منزلك وقم بتثبيت Flask وبعض الحزم الأخرى للتحكم عن بُعد في الروبوت باستخدام خادم الويب.

استنساخ بوابة

قرص مضغوط

sudo pip3 install- متطلبات r-opencv

قم بتنزيل نموذج SSD (كاشف الطلقة الواحدة) الذي تم اختباره مسبقًا من هذا الرابط وضعه في مجلد jetspider_demos.

الآن نحن على ما يرام!

الخطوة 3: قم بتشغيل الكود

قم بتشغيل الكود
قم بتشغيل الكود

لقد قمت بعمل عرضين تجريبيين لـ Jetspider ، الأول عبارة عن تيليوبوريشن بسيط ، مشابه جدًا للذي قمت به سابقًا لمركبة Banana Pi rover والثاني يستخدم TensorRT لاكتشاف الكائن ويرسل أوامر الحركة عبر الاتصال التسلسلي إلى وحدة التحكم الدقيقة.

نظرًا لأن معظم التعليمات البرمجية عن بُعد موصوفة في البرنامج التعليمي الآخر (لقد أجريت بعض التعديلات الطفيفة فقط ، وأعد تسجيل نقل الفيديو) هنا سأركز على جزء "اكتشاف الكائن".

البرنامج النصي الرئيسي للكائن التالي هو object_following.py في jetspider_object_following ، للتشغيل عن بعد spider_teleop.py في jetspider_teleoperation.

يبدأ الكائن الذي يلي النص البرمجي باستيراد الوحدات النمطية الضرورية وإعلان المتغيرات ومثيلات الفئة. ثم نبدأ خادم الويب Flask بهذا الخط

app.run (مضيف = '0.0.0.0' ، مترابط = صحيح)

بمجرد فتح عنوان 0.0.0.0 (localhost) في متصفح الويب الخاص بنا أو عنوان Jetson Nano على الشبكة (يمكن التحقق من الأمر ifconfig) ، سيتم تنفيذ هذه الوظيفة

فهرس def ():

يعرض قالب صفحة الويب لدينا في مجلد القوالب. يحتوي القالب على مصدر فيديو مضمن فيه ، لذلك بمجرد الانتهاء من التحميل ، سيتم تنفيذ def video_feed (): لإرجاع كائن استجابة تمت تهيئته باستخدام وظيفة المولد.

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

في def gen (): وظيفة نقوم بتنفيذ وظيفة المولد في حلقة لا نهائية تلتقط الصورة ، وترسلها إلى def execute (img): function ، مما ينتج عنه صورة يتم إرسالها إلى صفحة الويب بعد ذلك.

def execute (img): الوظيفة هي المكان الذي يحدث فيه كل السحر ، يأخذ صورة ، ويغير حجمها باستخدام OpenCV ويمررها إلى مثيل فئة Jetbot ObjectDetector "model". تقوم بإرجاع قائمة الاكتشافات ونستخدم OpenCV لرسم مستطيلات زرقاء حولها وكتابة التعليقات التوضيحية بفئة تم اكتشاف الكائن. بعد ذلك ، نتحقق مما إذا كان هناك كائن يثير اهتمامنا ، تم اكتشافه

يمكنك تغيير هذا الرقم (53) إلى رقم آخر من مجموعة بيانات CoCo إذا كنت تريد أن يتبع الروبوت الخاص بك كائنات أخرى ، 53 عبارة عن تفاحة. القائمة بأكملها في ملف categories.py.

أخيرًا ، إذا لم يتم اكتشاف أي كائن لمدة 5 ثوانٍ ، فإننا نرسل الحرف "5" حتى يتوقف الروبوت فوق المسلسل. إذا تم العثور على كائن ، نحسب المسافة التي يبعدها عن مركز الصورة ونتصرف وفقًا لذلك (إذا كان قريبًا من المركز ، فانتقل مباشرة (الحرف "1" في المسلسل) ، إذا كان على اليسار ، فانتقل إلى اليسار ، إلخ). يمكنك اللعب بهذه القيم لتحديد الأفضل لإعدادك الخاص!

الخطوة 4: الأفكار النهائية

افكار اخيرة
افكار اخيرة

هذا هو جوهر العرض التوضيحي التالي ، إذا كنت تريد معرفة المزيد عن تدفق فيديو خادم الويب Flask ، فيمكنك إلقاء نظرة على هذا البرنامج التعليمي الرائع بواسطة Miguel Grinberg.

يمكنك أيضًا إلقاء نظرة على دفتر ملاحظات Nvidia Jetbot Object Detection هنا.

آمل أن تساعد تطبيقاتي للعروض التوضيحية لـ Jetbot في بناء الروبوت الخاص بك باستخدام إطار عمل Jetbot. لم أقم بتنفيذ عرض تجنب العقبات ، لأنني أعتقد أن اختيار النموذج لن يؤدي إلى نتائج جيدة في تجنب العقبات.

أضفني على LinkedId إذا كان لديك أي سؤال واشترك في قناتي على YouTube لتلقي إشعارًا بالمشاريع الأكثر إثارة للاهتمام التي تتضمن التعلم الآلي والروبوتات.

موصى به: