Inhaltsverzeichnis:

Garden Helper Roomba Bot - Gunook
Garden Helper Roomba Bot - Gunook

Video: Garden Helper Roomba Bot - Gunook

Video: Garden Helper Roomba Bot - Gunook
Video: Meet Tertill 2024, November
Anonim
Gartenhelfer Roomba Bot
Gartenhelfer Roomba Bot

Kiara Myers, Ahmad Alghadeer und Madison Tippet

Zweck:

Diese Anleitung zeigt Ihnen, wie Sie einen Roomba Bot mit MATLAB programmieren, um durch einen Garten zu navigieren und kreisförmige Früchte / Gemüse zu erkennen, die reif genug sind, um basierend auf ihrer Größe gepflückt zu werden. Dieser Roboter sendet Ihnen auch eine E-Mail und informiert Sie darüber, wie viele Früchte zur Ernte bereit sind und welchen Weg sie zurückgelegt haben.

Merkmale:

  • Verwendet Lichtsensoren, um Wände zu erkennen und sich leicht zu drehen, um sie nicht zu treffen
  • Verwendet Stoßsensoren, um das Programm zu unterbrechen, wenn es am Ende des Gartens auf den Felsen trifft
  • Verwendet Bildverarbeitung, um einen Kreis im Garten zu erkennen und dann seinen Radius zu bestimmen
  • Verwendet Klippensensoren, um ein farbiges Band zu erkennen, das das Vorhandensein einer Frucht anzeigt

Schritt 1: Materialien und Zubehör:

  • Ein Laptop
  • MATLAB 2017
  • Roomba Staubsauger
  • Himbeer-Pi
  • Holzblöcke
  • Weißes Papier
  • Schwarzes Papier
  • Farbiges Klebeband/dünner Streifen farbiges Papier
  • Großer Fels

Schritt 2:

Schritt 3: Zusammenbau Ihres "Gartens"

Zusammenbau Ihres
Zusammenbau Ihres
  1. Nimm dein schwarzes Papier und schneide Kreise in verschiedenen Größen aus
  2. Klebe diese schwarzen Kreise auf ein großes weißes Papier

    Dieser Kontrast ist notwendig, wenn eine Frucht erkannt wird

  3. Verwenden Sie Ihre Holzblöcke, um einen labyrinthartigen Gartenpfad zu bauen, auf dem Ihr Roboter navigieren kann

    Wir haben einen U-förmigen Weg gewählt, wie oben abgebildet

  4. Fügen Sie am Ende Ihres Gartens einen Stein oder eine Tür oder ein anderes Objekt hinzu, damit Ihr Roboter weiß, dass er fertig ist
  5. Kleben Sie Ihr weißes Papier mit dem Kreis an die Wände des Gartens

    Wir haben es mit Eimern angeklebt, weil unsere Wände zu kurz für die Kamera waren

  6. Legen Sie farbiges Klebeband/dünnen Streifen farbiges Papier auf den Boden vor den Früchten

Schritt 4: Schreiben des Codes

Durch den Garten navigieren

Verwenden von Stoßsensoren: Um das Programm auszuführen, platzieren wir die Codierung in einer while-Anweisung, die verschiedene if-Anweisungen durchläuft, bis der Code kaputt ist. Wenn einer der Stoßfänger getroffen wird, wird sein Wert gleich true (was im Booleschen Wert 1 ist). Eine if-Anweisung wird verwendet, um den Code zu unterbrechen, wenn einer ihrer Werte gleich 1 ist.

Verwendung von Cliff-Sensoren: Innerhalb der while-Anweisung verwenden wir eine if-Anweisung, um dem Roomba mitzuteilen, wann er am Standort einer Anlage angekommen ist. Der Roomba erkennt das farbige Band auf dem Boden, indem er die Rotschwelle untersucht, die die Klippensensoren erfassen. Wenn der linke oder rechte Klippensensor eine Farbe mit einem höheren Schwellenwert als der des Bodens erkennt, stoppt er den Roboter für 2 Sekunden (mit dem Pause-Befehl). Während dieser 2 Sekunden nimmt der Roomba ein Bild der Frucht auf und zeigt es an. Stellen Sie mit dem eingebauten Befehl imfindcircles einen Bereich für die Radien Ihrer Kreise ein, und Ihr Roomba findet Ihre sogenannte Frucht.

Bildverarbeitung verwenden: In die if-Anweisung betten wir eine weitere if-Anweisung ein, die besagt: Wenn der erkannte Radius, radii3, größer oder gleich unserer Mindestanforderung an eine reife Frucht, r1 ist (dies entscheiden Sie), dann zählen und anzeigen auf der Roomba wie viele Früchte fertig sind und drehen weiter durch den Garten. Wenn nicht, biegen Sie ab, um durch den Garten fortzufahren. Hinweis: Möglicherweise müssen Sie den Drehwinkel anpassen, da jeder Roomba anders ist

Verwenden von Light-Bumpern: In einer anderen if-Anweisung werden die Light-Bumper analysiert, um sicherzustellen, dass keiner von ihnen den von uns festgelegten Schwellenwert überschreitet. Wenn entweder die linke, rechte, linke Mitte, rechte Mitte, linke vordere oder rechte Frontlicht-Stoßstange über die Schwelle geht, dreht sich der Roomba leicht im entsprechenden Winkel, um ein Aufprallen gegen eine Wand zu vermeiden. Daher navigieren Sie durch das Labyrinth.

Der Rest des Codes wird verwendet, um den Weg des Roomba zu zeichnen und dann die Ergebnisse an Ihre E-Mail zu senden

Schritt 5: Kopieren Sie den Code

% Zweck: Anhand ihrer Größe durchquert der Roomba einen Garten und unterscheidet Gemüse/Früchte, die zum Abholen bereit sind. % Eingänge: Lightbump-Sensoren, Cliff-Sensoren, Bump-Sensoren, Bild von der Kamera % Ausgänge: Immer wenn die Lichtsensoren den Schwellenwert überschreiten, dreht sich der Roomba und nimmt ein Bild auf, piepst, wenn der Radius von % Gemüse/Obst innerhalb eines bestimmten Bereichs liegt. Der Code bricht ab, wenn Roomba auf ein Objekt stößt, sendet dem Astronauten eine E-Mail darüber, wie viele Früchte zum Aufnehmen bereit sind und sendet eine Kartierung der Bewegung des Roomba. % Verwendung: If- und while-Anweisungen, Plot-Befehle, E-Mail-Code von MATLAB

k=0

tic

timerVal=tic

während wahr

v=.2; % Geschwindigkeit r.setDriveVelocity(v, v);%roomba vorwärts gehen L=r.getLightBumpers; LC=L.linksMitte; Rr=L.rechts; Lf=L.links; RC=L.rechtsMitte; LF=L.linksvorne; RF=L.rechtsvorne; Q= 75; % Schwelle. RTH = 30; %Hohe Rotschwelle RTL=10; %Untere rote Schwelle B=r.getBumpers S=r.getCliffSensors; r1=24; r3 = 10; PL1=1800; wenn S.linksvorne > PL1 || S.rightFront > PL1 %erkennt, ob die Farbe auf dem Boden über dem Schwellenwert liegt r.stop pause(2) elapsedTime=toc(timerVal-2) tic timerVal=tic % Pause für 2 Sekunden img = r.getImage; %Bild aufnehmen imshow(img)%Bild anzeigen [centers3, radii3] = imfindcircles(img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = Viscircles (Zentren3, Radien3); %Suche nach Radienkreisen im angegebenen Bereich im Bild, wenn radii3>=r1 T=1 k=k+1 dist1=0.2.*elapsedTime %Wenn der erkannte Radius größer oder gleich dem minimalen %Anforderung an eine reife Frucht ist, dann zählt der Roomba diese Frucht elseif radii3<=r3 T=0 else T=0 dist2=0.2.*elapsedTime %Wenn nicht, dann zählt er nicht das Fruchtende

if T==1 r.setLEDDigits(num2str(k)) r.beep r.beep r.beep r.turnAngle(78) %Wenn eine Frucht erkannt wurde, dann zeige die Nummer auf Roomba an, %mache ein Geräusch und drehe elseif T==2 r.turnAngle(78) %Wenn 2 Früchte erkannt werden, dann drehen, um durch den %garten fortzufahren else r.turnAngle(78) %Wenn keine Früchte erkannt werden, dann drehen, um durch das %Gartenende fortzufahren 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) end %Wenn einer der Werte der Lichtpuffer den Schwellenwert überschreitet, dann %der Roomba dreht sich leicht in die entsprechende Richtung, um zu vermeiden, dass % gegen eine Wand stößt

wenn B.rechts ==1 || B.links==1 || B.front==1 dist3=0.2.*elapsedTime r.stop r.beep('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle(360) %Wenn einer der Bumber werden getroffen, dann spielt der Roomba Sound, dreht sich herum, %und knackt den Code

Ende brechen

end Scatter(0.533, 0, '^') halten Scatter(0.533, dist1, '<') halten Scatter(-dist2, dist1, 'v') halten Scatter(-dist2, 0, 'd') saveas (gcf, 'Bewegung.png')

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

setpref('Internet', 'E_Mail', Mail); setpref('Internet', 'SMTP_Server', Host) props = java.lang. System.getProperties; props.setProperty('mail.smtp.user', mail); props.setProperty('mail.smtp.host', host); props.setProperty('mail.smtp.port', 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(mail, 'Hallo Astronaut! Es gibt so viele Früchte im Garten', kmsg, {'movement.png'})

Empfohlen: