Мазмұны:

Бақша көмекшісі Roomba Bot: 8 қадам
Бақша көмекшісі Roomba Bot: 8 қадам

Бейне: Бақша көмекшісі Roomba Bot: 8 қадам

Бейне: Бақша көмекшісі Roomba Bot: 8 қадам
Бейне: Тәрбиеші көмекшісі 2024, Шілде
Anonim
Бақша көмекшісі Roomba Bot
Бақша көмекшісі Roomba Bot

Киара Майерс, Ахмад Альгадир және Мэдисон Типпет

Мақсаты:

Бұл нұсқаулық сізге MATLAB көмегімен Roomba Bot бағдарламалауды үйретеді, олардың көлеміне қарай жинауға жеткілікті піскен дөңгелек пішінді жемістер/көкөністерді анықтай отырып, бақшада саяхаттауды үйренеді. Бұл робот сізге қанша жеміс жинауға дайын екендігі және ол жүріп өткен жол туралы ескертетін электрондық поштаны жібереді.

Ерекше өзгешеліктері:

  • Қабырғаларды анықтап, соқтығыспау үшін сәл бұрылу үшін жарық сенсорларын қолданады
  • Бағдаршаның соңындағы тасқа соғылған кезде бағдарламаны бұзу үшін соққы сенсорларын қолданады
  • Бақшадағы шеңберді анықтау үшін суретті өңдеуді қолданады, содан кейін оның радиусын анықтайды
  • Жемістің болуын көрсететін түрлі -түсті таспаны анықтау үшін жартасты сенсорларды қолданады

1 -қадам: материалдар мен материалдар:

  • Бір ноутбук
  • MATLAB 2017
  • Roomba вакуум тазартқышы
  • Raspberry Pi
  • Ағаш блоктар
  • Ақ қағаз
  • Қара қағаз
  • Түсті қағаздың түрлі -түсті таспасы/жұқа жолағы
  • Үлкен рок

2 -қадам:

3 -қадам: сіздің «бақшаңызды» жинау

Сіздің жинау
Сіздің жинау
  1. Қара қағазды алыңыз және әр түрлі өлшемдегі шеңберлерді кесіңіз
  2. Бұл қара шеңберлерді үлкен ақ қағазға жабыстырыңыз

    Бұл контраст жемісті анықтау кезінде қажет болады

  3. Өзіңіздің роботтарыңыз үшін лабиринт тәрізді бақша жолын құру үшін ағаш блоктарын қолданыңыз

    Біз жоғарыда көрсетілген U-тәрізді жолды таңдадық

  4. Сіздің бақшаңыздың соңына роботтың жасалынғанын білу үшін тас немесе есік немесе басқа зат қосыңыз
  5. Ақ қағазды шеңбермен бақтың қабырғаларына жабыстырыңыз

    Біз шелектерді скотчпен жаптық, өйткені біздің қабырғамыз камераға тым қысқа болды

  6. Түрлі түсті таспаны/түсті қағаздың жұқа жолағын жемістердің алдына жерге қойыңыз

4 -қадам: кодты жазу

Бақшада шарлау

Соққы сенсорларын қолдану: Бағдарламаны іске қосу үшін кодты үзілгенге дейін әр түрлі if операторларынан өтетін while операторына орналастырамыз. Егер бамперлердің кез келгені соғылса, бұл олардың мәнінің шындыққа тең болуына әкеледі (бұл логикалық мәнде 1 -ге тең). If операторы олардың мәндерінің бірі 1 -ге тең болғанда кодты бұзу үшін қолданылады.

Cliff датчиктерін қолдану: while операторының ішінде біз if операторын пайдаланып, Roomba -ға зауыт орналасқан жерге жеткенін айтамыз. Roomba едендегі түрлі -түсті таспаны жартастың сенсорлары көтеретін қызыл шегін тексеру арқылы анықтайды. Егер солға немесе оңға қиғаштық сенсоры жерге қарағанда үлкенірек шекті түс анықтаса, роботты 2 секундқа тоқтатады (кідірту пәрменін қолдана отырып). Осы 2 секунд ішінде Roomba жемістің суретін алып, көрсетеді. Пәрменге енгізілген шеңберлерді қолданып, шеңберлердің радиусына диапазон орнатыңыз, сонда сіздің Roomba сіздің жемістеріңізді табады.

Кескінді өңдеуді қолдану: if операторының ішіне біз келесі if операторын енгіземіз: егер радиусы анықталса, радиусы 3 піскен жемістерге қойылатын минималды талаптан үлкен немесе оған тең, r1 (сіз мұны өзіңіз шешесіз), содан кейін санап көрсетіңіз Roomba қанша жеміс дайын және бақша арқылы жүруді жалғастырады. Олай болмаса, кезек бақша арқылы жалғасады. Ескерту: бұрылатын бұрышты реттеу қажет болуы мүмкін, себебі әрбір Roomba әр түрлі

Жарық бамперлерін қолдану: Егер if операторының тағы бір нұсқасында жарық бамперлері олардың ешқайсысы біздің белгіленген шекті мәннен асып кетпейтініне сенімді болу үшін талданады. Егер сол, оң, сол орталық, оң орталық, сол жақ алдыңғы немесе оң жақ алдыңғы жарық бампері табалдырықтан асып кетсе, онда Roomba қабырғаға соғылмау үшін тиісті бұрышпен сәл бұрылады. Осылайша, лабиринтті шарлау.

Кодтың қалған бөлігі Roomba жасаған жолды құруға, содан кейін нәтижелерді электрондық поштаға жіберуге арналған

5 -қадам: кодты көшіріңіз

% Мақсаты: олардың мөлшеріне қарай бөлме бөлмесі бақшадан өтеді және жинауға дайын көкөністерді/жемістерді ажыратады. % Кірістер: Жарық сенсорлары, Қату сенсорлары, Соққы сенсорлары, камерадан алынған сурет % Шығу: жарық датчиктері табалдырықтан асып кеткенде, бөлме өзгереді және суретке түседі, егер % көкөністер/жемістердің радиусы белгілі бір диапазон арасында болса, сигнал береді. Roomba объектіге % соғылған кезде код бұзылады, ғарышкерге қанша жеміс алуға дайын екендігі туралы электрондық хат жібереді және бөлменің қозғалысының картасы. % Қолданылуы: Егер және операторлар, жоспарлау командалары, MATLAB электрондық пошта коды

k = 0

тик

timerVal = tic

рас болса

v =.2; % жылдамдық r.setDriveVelocity (v, v);% roomba алға жылжу L = r.getLightBampers; LC = L.leftCenter; Rr = L.құқық; Lf = L. сол жақ; RC = L.rightCenter; LF = L.leftFront; RF = L.rightFront; Q = 75; % шегі. RTH = 30; %Жоғары қызыл шекті мән RTL = 10; %Төмен қызыл шекті B = r.getBampers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; егер S.leftFront> PL1 || S.rightFront> PL1 % жердегі түстің r.stop (2) шегінен жоғары екенін анықтайды, уақытты тоқтата тұру (2) elaptedTime = toc (timerVal-2) tic timerVal = tic % 2 секундқа үзіліс img = r.getImage; %image imshow (img)%дисплей суреті [center3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = дөңгелек шеңберлер (центрлер3, радиустар3); %егер радиус3> = r1 T = 1 k = k+1 dist1 = 0.2., содан кейін Roomba бұл жемісті есептейді, егер радиус3 <= r3 T = 0 басқа T = 0 dist2 = 0,2.

егер T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Егер жеміс анықталса, онда Roomba нөмірін көрсетіңіз, %шу шығарады және бұрылады elseif T == 2 r.turnAngle (78) %Егер 2 жеміс анықталса, онда %бақша арқылы жалғастыру үшін бұрыңыз else r.turnAngle (78) %Егер ешқандай жеміс анықталмаса, %бақтың соңына дейін жалғастыру үшін бұрыңыз. егер LC> Q r.stop r.turnAngle (-7) else RC> Q r.stop r.turnAngle (7) elseif LF> Q r.stop r.turnAngle (-7) егер 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.солға == 1 || B.front == 1 dist3 = 0,2.*Өткен Уақыт r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Егер барберлер соққыға жығылады, содан кейін бөлменің дыбысы шығады, айналады, %және кодты бұзады

үзіліс соңы

шашыраудың соңы (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 ('Интернет', 'SMTP_Server', хост) тіректері = 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', 'true'); props.setProperty ('mail.smtp.socketFactory.port', порт); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'жалған'); sendmail (пошта, 'Сәлем ғарышкер! Бақшада жемістер көп', kmsg, {'motion.png'})

Ұсынылған: