Inhaltsverzeichnis:
- Schritt 1: Materialien und Zubehör:
- Schritt 2:
- Schritt 3: Zusammenbau Ihres "Gartens"
- Schritt 4: Schreiben des Codes
- Schritt 5: Kopieren Sie den Code
Video: Garden Helper Roomba Bot - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:21
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"
- Nimm dein schwarzes Papier und schneide Kreise in verschiedenen Größen aus
-
Klebe diese schwarzen Kreise auf ein großes weißes Papier
Dieser Kontrast ist notwendig, wenn eine Frucht erkannt wird
-
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
- 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
-
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
- 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:
So fügen Sie einen interaktiven Bot in Discord hinzu – wikiHow
Wie man einen interaktiven Bot in Discord hinzufügt: In diesem Tutorial werde ich zeigen, wie man einen eigenen interaktiven Bot erstellt, der mit einigen wenigen Kommandos funktioniert. Discord ist eine Skype/Whats-App-Social-Media-App, die Gamer zusammenbringt. Sie können einen eigenen Kanal haben, überprüfen, welches Spiel jedes Mitglied spielt
Smart Garden "SmartHorta": 9 Schritte
Smart Garden "SmartHorta": Hallo Leute, Diese Anleitung wird das College-Projekt eines intelligenten Gemüsegartens präsentieren, der eine automatische Pflanzenbewässerung bietet und über eine mobile App gesteuert werden kann. Das Ziel dieses Projekts ist es, Kunden zu bedienen, die zu Hause pflanzen möchten
Follow-Bot: 6 Schritte
Follow-Bot: Dieses instructable wurde in Erfüllung der Projektanforderung des Makecourse an der University of South Florida (www.makecourse.com) erstellt. Dieses instructable deckt die Schritte ab, um mein Projekt neu zu erstellen. Mein Projekt war ein Rover, der
Roomba-Projekt: 5 Schritte (mit Bildern)
Roomba-Projekt: Dieses instructable wurde in Erfüllung der Projektanforderung des Makecourse an der University of South Florida (www.makecourse.com) erstellt. Dieses instructable deckt alle notwendigen Schritte und Komponenten ab, die zum Zusammenbau meines Roomba-Projekts erforderlich sind
Von Roomba zu Rover in nur 5 Schritten!: 5 Schritte
In nur 5 Schritten von Roomba zum Rover!: Roomba-Roboter sind eine unterhaltsame und einfache Möglichkeit, Ihre Zehen in die Welt der Robotik einzutauchen. In diesem Instructable werden wir detailliert beschreiben, wie man einen einfachen Roomba in einen steuerbaren Rover umwandelt, der gleichzeitig seine Umgebung analysiert. Teileliste1.) MATLAB2.) Roomb