فهرست مطالب:

آموزش تشخیص شیء ربات چهارپاره جتسون نانو: 4 مرحله
آموزش تشخیص شیء ربات چهارپاره جتسون نانو: 4 مرحله

تصویری: آموزش تشخیص شیء ربات چهارپاره جتسون نانو: 4 مرحله

تصویری: آموزش تشخیص شیء ربات چهارپاره جتسون نانو: 4 مرحله
تصویری: مردی متوجه شد که سگ اش هر شب او را در هنگام خواب تماشا میکند سپس به حقیقت دلخراشی پی برد!!! 2024, ژوئن
Anonim
Image
Image

Nvidia Jetson Nano یک کیت توسعه دهنده است که از SoM (System on Module) و یک برد حامل مرجع تشکیل شده است. این برنامه در درجه اول برای ایجاد سیستم های تعبیه شده که نیاز به قدرت پردازش بالا برای یادگیری ماشین ، بینایی ماشین و برنامه های پردازش فیلم دارد ، هدف قرار می گیرد. می توانید بررسی دقیق آن را در کانال YouTube من مشاهده کنید.

انویدیا تلاش کرده است تا Jetson Nano را تا حد امکان کاربرپسند و آسان برای توسعه پروژه ها انجام دهد. آنها حتی چند روز پس از راه اندازی هیئت مدیره ، دوره کوتاهی در مورد نحوه ساخت ربات خود با Jetson Nano را راه اندازی کردند. در اینجا می توانید جزئیات مربوط به آن پروژه را بیابید.

با این حال من خودم با Jetbot به عنوان یک پروژه چند مشکل داشتم:

1) برای من به اندازه کافی EPIC نبود. Jetson Nano یک تخته بسیار جالب با قابلیت پردازش عالی است و ساخت یک ربات چرخدار ساده با آن فقط یک کار بسیار… بسیار طاقت فرسا به نظر می رسید.

2) انتخاب سخت افزار. Jetbot به سخت افزاری گران قیمت نیاز دارد/می توان آن را با جایگزین های دیگر جایگزین کرد - برای مثال از جوی استیک برای دورکاری استفاده می کنند. به نظر می رسد سرگرم کننده است ، اما آیا واقعاً برای کنترل ربات به جوی استیک احتیاج دارم؟

بنابراین ، بلافاصله پس از اینکه Jetson Nano را در دست گرفتم ، روی پروژه خودم ، Jetspider کار کردم. ایده این بود که نسخه های نمایشی اولیه Jetbot ، اما با سخت افزار رایج تر و قابل اجرا برای طیف گسترده ای از پروژه ها ، تکرار شود.

مرحله 1: سخت افزار خود را آماده کنید

سخت افزار خود را آماده کنید
سخت افزار خود را آماده کنید

برای این پروژه از نمونه اولیه ربات چهارپایه Zuri ، ساخته شده توسط Zoobotics استفاده کردم. مدت طولانی در آزمایشگاه شرکت ما خوابیده بود. من آن را با یک پایه چوبی برش لیزری برای جتسون نانو و یک پایه دوربین مجهز کردم. طراحی آنها اختصاصی است ، بنابراین اگر برای ربات Jetson Nano خود می خواهید چیزی مشابه ایجاد کنید ، می توانید پروژه Meped را مشاهده کنید ، که چهارپایه مشابه با طراحی منبع باز است. در واقع ، از آنجا که هیچ کس کد منبع میکروکنترلر زوری (آردوینو مگا) را در آزمایشگاه ما نداشت ، من از کد Meped با تعدیل جزئی در افست پا و پا استفاده کردم.

من از وب کم معمولی USB Raspberry Pi و دانگل USB Wifi استفاده کردم.

نکته اصلی این است که ما از Pyserial برای ارتباط سریال بین میکروکنترلر و Jetson Nano استفاده می کنیم ، سیستم شما اساساً می تواند از هر نوع میکروکنترلر استفاده کند ، مادامی که بتوان با کابل سریال USB با Jetson Nano ارتباط برقرار کرد. اگر ربات شما از موتورهای DC و درایور موتور استفاده می کند (به عنوان مثال مبتنی بر L298P) ، می توانید مستقیماً درایور موتور را با Jetson Nano GPIO وصل کنید. اما ، متأسفانه ، برای کنترل سرویس ها ، فقط می توانید از میکروکنترلر دیگر یا درایور سرو I2C اختصاصی استفاده کنید ، زیرا Jetson Nano سخت افزار GPIO PWM ندارد.

به طور خلاصه ، می توانید از نوع ربات با هر میکروکنترلری که می تواند با کابل داده USB با Jetson Nano متصل شود ، استفاده کنید. من کد Arduino Mega را در مخزن github این آموزش بارگذاری کردم و قسمت مربوط به ارتباط Jetson Nano با Arduino در اینجا آمده است:

if (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 opensh-server را نصب کنید

سرور SSH به طور خودکار راه اندازی می شود.

برای اتصال به دستگاه اوبونتو از طریق LAN فقط باید دستور زیر را وارد کنید:

نام کاربری ssh@ip_address

اگر دستگاه Windows دارید ، باید SSH client ، به عنوان مثال Putty را نصب کنید.

بیایید با نصب Python Package Manager (pip) و Pillow برای دستکاری تصویر شروع کنیم.

sudo apt python3-pip python3-pil را نصب کنید

سپس مخزن Jetbot را نصب می کنیم ، زیرا برای انجام تشخیص شیء به برخی از قسمتهای چارچوب آن متکی هستیم.

sudo apt python3-smbus python-pyserial را نصب کنید

git clone

سی دی جت بات

sudo apt-get cmake را نصب کنید

sudo python3 setup.py install

در نهایت مخزن Github من برای این پروژه را در پوشه اصلی خود کلون کنید و Flask و برخی بسته های دیگر را برای کنترل از راه دور ربات با استفاده از وب سرور نصب کنید.

git clone

سی دی

sudo pip3 install -r Requires -opencv

مدل پیش فرض SSD (آشکارساز یک شات) را از این لینک بارگیری کرده و در پوشه jetspider_demos قرار دهید.

حالا خوب شد بریم!

مرحله 3: کد را اجرا کنید

کد را اجرا کنید
کد را اجرا کنید

من دو نسخه ی نمایشی برای Jetspider تهیه کردم ، اولین مورد یک teleopration ساده است ، بسیار شبیه به آنچه قبلا برای مریخ نورد Banana Pi انجام دادم و دومی از TensorRT برای تشخیص شی استفاده می کند و دستورات حرکت را از طریق اتصال سریال به میکروکنترلر ارسال می کند. به

از آنجا که بیشتر کدهای teleopration در آموزش دیگر من توضیح داده شده است (من فقط تعدادی تغییر جزئی در مورد انتقال ویدئو انجام دادم) در اینجا من بر روی بخش تشخیص شیء تمرکز می کنم.

اسکریپت اصلی برای شیء زیر object_following.py در jetspider_object_following است ، زیرا عملیات از راه دور spider_teleop.py در jetspider_teleoperation است.

شیء زیر اسکریپت با وارد کردن ماژول های لازم و اعلام متغیرها و نمونه های کلاس شروع می شود. سپس وب سرور Flask را با این خط راه اندازی می کنیم

app.run (host = '0.0.0.0'، threaded = True)

به محض باز کردن آدرس 0.0.0.0 (localhost) در مرورگر وب یا آدرس Jetson Nano در شبکه (می توان با دستور ifconfig بررسی کرد) ، این عملکرد اجرا می شود

def index ():

این قالب صفحه وب را که در پوشه templates داریم ارائه می دهد. الگو دارای منبع ویدئویی است که در آن جاسازی شده است ، بنابراین پس از اتمام بارگذاری ، def video_feed (): اجرا می شود ، که یک شیء Response که با عملکرد ژنراتور مقداردهی می شود را برمی گرداند.

راز پیاده سازی به روزرسانی های درجا (به روز رسانی تصویر در صفحه وب برای جریان ویدیویی ما) استفاده از پاسخ چند بخشی است. پاسخ های چند قسمتی شامل یک سرصفحه است که شامل یکی از انواع محتوای چند قسمتی است و پس از آن قسمت هایی که با نشانگر مرزی از هم جدا شده اند و هر کدام دارای نوع محتوای خاص قسمت خود هستند.

در تابع def gen (): ما تابع ژنراتور را در یک حلقه نامتناهی پیاده سازی می کنیم که تصویر را گرفته ، آن را به تابع def execute (img): ارسال می کند و پس از آن تصویری ارسال می شود که به صفحه وب ارسال می شود.

def execute (img): تابع جایی است که همه جادوها اتفاق می افتد ، تصویری می گیرد ، اندازه آن را با OpenCV تغییر می دهد و به نمونه "class" کلاس Jetbot ObjectDetector می گذارد. بر می گرداند و لیست تشخیص ها را برمی گرداند و ما از OpenCV برای ترسیم مستطیل های آبی در اطراف آنها و نوشتن حاشیه نویسی با کلاس تشخیص شی استفاده می کنیم. پس از آن ما بررسی می کنیم که آیا موردی ما مورد توجه ما قرار گرفته است

اگر می خواهید ربات شما اشیاء دیگر را دنبال کند ، 53 (یک سیب است) می توانید آن شماره (53) را از مجموعه داده CoCo به شماره دیگر تغییر دهید. کل لیست در فایل categories.py است.

در نهایت اگر هیچ شیئی به مدت 5 ثانیه تشخیص داده نشود ، شخصیت "5" را برای روبات ارسال می کنیم تا روی سریال متوقف شود. اگر شی پیدا شد ، محاسبه می کنیم که چقدر از مرکز تصویر فاصله دارد و بر این اساس عمل می کنیم (اگر نزدیک مرکز ، مستقیم بروید (شخصیت "1" در سریال) ، اگر در سمت چپ ، به چپ بروید و غیره). می توانید با آن مقادیر بازی کنید تا بهترین را برای تنظیمات خاص خود تعیین کنید!

مرحله 4: اندیشه های نهایی

افکار نهایی
افکار نهایی

این خلاصه نسخه ی نمایشی ObjectFollowing است ، اگر می خواهید درباره سرور ویدیویی Flask webser بیشتر بدانید ، می توانید به این آموزش عالی میگل گرینبرگ نگاهی بیندازید.

همچنین می توانید نگاهی به نوت بوک Nvidia Jetbot Object Detection بیاندازید.

امیدوارم پیاده سازی های نمایشی Jetbot به ساخت ربات شما با استفاده از چارچوب Jetbot کمک کند. من نسخه ی نمایشی اجتناب از موانع را اجرا نکردم ، زیرا فکر می کنم انتخاب مدل نتایج اجتناب از موانع خوبی نخواهد داشت.

اگر س questionالی دارید من را در LinkedId اضافه کنید و در کانال YouTube من مشترک شوید تا از پروژه های جالب تر مربوط به یادگیری ماشین و رباتیک مطلع شوید.

توصیه شده: