فهرست مطالب:

Garden Helper Roomba Bot: 8 مرحله
Garden Helper Roomba Bot: 8 مرحله

تصویری: Garden Helper Roomba Bot: 8 مرحله

تصویری: Garden Helper Roomba Bot: 8 مرحله
تصویری: RoboVac Party#8: Roomba, Samsung, Neato, LG, Rowenta | PILE of confetti Vol.3 🥳🎊🎊🎊 2024, جولای
Anonim
Garden Helper Roomba Bot
Garden Helper Roomba Bot

کیارا مایرز ، احمد الغدیر و مدیسون تیپت

هدف:

این دستورالعمل به شما آموزش می دهد که چگونه برنامه Roomba Bot را با استفاده از MATLAB ، برای حرکت در باغ ، و تشخیص میوه ها و سبزیجات به شکل دایره ای که به اندازه کافی رسیده و بر اساس اندازه آنها قابل چیدن هستند ، بیاموزید. این ربات همچنین برای شما ایمیلی ارسال می کند و به شما اطلاع می دهد که تعداد میوه آماده چیدن و مسیری که طی کرده است.

امکانات:

  • از سنسورهای نور برای تشخیص دیوارها و چرخاندن کمی به منظور جلوگیری از برخورد با آنها استفاده می کند
  • از سنسورهای ضربه استفاده می کند تا برنامه را هنگام برخورد با سنگ در انتهای باغ خراب کند
  • از پردازش تصویر برای تشخیص یک دایره در باغ و سپس تعیین شعاع آن استفاده می کند
  • از سنسورهای صخره ای برای تشخیص نوار رنگی که نشان دهنده وجود میوه است ، استفاده می کند

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

  • یک لپ تاپ
  • متلب 2017
  • جاروبرقی رومبا
  • تمشک پای
  • بلوک های چوبی
  • کاغذ سفید
  • کاغذ سیاه
  • نوار رنگی/نوار نازک کاغذ رنگی
  • سنگ بزرگ

گام 2:

مرحله 3: جمع آوری "باغ" خود

مونتاژ شما
مونتاژ شما
  1. کاغذ سیاه خود را بردارید و دایره هایی با اندازه های مختلف ببرید
  2. این دایره های سیاه را روی یک کاغذ سفید بزرگ بچسبانید

    هنگام تشخیص یک میوه ، این تضاد ضروری خواهد بود

  3. از بلوک های چوبی خود برای ایجاد مسیر باغ پیچ و خم مانند برای حرکت ربات خود استفاده کنید

    ما مطابق تصویر بالا یک مسیر U شکل را انتخاب کردیم

  4. در انتهای باغ خود یک سنگ یا در یا چیز دیگری به ربات خود اضافه کنید تا بداند کارش تمام شده است
  5. کاغذ سفید خود را با حلقه روی دیوارهای باغ بچسبانید

    ما از سطل برای چسباندن آن استفاده کردیم زیرا دیوارهای ما برای دوربین بسیار کوتاه بودند

  6. نوار رنگی/نوار نازک کاغذ رنگی را روی زمین جلوی میوه قرار دهید

مرحله 4: نوشتن کد

حرکت در باغ

استفاده از Bump Sensors: برای اجرای برنامه ، برنامه نویسی را در یک عبارت while قرار می دهیم که تا زمانی که کد شکسته نشود ، از دستورات مختلف if عبور می کند. در صورت ضربه زدن به هر یک از ضربه گیرها ، مقدار آنها برابر true می شود (که در زبان بولی مقدار 1 است). یک عبارت if برای شکستن کد زمانی استفاده می شود که یکی از مقادیر آنها برابر 1 باشد.

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

استفاده از پردازش تصویر: در دستور if ، عبارت if دیگری را جاسازی می کنیم که می گوید: اگر شعاع تشخیص داده شده ، radii3 بیشتر یا مساوی حداقل نیاز ما به یک میوه رسیده r1 باشد (شما این را تصمیم می گیرید) ، سپس شمارش کرده و نمایش دهید Roomba چگونه بسیاری از میوه ها آماده است و به نوبه خود به ادامه در باغ. در غیر این صورت ، نوبت ادامه باغ است. توجه: ممکن است لازم باشد زاویه ای را که می چرخانید تنظیم کنید زیرا هر Roomba متفاوت است

استفاده از ضربه گیرهای نور: در دستور if دیگر ، سپرهای نور مورد تجزیه و تحلیل قرار می گیرند تا مطمئن شوند هیچ کدام از آنها بیشتر از آستانه تعیین شده ما نمی شوند. اگر سپر چراغ چپ ، راست ، چپ ، مرکز راست ، چپ جلو یا راست جلوتر از آستانه باشد ، Roomba برای جلوگیری از برخورد با دیوار کمی در زاویه مناسب می چرخد. بنابراین ، حرکت در پیچ و خم.

بقیه کد برای ترسیم مسیر انتخاب شده توسط Roomba و سپس ارسال نتایج به ایمیل شما استفاده می شود

مرحله 5: کد را کپی کنید

Pur هدف: اتاق بر اساس اندازه آنها از باغ عبور می کند و سبزیجات/میوه هایی که آماده چیدن هستند را تشخیص می دهد. ٪ ورودی ها: سنسورهای Lightbump ، سنسورهای Cliff ، سنسورهای Bump ، تصویر از دوربین٪ خروجی ها: هر زمان که سنسورهای نور از آستانه بیشتر باشند ، roomba می چرخد و عکس می گیرد ، اگر شعاع٪ سبزیجات/میوه ها بین محدوده خاصی باشد ، بوق می زند. این کد زمانی خراب می شود که roomba به an شی برخورد می کند ، به فضانورد ایمیلی در مورد تعداد میوه های آماده برای برداشت و نقشه ای از حرکت roomba ارسال می کند. ٪ استفاده: دستورات if و while ، رسم دستورات ، کد ایمیل از MATLAB

k = 0

تیک

timerVal = تیک

در حالی که حقیقت دارد

v =.2 ؛ ٪ velocity r.setDriveVelocity (v ، v) ؛٪ roomba جلو می رود L = r.getLightBumpers ؛ LC = L.leftCenter ؛ Rr = L. راست ؛ Lf = L. چپ ؛ RC = L.rightCenter؛ LF = L.leftFront؛ RF = L.rightFront؛ Q = 75 ؛ ٪ آستانه. RTH = 30 ؛ ٪ آستانه قرمز بالا RTL = 10 ؛ ٪ آستانه قرمز پایین B = r.getBumpers S = r.getCliffSensors؛ r1 = 24 ؛ r3 = 10 ؛ PL1 = 1800 ؛ اگر S.leftFront> PL1 || S.rightFront> PL1٪ تشخیص می دهد که آیا رنگ روی زمین از آستانه r بیشتر است. توقف موقت (2) elapsedTime = toc (timerVal-2) tic timerVal = tic٪ مکث به مدت 2 ثانیه img = r.getImage؛ ٪ take image imshow (img)٪ display image [center3، radii3] = imfindcircles (img، [30 50]، 'ObjectPolarity'، 'dark'، 'Sensitivity'، 0.9)؛ h = حلقه های حلقه (center3 ، radii3) ؛ ٪ اگر در radii3> = r1 T = 1 k = k+1 dist1 = 0.2*حلقه های شعاع w/در محدوده مشخص شده را جستجو کنید*زمان سپری شده٪ اگر شعاع تشخیص داده شده بزرگتر یا مساوی حداقل٪ مورد نیاز یک میوه رسیده باشد ، سپس Roomba این میوه را می شمارد elseif radii3 <= r3 T = 0 else T = 0 dist2 = 0.2.*elapsedTime٪

اگر T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) If اگر میوه ای تشخیص داده شد ، عدد را روی Roomba نمایش دهید ،٪ سر و صدا ایجاد کرده و بچرخانید elseif T == 2 r.turnAngle (78) If اگر 2 میوه تشخیص داده شد ، سپس برای ادامه از طریق٪ باغ دیگر r.turnAngle (78)٪ بپیچید اگر هیچ میوه ای تشخیص داده نشد ، سپس برای ادامه از طریق٪ پایان باغ پایان دهید if LC> Q r.stop r.turnAngle (-7) elseif RC> Q r.stop r.turnAngle (7) elseif LF> Q r.stop r.turnAngle (-7) elseif RF> Q r.stop r turnAngle (7) elseif Lf> Q r.stop r.turnAngle (-7) elseif Rr> Q r.stop r.turnAngle (7) پایان٪ اگر هر یک از مقادیر سپرهای نور از آستانه بالاتر برود ، سپس٪ Roomba کمی در جهت مناسب می چرخد تا از برخورد٪ با دیوار جلوگیری شود

اگر B.right == 1 || B.left == 1 || B.front == 1 dist3 = 0.2.*elapsedTime r.stop r.beep ('F#*2، F#*2، c، F#*2، F#*2') r.turnAngle (360)٪ در صورت وجود هر یک از شمشیرها ضربه می خورند ، سپس roomba صدا را پخش می کند ، دور می زند ،٪ و کد را می شکند

پایان شکستن

end scatter (0.533، 0، '^') hold on scatter (0.533، dist1، '<') hold on scatter (-dist2، dist1، 'v') hold on scatter (-dist2، 0، 'd') saveas (gcf ، 'Movement.png')

kmsg = num2str (k) mail = '[email protected]' password = 'Srsora123#' host = 'smtp.gmail.com' port = '465'

setpref ("اینترنت" ، "E_mail" ، نامه) ؛ setpref ('اینترنت' ، 'SMTP_Server' ، host) props = java.lang. System.getProperties؛ props.setProperty ('mail.smtp.user' ، mail) ؛ props.setProperty ('mail.smtp.host' ، میزبان) ؛ props.setProperty ('mail.smtp.port' ، بندر) ؛ props.setProperty ('mail.smtp.starttls.enable' ، 'true') ؛ props.setProperty ('mail.smtp.debug' ، 'true') ؛ props.setProperty ('mail.smtp.auth' ، 'true') ؛ props.setProperty ('mail.smtp.socketFactory.port' ، port) ؛ props.setProperty ('mail.smtp.socketFactory.class' ، 'javax.net.ssl. SSLSocketFactory') ؛ props.setProperty ('mail.smtp.socketFactory.fallback' ، 'false') ؛ sendmail (نامه ، 'سلام فضانورد! میوه های زیادی در باغ وجود دارد' ، kmsg ، {'Movement.png'})

توصیه شده: