فهرست مطالب:

IRobot Create-Mars Expedition Rover Mark I: 4 مرحله
IRobot Create-Mars Expedition Rover Mark I: 4 مرحله

تصویری: IRobot Create-Mars Expedition Rover Mark I: 4 مرحله

تصویری: IRobot Create-Mars Expedition Rover Mark I: 4 مرحله
تصویری: Mars Rover Finds Plastic On Mars 2024, جولای
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

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

مرحله 1: لوازم

تدارکات
تدارکات

برای این پروژه ، به iRobot Create نیاز دارید ، که یک نسخه قابل برنامه ریزی از جاروبرقی روبات Roomba است. این ربات مجهز به تمام سنسورهای مورد نیاز برای این پروژه است ، به ویژه سنسورهای ضربه ، سنسورهای صخره ای و سنسورهای "Light Bump". همچنین به رزبری پای و دوربین ویدئویی نیاز دارید که برای ارتباطات بی سیم ، برنامه نویسی زنده و پخش زنده ویدئو استفاده می شود. در نهایت ، شما برای نصب رزبری پای و دوربین به یک پرینت سه بعدی نیاز دارید.

مرحله 2: برنامه نویسی را برای رضایت از نتیجه مطلوب ایجاد کنید

برنامه نویسی برای رضایت از نتیجه مطلوب ایجاد کنید
برنامه نویسی برای رضایت از نتیجه مطلوب ایجاد کنید

هنگامی که Roomba خود را متصل کرده اید ، باید یک کد Matlab ایجاد کنید که پس از ورودی های مورد نظر ، خروجی های مورد نظر خود را به شما ارائه دهد.

کد را می توانید در اینجا مشاهده کنید:

٪ Roomba Project٪ Brenten Arnold (barnol15)؛ جولیان کورن (qdp218) ؛ مایک هیل (mheal)٪ 4/11/19٪ شرح مشکل: یک مریخ نورد برای کمک به انسانها در طول اکتشاف/سکونت مریخ ایجاد کنید. ٪ روش حل: مواد آلی (سبز) را با استفاده از٪ سپرهای نور ، سنسورهای صخره ای و دوربین برای بررسی مواد آلی جستجو کنید. به٪ مریخ نورد اجازه دهید با استفاده از ضربه گیرها ، سنسورهای صخره ، و سنسورهای ارتفاع چرخها در مناطق ناهموار حرکت کند. به انسان این امکان را بدهید که مریخ نورد را از٪ فاصله دور کنترل کرده و به طور دستی مواد معدنی را جستجو کند. انتخاب = {'LIFE' ، 'ROUGH TERRAIN' ، 'USER CONTROL'}؛ ٪ سه گزینه در منوی محاوره تنظیم = منو ('' ، انتخابها) در صورت تنظیم> 0٪ اگر گزینه انتخاب شده درخواست تأیید کاربر را انتخاب کنید 2 = {'بله' ، 'نه'}٪ ایجاد یک آرایه سلولی برای "بله" یا "خیر" "انتخاب تأیید = منو ([" شما انتخاب کردید "" انتخابها {Setting} "" حالت. '] ، انتخابها 2)٪ تایید تنظیمات کاربر در صورت تأیید == 1 در صورت تنظیم == 1٪ بررسی اینکه آیا تنظیم "LIFE" در i انتخاب شده است 0 ٪ بازیابی و ذخیره مقادیر سنسور صخره در ساختار سلول "y" l = r.getLightBumpers٪ بازیابی و ذخیره مقادیر نور در ساختار "f" در صورتی که l.left> 100٪ بررسی کنید آیا سپر نور سمت چپ r.moveDistance (-0.05)٪ حرکت اتاقبه به عقب 0.05 متر r.turnAngle (20)٪ چرخاندن اتاق 20 درجه CCW img = r.getImage٪ دریافت تصویر از دوربین پای تمشک در اتاق راست = = [100 0 150 150] ؛ img = imcrop (img ، rect) c تصویر برش برای تمرکز روی مرکز قرمز = میانگین (میانگین (img (: ، ، 1)))٪ شدت متوسط قرمز سبز = میانگین (میانگین (img (: ،: ، 2)))٪ شدت متوسط سبز آبی = میانگین (میانگین (img (:، ، ، 3)))٪ متوسط شدت آبی در صورت سبز> قرمز و & سبز> آبی٪ بررسی کنید آیا گیاه در تصویر وجود دارد d = msgbox (['' Life found! '])؛ box نمایش یک کادر پیام با عبارت "زندگی پیدا شد!" منتظر (د) ؛ end elseif l.leftFront> 100٪ چک چپ است/سپر چراغ جلو پوشانده شده است r.move فاصله (-0.05)٪ حرکت اتاق رو به عقب 0.05 متر img = r.getImage٪ دریافت تصویر از دوربین پای تمشک روی اتاق و ذخیره در متغیر 'img 'rect = [100 0 150 150]؛ img = imcrop (img ، rect) c تصویر برش برای تمرکز روی مرکز قرمز = میانگین (میانگین (img (: ، ، 1)))٪ شدت متوسط قرمز سبز = میانگین (میانگین (img (: ،: ، 2)))٪ شدت متوسط سبز آبی = میانگین (میانگین (img (:، ، ، 3)))٪ متوسط شدت آبی در صورت سبز> قرمز و & سبز> آبی٪ بررسی کنید آیا گیاه در تصویر وجود دارد d = msgbox (['' Life found! '])؛ box نمایش یک کادر پیام با عبارت "زندگی پیدا شد!" منتظر (د) ؛ end elseif l.leftCenter> 100٪ بررسی کنید که سپر چراغ چپ/وسط پوشانده شده باشد r.move فاصله (-0.05)٪ حرکت اتاق رو به عقب 0.05 متر img = r.getImage٪ دریافت تصویر از دوربین پای تمشک روی اتاق و ذخیره در متغیر 'img 'rect = [100 0 150 150]؛ img = imcrop (img ، rect) c تصویر برش برای تمرکز روی مرکز قرمز = میانگین (میانگین (img (: ، ، 1)))٪ شدت متوسط قرمز سبز = میانگین (میانگین (img (:، ، ، 2)))٪ شدت متوسط سبز آبی = میانگین (میانگین (img (:، ، ، 3)))٪ متوسط شدت آبی در صورت سبز> قرمز و & سبز> آبی٪ بررسی کنید آیا گیاه در تصویر وجود دارد d = msgbox (['' Life found! '])؛ box نمایش یک کادر پیام با عبارت "زندگی پیدا شد!" منتظر (د) ؛ end elseif l.rightCenter> 100٪ بررسی کنید که آیا سپر نور راست/وسط پوشانده شده است r.move فاصله (-0.05)٪ حرکت roombaba به عقب 0.05 متر img = r.getImage٪ دریافت تصویر از دوربین پای تمشک در roomba و ذخیره در متغیر 'img 'rect = [100 0 150 150]؛ img = imcrop (img ، rect) c تصویر برش برای تمرکز روی مرکز قرمز = میانگین (میانگین (img (: ، ، 1)))٪ شدت متوسط قرمز سبز = میانگین (میانگین (img (:، ، ، 2)))٪ شدت متوسط سبز آبی = میانگین (میانگین (img (:، ، ، 3)))٪ متوسط شدت آبی در صورت سبز> قرمز و & سبز> آبی٪ بررسی کنید آیا گیاه در تصویر موجود است d = msgbox (['' Life found! '])؛ box نمایش یک کادر پیام با عبارت "زندگی پیدا شد!" منتظر (د) ؛ end elseif l.rightFront> 100٪ بررسی کنید که آیا سپر چراغ راست/جلو r پوشش داده شده است. r دور 'rect = [100 0 150 150]؛ img = imcrop (img ، rect) c تصویر برش برای تمرکز روی مرکز قرمز = میانگین (میانگین (img (: ، ، 1)))٪ شدت متوسط قرمز سبز = میانگین (میانگین (img (: ،: ، 2)))٪ شدت متوسط سبز آبی = میانگین (میانگین (img (:، ، ، 3)))٪ متوسط شدت آبی در صورت سبز> قرمز و & سبز> آبی٪ بررسی کنید آیا گیاه در تصویر وجود دارد d = msgbox (['' Life found! '])؛ box نمایش یک کادر پیام با عبارت "زندگی پیدا شد!" منتظر (د) ؛ end elseif l.right> 100٪ بررسی کنید که آیا سپر نور راست پوشانده شده است r.move فاصله (-0.05)٪ حرکت roombaba به عقب 0.05 متر r.turnAngle (-20)٪ چرخش roomba 20 درجه CW img = r.getImage٪ دریافت تصویر از دوربین پای تمشک روی اتاقبا و در متغیر 'img' rect = [100 0 150 150]؛ img = imcrop (img ، rect) c تصویر برش برای تمرکز روی مرکز قرمز = میانگین (میانگین (img (: ، ، 1)))٪ شدت متوسط قرمز سبز = میانگین (میانگین (img (:، ، ، 2)))٪ شدت متوسط سبز آبی = میانگین (میانگین (img (:، ، ، 3)))٪ متوسط شدت آبی در صورت سبز> قرمز و & سبز> آبی٪ بررسی کنید آیا گیاه در تصویر وجود دارد d = msgbox (['' Life found! '])؛ box نمایش یک کادر پیام با عبارت "زندگی پیدا شد!" منتظر (د) ؛ end elseif y.leftFront <1500٪ بررسی کنید که آیا قسمت چپ/جلوی roomba از صخره r.move فاصله دارد (حرکت -0.1 ، 0.05)٪ حرکت اتاق جلو 0.1 متر با سرعت 0.05 متر بر ثانیه r.turnAngle (-5)٪ چرخش roomba 5 درج CW درجه CCW elseif y.pel <1000 Check بررسی کنید که آیا سمت چپ roomba از صخره r.move فاصله است (-0.05 ، 0.05) Move حرکت roomba به عقب 0.05 متر با سرعت 0.05 m/s r.turnAngle (-10) R چرخش roomba 10 درجه CW elseif y.right0 Run اگر دکمه فشار داده شود در صورت ادامه == 1 i = 0٪ ادامه جستجوی زندگی دیگر i = 1٪ پایان حالت LIFE پایان پایان پایان elseif تنظیم == 2٪ بررسی اینکه آیا تنظیم "ROUGH TERRAIN" انتخاب شده است i = 0 در حالی که i == 0 r.setLEDDigits (num2str ('RGH'))٪ نمایش 'Rough' در نمایشگر LED برای i = 1: 1000 r.setDriveVelocity (0.05) Set تنظیم سرعت درایو roomba روی 0.05 m/sx = r.getBumpers٪ بازیابی و ذخیره مقادیر سنسور سپر در ساختار "x" y = r.get CliffSensors٪ بازیابی و ذخیره مقادیر سنسور صخره در ساختار "y" اگر x.right == 1٪ بررسی کنید که آیا سپر راست فشار داده شده است r.turnAngle (10)٪ چرخش اتاق در 10 درجه CCW elseif x.left == 1٪ در صورت چپ بودن را بررسی کنید سپر r.turnAngle (-10) R بچرخانید roomba 10 درجه CW elseif x.front == 1٪ بررسی کنید که آیا سپر جلو r.turnAngle (20)٪ اتاق را بچرخانید 20 درجه CCW elseif x.rightWheelDrop == 1٪ بررسی کنید که آیا چرخ راست r.turnAngle (-20) R بچرخانید roomba 20 درجه CW elseif x.leftWheelDrop == 1٪ بررسی می شود که چرخ چپ r.turnAngle (20) room بچرخد roomba 20 درجه CCW elseif y.leftFront < 1500 Check بررسی کنید که آیا قسمت چپ جلو roomba از صخره r.move فاصله است (-0.05 ، 0.05)٪ حرکت roomba به عقب 0.05 متر با سرعت 0.05 m/s r.turnAngle (-5)٪ چرخش roomba 5 درجه CW elseif y.rightFront < 1500 Check بررسی کنید که آیا قسمت جلویی راست roomba از صخره r.move فاصله دارد (-0.05 ، 0.05)٪ حرکت roomba به عقب 0.05 متر با سرعت 0.05 m/s r.turnAngle (5)٪ چرخش roomba 5 درجه CCW elseif y.ft چپ <1000 ٪ قسمت سمت چپ را بررسی کنید f roomba is off cliff r.move فاصله (-0.05 ، 0.05) Move حرکت roomba به عقب 0.05 متر با سرعت 0.05 m/s r.turnAngle (-10) room چرخش roomba 10 درجه CW elseif y.right0 در صورت ادامه == 1 i = 0 ٪ ادامه ناهموار زمین i = 1٪ پایان زمین ناهموار انتهای پایان دیگر٪ حالت دستی i = 0 r.setLEDDigits (num2str ('USER'))٪ نمایش 'USER' در نمایشگر LED d = msgbox (['' کلیدهای جهت دار - حرکت؛ S - Stop Rover ؛ ESC - کنترل کاربر نهایی ؛ A - مکان یابی منبع]) ؛ منتظر (د) ؛ در حالی که i == 0 r.showCamera٪ باز کردن خوراک زنده دوربین پای تمشک در پنجره جداگانه D = getkey (1)٪ بازیابی کلید فشار داده شده توسط کاربر ، ذخیره مقدار ASCII به عنوان متغیر D اگر D == 30٪ بررسی کنید که آیا پیکان "بالا" r.setDriveVelocity (0.1)٪ ارسال roomba به جلو با 0.2 متر بر ثانیه elseif D == 28٪ بررسی کنید آیا پیکان "چپ" r.setDriveVelocity (0)٪ فشار داده شده است roomba را از حرکت رو به جلو یا عقب r.turnAngle متوقف کنید (15 ، 0.05) room اتاق را 45 درجه CCW با 0.05 متر بر ثانیه بچرخانید بررسی کنید که آیا پیکان "راست" r.setDriveVelocity (0)٪ جلوتر حرکت اتاقبه از جلو یا عقب r.turnAngle (-15 ، 0.05)٪ چرخش roomba 45 درجه CW با 0.05 متر بر ثانیه elseif D == 27٪ بررسی کنید کلید "esc" (فرار) فشار داده شد i = 1٪ تغییر مقدار متغیر "i" برای خروج از حلقه d = msgbox ('در حال خروج از "کنترل کاربر"')٪ به کاربر اطلاع دهید که حالت دستی در حال خروج است elseif D == 115٪ بررسی کنید که آیا کلید "s" r.setDriveVelocity (0)٪ فشار داده شده roomba from جلو یا عقب elseif D == 97٪ بررسی کنید آیا "a" فشار داده شده است image = r.getImage؛ imwrite (image، 'image.png') W = طبقه بندی (تصویر) K = حالت (W) اگر K == 3 d = msgbox ("منبع پیدا شد")٪ نمایش اگر منبع مستطیلی منتظر (d) تشخیص داده شود؛ ٪ منتظر بمانید تا کاربر جعبه پیام "d" را ببندد elseif K == 0 d = msgbox ('منبع نیست:(')٪ در صورتی که منبع مستطیلی تشخیص داده نشود منتظر بمانید (d) ؛٪ منتظر بمانید تا کاربر جعبه پیام "d" را ببندد end else d = msgbox ('ورودی کلید معتبر نیست.')٪ نمایش در صورت بستن منو توسط کاربر "انتخاب تنظیم" waitfor (d) ؛٪ منتظر بمانید تا کاربر کادر پیام "d" را ببندد منتظر بماند (d) ؛٪ منتظر بمانید کاربر برای بستن پیام "d" end end end else d = msgbox ('Goodbye')٪ در صورت بسته بودن گزینه ها منتظر می ماند (d)؛

مرحله 3: آزمایش

آزمایش کردن
آزمایش کردن

پس از نوشتن کد ، باید Roomba خود را آزمایش کنید. اگرچه ممکن است کد شما درست به نظر برسد ، اما بسیاری از مقادیر شما ، مخصوصاً برای رنگ یا شکل ، باید تغییر کنند تا اشیایی را که می خواهید Roomba شما آنها را به درستی تشخیص دهد ، به درستی تشخیص دهید.

مرحله 4: خروجی های بصری را مشاهده کنید

مشاهده خروجی های بصری
مشاهده خروجی های بصری
مشاهده خروجی های بصری
مشاهده خروجی های بصری

اینکه آیا Roomba خود را بر اساس خروجی های بصری برنامه ریزی کرده اید یا نه ، بسیار واضح خواهد بود.

خروجی ها عبارتند از:

  • تشخیص شکل: توانایی Roomba در تشخیص صحیح اشکال به منظور یافتن مواد معدنی مناسب
  • مانورهای ناهموار زمین: از صخره ها یا مناطق تاریک جلوگیری می کند
  • حالت دستی: تغذیه زنده و قابلیت کنترل Roomba
  • تصاویر: تصاویر مواد معدنی
  • Life Found !: یک جعبه متن MatLab که نشان می دهد گیاه شما حیات ارگانیک را شناسایی کرده است.

این پایان آموزش ماست ، از Mars Expedition Rover جدید خود لذت ببرید!

توصیه شده: