Съдържание:

Градински помощник Roomba Bot: 8 стъпки
Градински помощник Roomba Bot: 8 стъпки

Видео: Градински помощник Roomba Bot: 8 стъпки

Видео: Градински помощник Roomba Bot: 8 стъпки
Видео: Love and Pigeons 2024, Ноември
Anonim
Градински помощник Roomba Bot
Градински помощник Roomba Bot

Киара Майърс, Ахмад Алгадир и Мадисън Типет

Предназначение:

Тази инструкция ще ви научи как да програмирате Roomba Bot, използвайки MATLAB, за да се движите през градина, откривайки плодове/зеленчуци с кръгла форма, които са достатъчно узрели, за да се берат въз основа на техния размер. Този робот също ви изпраща имейл, като ви предупреждава колко плодове са готови за бране и пътя, по който е пътувал.

Характеристика:

  • Използва сензори за светлина за откриване на стени и леко завъртане, за да се избегне ударът им
  • Използва сензори за удари, за да наруши програмата, когато удари скалата в края на градината
  • Използва обработка на изображения, за да открие кръг в градината и след това да определи радиуса му
  • Използва сензори за скали, за да открие цветна лента, която показва наличието на плод

Стъпка 1: Материали и консумативи:

  • Един лаптоп
  • MATLAB 2017 г.
  • Прахосмукачка Roomba
  • Малина Пи
  • Дървени блокчета
  • Бяла хартия
  • Черна хартия
  • Цветна лента/тънка лента от цветна хартия
  • Голяма скала

Стъпка 2:

Стъпка 3: Сглобяване на вашата „градина“

Сглобяването на вашето
Сглобяването на вашето
  1. Вземете черната си хартия и изрежете кръгове с различни размери
  2. Залепете тези черни кръгове върху голяма бяла хартия

    Този контраст ще бъде необходим при откриване на плод

  3. Използвайте дървените си блокове, за да изградите градинска пътека, подобна на лабиринт, за да може вашият робот да се движи

    Избрахме П-образна пътека, както е на снимката по-горе

  4. В края на вашата градина добавете камък или врата или друг предмет, за да може роботът ви да знае, че е свършен
  5. Залепете бялата си хартия с кръга върху стените на градината

    Използвахме кофи, за да го залепим, защото стените ни бяха твърде къси за камерата

  6. Поставете цветна лента/тънка лента от цветна хартия на земята пред плода

Стъпка 4: Написване на кода

Придвижване в градината

Използване на Bump Sensors: За да стартираме програмата, ние поставяме кодирането в оператор while, който циклично преминава през различни оператори if, докато кодът се счупи. Ако някоя от броните е засегната, това ще доведе до тяхната стойност, равна на true (което на булева стойност е стойност 1). Оператор if се използва за разбиване на кода, когато една от техните стойности е равна на 1.

Използване на сензори за скали: В рамките на оператора while използваме оператор if, за да съобщим на Roomba кога е пристигнал на мястото на растението. Roomba разпознава цветната лента на пода, като изследва прага на червеното, което сензорите на скалата улавят. Ако сензорът за лява или дясна скала открие цвят с по -голям праг от този на земята, той ще спре робота за 2 секунди (с помощта на команда за пауза). През тези 2 секунди Roomba ще вземе и покаже изображение на плода. Използвайки вградената команда imfindcircles, задайте диапазон за радиусите на кръговете си и вашата Roomba ще намери вашите така наречени плодове.

Използване на обработка на изображения: В рамките на оператора if, ние вграждаме друго изявление if, което казва: ако откритият радиус, radii3, е по -голям или равен на нашето минимално изискване за зрял плод, r1 (вие решавате това), след това пребройте и покажете на Roomba колко плодове са готови и се обърнете, за да продължите през градината. Ако не, завой да продължи през градината. Забележка: може да се наложи да регулирате ъгъла на завъртане, защото всяка Roomba е различна

Използване на светлинни брони: В друго изявление if светлинните брони се анализират, за да се гарантира, че нито една от тях не става по -голяма от определения ни праг. Ако лявата, дясната, лявата централна, дясната централна, лявата предна или дясната предна светлинна броня надхвърли прага, тогава Roomba ще се завърти леко в подходящия ъгъл, за да избегне удара в стена. Следователно, навигиране в лабиринта.

Останалата част от кода се използва за начертаване на пътя, изминат от Roomba и след това изпращане на резултатите до вашия имейл

Стъпка 5: Копирайте кода

% Предназначение: В зависимост от размерите си, roomba ще премине през градина и ще разграничи зеленчуци/плодове, които са готови за прибиране. % Входове: Lightbump сензори, сензори Cliff, Bump сензори, изображение от камерата % Outputs: Когато светлинните сензори са по -големи от прага, roomba ще се обърне и ще направи изображение, бипкане, ако радиусът на % зеленчуци/плодове е между определен диапазон. Кодът се прекъсва, когато Roomba се натъкне на % обект, изпраща на астронавта имейл за това колко плодове са готови да бъдат събрани % и картиране на движението на Roomba. % Употреба: Ако и докато изявления, начертаване на команди, имейл код от MATLAB

k = 0

тик

timerVal = tic

докато е вярно

v = 0,2; % скорост r.setDriveVelocity (v, v);% roomba върви напред L = r.getLightBumpers; LC = L.лев център; 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.stop пауза (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % пауза за 2 секунди img = r.getImage; %take image imshow (img)%display image [центрове3, радиуси3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = виски кръгове (центрове3, радиуси3); %потърсете кръгове с радиуси w/в определен диапазон в изображението, ако radii3> = r1 T = 1 k = k+1 dist1 = 0.2.*elapsedTime %Ако откритият радиус е по -голям или равен на минималното %изискване на зрял плод, тогава Roomba брои този плод иначе ако 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) %Ако е открит плод, тогава покажете номера на Roomba, %издавайте шум и завъртете elseif T == 2 r.turnAngle (78) %Ако бъдат открити 2 плода, завъртете, за да продължите през %градина иначе r.turnAngle (78) %Ако не се открият плодове, завъртете, за да продължите през %края на градината ако LC> Q r.stop r.turnAngle (-7) иначе ако RC> Q r.stop r.turnAngle (7) иначе ако 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) end %Ако някоя от стойностите на светлинните брони надхвърля прага, тогава %на Roomba ще се завърти леко в подходящата посока, за да избегне %удряне в стена

ако B. право == 1 || B.наляво == 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 възпроизвежда звук, завърта се, %и нарушава кода

краен край

крайно разсейване (0.533, 0, '^') задържане на разсейване (0.533, dist1, '<') задържане на разсейване (-dist2, dist1, 'v') задържане на разсейване (-dist2, 0, 'd') освен (gcf, 'Movement.png')

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

setpref ('Интернет', 'E_mail', поща); setpref ('Internet', 'SMTP_Server', host) reps = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', поща); 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', 'вярно'); props.setProperty ('mail.smtp.socketFactory.port', порт); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (поща, „Здравей астронавт! В градината има толкова много плодове“, kmsg, {'motion.png'})

Препоръчано: