فهرست مطالب:

Roomba کنترل شده MATLAB: 5 مرحله
Roomba کنترل شده MATLAB: 5 مرحله

تصویری: Roomba کنترل شده MATLAB: 5 مرحله

تصویری: Roomba کنترل شده MATLAB: 5 مرحله
تصویری: Best Robot Vacuums 2023 - Surprising Results! - 90+ Tested 2024, نوامبر
Anonim
Roomba کنترل شده MATLAB
Roomba کنترل شده MATLAB
Roomba کنترل شده MATLAB
Roomba کنترل شده MATLAB

هدف این پروژه استفاده از MATLAB و همچنین یک روبات قابل برنامه ریزی iRobot است. گروه ما مهارت های برنامه نویسی ما را برای ایجاد یک اسکریپت MATLAB که از بسیاری از عملکردهای iRobot ، از جمله سنسورهای صخره ای ، سنسورهای سپر ، سنسورهای نور و دوربین استفاده می کند ، ترکیب کرد. ما از این قرائت سنسور و دوربین به عنوان ورودی استفاده کردیم و به ما این امکان را می دهد تا با استفاده از توابع و حلقه های کد MATLAB خروجی های خاصی را که می خواهیم ایجاد کنیم. ما همچنین از دستگاه تلفن همراه MATLAB و ژیروسکوپ به عنوان راهی برای اتصال به iRobot و کنترل آن استفاده می کنیم.

مرحله 1: قطعات و مواد

قطعات و مواد
قطعات و مواد
قطعات و مواد
قطعات و مواد
قطعات و مواد
قطعات و مواد
قطعات و مواد
قطعات و مواد

MATLAB 2018a

نسخه 2018 MATLAB بیشترین نسخه را ترجیح می دهد ، بیشتر به این دلیل که با کدی که به دستگاه تلفن همراه متصل می شود بهترین عملکرد را دارد. با این حال ، اکثر کدهای ما را می توان در اکثر نسخه های MATLAB تفسیر کرد.

iRobot ایجاد دستگاه

-این دستگاه یک دستگاه ساخته شده ویژه است که تنها هدف آن برنامه نویسی و برنامه نویسی است. (این خلاء واقعی نیست)

رزبری پای (با دوربین)

- این یک برد رایانه غیر گران است که به عنوان مغز iRobot عمل می کند. ممکن است کوچک باشد ، اما قادر به بسیاری از موارد است. دوربین یک افزودنی اضافی است. همچنین از رزبری pi برای به دست آوردن تمام توابع و دستورات خود استفاده می کند. دوربینی که در تصویر بالا مشاهده می کنید بر روی یک پایه چاپ سه بعدی نصب شده است ، که توسط بخش های مهندسی بنیاد در دانشگاه تنسی ایجاد شده است.

مرحله 2: فایل پایگاه داده Roomba

فایل پایگاه داده Roomba
فایل پایگاه داده Roomba

یک فایل اصلی وجود دارد که برای استفاده از توابع و دستورات مناسب برای roomba به آن نیاز دارید. این فایل جایی است که شما کد را نوشته اید ، عملکردها را می گیرد تا بتوانید عملکرد اتاق خود را بیشتر مدیریت کنید.

می توانید فایل را در این لینک یا فایل قابل بارگیری زیر بارگیری کنید

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

مرحله 3: اتصال به Roomba

ابتدا ، باید مطمئن شوید که ربات شما با استفاده از دوشاخه میکرو USB به برد تمشک pi شما متصل شده است. سپس باید کامپیوتر و ربات خود را به درستی به همان WiFi متصل کنید. پس از انجام این کار ، می توانید ربات خود را فعال کرده و با استفاده از دستور داده شده در فایل پایگاه داده ربات به آن متصل شوید. (همیشه قبل و بعد از استفاده از ربات خود را به سختی تنظیم مجدد کنید). به عنوان مثال ، ما از دستور "r.roomba (19)" برای اتصال به ربات خود استفاده می کنیم و متغیر r را به دستگاه خود اختصاص می دهیم. این به فایل پایگاه داده باز می گردد ، که متغیر ما را به عنوان ساختاری تنظیم می کند که می توانیم در هر لحظه به آن ارجاع دهیم.

مرحله 4: کد

کد
کد
کد
کد

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

ما با دستور ساده "r.setDriveVelocity (.06)" شروع به کار کردیم که سرعت روبات رو به جلو را به 0.06 متر بر ثانیه تنظیم می کند. این فقط برای این است که ربات از قبل حرکت کند

سپس ، اسکریپت اصلی ما با یک حلقه while شروع می شود که داده های ربات داده شده را با ایجاد ساختارهایی بازیابی می کند که می توانیم آنها را در دستورات زیر شرط بندی کرده و از آنها استفاده کنیم ، بنابراین به ما این امکان را می دهد که به روبات بگوییم دستور خاصی را بر اساس داده های ساختار اجرا کند. ربات با سنسورهای خود می خواند. ما آن را طوری تنظیم کردیم که ربات سنسورهای صخره ای خود را بخواند و یک مسیر سیاه را دنبال کند

در حالی که true٪ while حلقه ادامه می یابد تا چیزی "false" رخ دهد (در این مورد بی نهایت ادامه می یابد) data = r.getCliffSensors؛ data2 = r.getBumpers ؛٪ داده ها را به طور مداوم در مورد مقادیر سنسور صخره بازیابی می کند و آنها را به یک متغیر٪ img = r.getImage اختصاص می دهد ؛ ٪ از دوربین نصب شده عکس می گیرد٪ image (img)؛ ٪ تصویری را که گرفته شده است٪ red_mean = mean (میانگین (img (:، ، 1))) نشان می دهد ؛٪ در صورتی که data.rightFront <2000 r.turnAngle (-2) مقدار متوسط رنگ سبز را می گیرد. ٪ هنگامی که مقدار سنسورهای صخره جلویی سمت راست به زیر 2000 r.setDriveVelocity (.05) می رسد ، Roomba را تقریباً 2 درجه CW می چرخاند. elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1)؛ ٪ در صورتی که هر دو مقدار سنسورهای جلو و چپ جلو به زیر 2000٪ r.turnAngle (0) برسد ، به Roomba می گوید که با سرعت 0.2 متر بر ثانیه به جلو حرکت کند. ٪ به Roomba می گوید که اگر شرایط ذکر شده در بالا صادق است ، نروید

elseif data2.right == 1 r.moveDistance (-. 12) ؛ r.turnAngle (160) ؛ r.setDriveVelocity (.05) ؛ elseif data2.left == 1 r.move فاصله (-. 2) ؛ r.turnAngle (5) ؛ r.setDriveVelocity (.05) ؛ elseif data2.front == 1 r.move فاصله (-. 12) ؛ r.turnAngle (160) ؛ r.setDriveVelocity (.05) ؛

پس از این حلقه while ، یک حلقه while دیگر وارد می کنیم که داده های به دست آمده از طریق دوربین را فعال می کند. و ما از دستور if در داخل این حلقه while استفاده می کنیم که با استفاده از یک برنامه خاص (alexnet) یک تصویر را تشخیص می دهد و هنگامی که تصویر را شناسایی کرد ، بلافاصله کنترل از راه دور دستگاه تلفن همراه را فعال می کند

anet = alexnet؛ ٪ یادگیری عمیق alexnet را به متغیر true٪ Infinite while loop اختصاص می دهد img = r.getImage؛ img = imresize (img، [227، 227])؛ label = طبقه بندی (anet، img)؛ if label == "دستمال کاغذی" || label == "یخچال" label = "آب"؛ تصویر پایانی (img) ؛ عنوان (کاراکتر (برچسب)) ؛ کشیدن

حلقه while که به ما اجازه می دهد دستگاه را با تلفن خود کنترل کنیم ، داده ها را از ژیروسکوپ تلفن بازیابی می کند و آنها را به ماتریسی متصل می کنیم که به طور مداوم داده ها را در رایانه به متلب باز می گرداند. ما از دستور if استفاده می کنیم که داده های ماتریس را می خواند و خروجی ای را ایجاد می کند که دستگاه را بر اساس مقادیر خاصی از ژیروسکوپ تلفن حرکت می دهد. مهم است بدانید که ما از سنسورهای جهت گیری دستگاه تلفن همراه استفاده کردیم. ماتریس یک به سه ذکر شده در بالا بر اساس هر یک از عناصر سنسورهای جهت گیری گوشی ، که شامل آزیموت ، گام و جانبی است طبقه بندی می شود. عبارات if شرایطی را ایجاد کردند که بیان می کرد وقتی طرف از مقادیر 50 فراتر رود یا به زیر 50 برسد ، ربات فاصله معینی را به جلو (50 مثبت) یا عقب (منفی 50) حرکت می دهد. و همین امر در مورد مقدار گام نیز صادق است. اگر مقدار گام از مقدار 25 در زیر 25- فراتر رود ، ربات با زاویه 1 درجه (مثبت 25) یا منفی 1 درجه (منفی 25) می چرخد

در حالی که مکث واقعی (.1)٪.5 ثانیه قبل از هر مقدار گرفته می شود Controller = iphone. Orientation؛ ٪ ماتریسی را برای مقادیر جهت گیری iPhone به یک متغیر Azimuthal = Controller (1) اختصاص می دهد. ٪ اولین مقدار ماتریس را به متغیر Pitch = Controller (2) اختصاص می دهد. ٪ دومین مقدار ماتریس را به یک متغیر اختصاص می دهد (هنگامی که iPhone به صورت جانبی نگه داشته می شود به جلو و عقب) Side = Controller (3) ؛ ٪ سومین مقدار ماتریس را به یک متغیر اختصاص می دهد (هنگامی که iPhone به صورت چپ و راست نگه داشته می شود به سمت چپ و راست بپیوندید)٪ اگر بر اساس جهت تلفن خروجی ایجاد کند اگر Side> 130 || سمت (25. r.move) فاصله (-. 1)٪ Roomba را تقریباً به عقب می برد.1 متر در صورتی که آیفون حداقل 25 بار به عقب متمایل شده باشد. در صورتیکه آیفون حداقل 25 درجه کج باشد حداقل 25 درجه به سمت چپ بپیچید < / 25 r.turnAngle (1)

اینها تنها نکات برجسته اصلی قطعات اصلی کد ما هستند ، که در صورت نیاز به سرعت کپی و جایگذاری بخشی به نفع خود ، آنها را ذکر کردیم. با این حال ، در صورت نیاز کل کد ما در زیر ضمیمه شده است

مرحله 5: نتیجه گیری

این کدی که ما نوشتیم به طور خاص برای ربات ما و همچنین دید کلی ما از پروژه طراحی شده است. هدف ما این بود که از همه مهارت های برنامه نویسی MATLAB خود برای ایجاد یک اسکریپت طراحی خوب که از اکثر ویژگی های ربات استفاده می کند ، استفاده کنیم. استفاده از کنترلر تلفن آنقدرها هم که فکر می کنید دشوار نیست و امیدواریم کد ما بتواند به شما در درک بهتر مفهوم کدگذاری iRobot کمک کند.

توصیه شده: