Inhaltsverzeichnis:
- Schritt 1: Abrufen der Bibliotheken
- Schritt 2: Schreiben der Programme
- Schritt 3: Code
- Schritt 4: Ausführen des Codes
Video: Mars Roomba Project UTK - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
HAFTUNGSAUSSCHLUSS: DIES FUNKTIONIERT NUR, WENN DER ROOMBA IN A. AUFGESTELLT IST
SEHR SPEZIFISCHE ART UND WEISE, DIESE ANLEITUNG WURDE FÜR STUDIERENDE UND FAKULTÄT DER UNIVERSITÄT VON TENNESSEE ERSTELLT UND BEABSICHTIGT
Dieser Code wird verwendet, um einen Roomba einzurichten, um lokal geschriebenen und gespeicherten Code in MATLAB auszuführen. Dies funktioniert nicht, wenn Sie die erforderlichen Bibliotheken nicht von der Website der University of Tennessee abrufen können. Wenn Sie über die Bibliotheken verfügen, können Sie diese verwenden, um Ihren eigenen Roomba mit den Funktionen in der Bibliothek zu programmieren. In diesem Instructable erfahren Sie, wie Sie die Bibliotheken installieren, einen Ordner für den gesamten Code erstellen und das Programm, das wir unten bereitgestellt haben, codieren und verwenden.
Benötigtes Material:
· Roomba
· MATLAB
· Raspberry Pi und Pi-Kamera
Schritt 1: Abrufen der Bibliotheken
Auf der Engineering-Website steht eine Toolbox/Bibliothek zur Verfügung, laden Sie sie herunter und legen Sie sie in einen neuen Ordner. Dieser Ordner muss alle Projektarbeitsdateien enthalten, da jede Funktion, die in einem von Ihnen erstellten Programm verwendet wird, auf die Bibliothek verweisen muss. Nachdem Sie dies getan haben, können Sie mit der Arbeit an Ihren Programmen beginnen
Schritt 2: Schreiben der Programme
Es gibt eine ganze Reihe von Funktionen, die im Programm verwendet werden können, diese Funktionen können mit dem Befehl "doc roomba" aufgerufen werden. Mit diesen Funktionen können Sie Ihren Roomba auf viele verschiedene Arten steuern. Der unten angegebene Code verwendet die Stoßsensoren, Lichtbalkensensoren, Kameras und Klippensensoren auf unterschiedliche Weise, um einen Mars-Rover zu erstellen. Wir haben die Stoßsensoren verwendet, um zu erkennen, wenn der Roomba auf ein Objekt trifft. Wenn dies passiert, fährt der Roboter rückwärts, dreht sich um und bewegt sich weiter. Bevor der Roomba auf ein Objekt trifft, erkennt der Lichtbalken das Objekt und verlangsamt den Roomba, sodass der Roomba weniger beschädigt/beeinträchtigt wird, wenn er gegen das Objekt stößt, um den Stoßsensor zu aktivieren. Die Kamera sucht nach Wasser oder Lava auf der Oberfläche. Wenn keine Flüssigkeit gefunden wird, sucht der Roboter weiter, wenn Wasser gefunden wird, benachrichtigt der Roboter die Bediener. Die Klippensensoren sollen den Roboter stoppen, wenn er sich einer Klippe nähert. Wenn der Roboter eine Klippe erkennt, fährt er rückwärts und dreht sich um, um einen Sturz zu vermeiden.
Schritt 3: Code
Kopieren Sie diese und fügen Sie sie in eine MATLAB-Datei ein, die sich im selben Ordner wie die Bibliotheken befindet
functionMainRoombaFile(r)
r.setDriveVelocity(0.1, 0.1)
while true % Infinte while-Schleife, um den Code am Laufen zu halten
dontFall = cliffCheck(r) % Weist die Variable 'dontFall' der Funktion 'cliffCheck' zu
if dontFall % if-Anweisung, um im Code fortzufahren, nachdem 'cliffCheck' abgeschlossen ist
r.setDriveVelocity(0.1, 0.1) % Hält Roomba in Bewegung, nachdem 'cliffCheck' abgeschlossen ist
end % beendet 'dontFall' if-Anweisung
Bumper=bumpcheck(r) % Weist die Variable 'bumper' der Funktion 'bumpcheck' zu
if Bumper % if Anweisung, um im Code fortzufahren, nachdem 'bumpcheck' abgeschlossen ist
r.setDriveVelocity(0.1, 0.1) % Hält Roomba in Bewegung, nachdem der 'Bumpcheck' abgeschlossen ist
end % beendet 'Stoßstange' if-Anweisung
liquids = LiquidCheck(r) % Weist die Variable 'liquids' der Funktion 'LiquidCheck' zu
if liquids % if-Anweisung, um im Code fortzufahren, nachdem 'LiquidCheck' abgeschlossen ist
r.setDriveVelocity(0.1, 0.1) % Hält Roomba in Bewegung, nachdem 'LiquidCheck' abgeschlossen ist
end % beendet 'Flüssigkeiten' if-Anweisung
lightbumper=lightcheck(r) % Weist die Variable 'lightbumper' der Funktion 'lightcheck' zu
pause(0.1) % Halten Sie kurz an, um eine kontinuierliche Schleifeniteration zu vermeiden
end % endet unendlich while Schleife
Ende % beendet Funktion
function buffer=bumpcheck(r) % Erzeugt die Funktion 'bumpcheck'
Bumpdata= r.getBumpers % Weist alle Daten des Bumpers der Variablen 'bumpdata' zu
Bumper = Bumpdata.right || Bumpdata.left || Bumpdata.front % Erstellt eine gespeicherte Variable, 'bumper', für die verschiedenen Stoßfänger
if Bumpdata.right>0 % If-Anweisung, um verschiedene Funktionen des Roomba auszuführen, wenn der Bumper angestoßen wird
r.stop % Stoppt Roomba
r.moveDistance(-0.3, 0.2) % kehrt Roomba 0.3m. um
r.turnAngle(90, 0.5) % Dreht Roomba so schnell wie möglich um 90 Grad
Ende
wenn Bumpdata.front>0
r.stop
r.moveDistance(-0,3, 0,2)
r.turnAngle(randi(270), 0.5) % Rotiert Roomba in einem zufälligen Intervall zwischen 0 und 270 Grad so schnell wie möglich
Ende
wenn Bumpdata.left>0
r.stop
r.moveDistance(-0,3, 0,2)
r.turnAngle(-90, 0.5) % Dreht Roomba so schnell wie möglich um -90 Grad
Ende
Ende
function lightbumper=lightcheck(r) % Erzeugt die 'Lightcheck'-Funktion
lightdata= r.getLightBumpers % Weist alle Daten des Lichtstoßsensors der Variablen 'lightdata' zu
lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Erstellt eine gespeicherte Variable, 'lightbumper', für die verschiedenen Light-Bumper
if lightbumper % If-Anweisung zum Aufrufen der Lightbumper-Daten von oben
if lightdata.left>10 % If-Anweisung, um verschiedene Funktionen des Roomba auszulösen, wenn der Lichtpuffer mehr als 10 Werte erkennt
r.setDriveVelocity(0.05, 0.05) % Verlangsamt Roomba, um sich auf Stöße vorzubereiten
end % beendet die initiale if-Anweisung
if lightdata.rightCenter>10
r.setDriveVelocity(0.05, 0.05)
Ende
if lightdata.right>10
r.setDriveVelocity(0.05, 0.05)
Ende
if lightdata.leftCenter>10
r.setDriveVelocity(0.05, 0.05)
Ende
end % beendet 'lightbumper' if-Anweisung
Ende %endet Lichtcheckfunktion
Funktion dontFall = cliffCheck(r) % Erzeugt die Funktion 'cliffCheck'
data = r.getCliffSensors; % Weist alle Daten vom Klippensensor der Variablen 'data' zu
dontFall = data.left<1020 || data.leftFront<1020 || data.rightFront<1020 || data.right<1020 % Erstellt eine gespeicherte Variable, 'dontFall', für die verschiedenen Klippensensoren
if dontFall % If-Anweisung zum Aufrufen der Klippensensordaten von oben
if data.left < 1010 % If-Anweisung, dass verschiedene Funktionen des Roomba ausgeführt werden, wenn der Cliff-Sensor weniger als 1010 Werte erfasst
r.stop
r.moveDistance(-0.2, 0.2) % kehrt Roomba 0.2m. um
r.turnAngle(-90, 0.5) % Dreht Roomba so schnell wie möglich um -90 Grad
elseif data.leftFront < 1010
r.stop
r.moveDistance(-0,3, 0,2)
r.turnAngle(90, 0.5) % Dreht Roomba so schnell wie möglich um 90 Grad
elseif data.rightFront < 1010
r.stop
r.moveDistance(-0,3, 0,2)
r.turnAngle(90, 0.5) % Dreht Roomba so schnell wie möglich um 90 Grad
elseif data.right < 1010
r.stop
r.moveDistance(-0,3, 0,2)
r.turnAngle(90, 0.5) % Dreht Roomba so schnell wie möglich um 90 Grad
Ende
Ende
Ende
function liquids = LiquidCheck(r) % Erzeugt die Funktion 'LiquidCheck'
while true %start Endlosschleife zum Kalibrieren
img = r.getImage; % liest die Kamera des Roboters aus
image(img) % zeigt das Bild in einem Abbildungsfenster
red_mean = mean(mean(img(200, 150, 1)))% liest die durchschnittliche Anzahl roter Pixel
blue_mean = mean(mean(img(200, 150, 3)))% liest die durchschnittliche Anzahl blauer Pixel
Flüssigkeiten = red_mean || blue_mean % Erzeugt eine gespeicherte Variable, 'Liquids', für die verschiedenen Farbvariablen
if liquids % If-Anweisung zum Aufrufen der Bilddaten von oben
if red_mean>170 % If-Anweisung, um verschiedene Funktionen des Roomba auszulösen, wenn die Kamera eine mittlere rote Farbe von mehr als 170. sieht
r.stop % stoppt roomba
r.setLEDCenterColor(255) % setzt den Kreis auf die Farbe Rot
r.setLEDDigits(); % löscht das Display
f = waitbar(0, '*EINKOMMENE NACHRICHT*'); % erstellt eine Warteleiste für eine Ladenachricht
r.setLEDDigits('HOT'); % setzt die LED-Anzeige auf die Ausgabe von 'HOT'
Pause(0.5) %Kurze Pause zum Lesen der angezeigten Informationen
r.setLEDDigits('LAVA'); % setzt LED-Anzeige auf Ausgabe 'LAVA'
Pause(0.5)
waitbar(.33, f, '*EINKOMMENE NACHRICHT*'); %erzeugt eine Erhöhung der Warteleiste
r.setLEDDigits('HOT');
Pause(0.5)
r.setLEDDigits('LAVA');
Pause(0.5)
waitbar(.67, f, '*EINKOMMENE NACHRICHT*'); % erzeugt eine Erhöhung der Warteleiste
r.setLEDDigits('HOT');
Pause(0.5)
r.setLEDDigits('LAVA');
waitbar(1, f, '*EINKOMMENE NACHRICHT*'); %vervollständigt die Warteleiste
Pause(1)
close(f) %schließt die Warteleiste
r.setLEDDigits(); % löscht die LED-Anzeige
Alle schließen %Schließt alle vorherigen Fenster
Achsen('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Löscht das Plotfenster der Achsen und des Diagramms
y = 0,5; % setzt die y-Position des Textes im Plotfenster
x = 0,06; % setzt die x-Position des Textes im Plotfenster
title('FROM MARS ROOMBA', 'fontsize', 32) % Fügt dem Plot-Fenster einen Titel hinzu
quadeqtxt = 'GEFAHR LAVA'; % Setzt die Variable 'quadeqtxt' auf Ausgabe 0
text(x, y, quadeqtxt, 'Interpreter', 'Latex', 'Schriftgröße', 36); % zeigt den Quadeq-Text im Plotfenster an
r.moveDistance(-0.2, 0.2) % kehrt den Roomba 0.2m. um
r.turnAngle(180, 0.5) %dreht den Roomba so schnell wie möglich um 180 Grad
r.setLEDCenterColor(128, 128); % setzt die mittlere LED des Roomba auf orange
schließe alle %schließt die verbleibenden offenen Fenster
elseif blue_mean>175 % If-Anweisung, um verschiedene Funktionen des Roomba zu veranlassen, wenn die Kamera eine mittlere blaue Farbe von mehr als 175. sieht
r.stop % stoppt roomba
r.setLEDCenterColor(255) % setzt den Kreis auf die Farbe Rot
r.setLEDDigits(); % löscht das Display
f = waitbar(0, '*EINKOMMENE NACHRICHT*'); % erstellt eine Warteleiste für eine Ladenachricht
r.setLEDDigits('LOOK'); % setzt die LED-Anzeige auf die Ausgabe von 'LOOK'
Pause(0.5) %Kurze Pause zum Lesen der angezeigten Informationen
r.setLEDDigits('WATR'); % setzt LED-Anzeige auf Ausgabe 'WATR'
Pause(0.5)
waitbar(.33, f, '*EINKOMMENE NACHRICHT*'); %erzeugt eine Erhöhung der Warteleiste
r.setLEDDigits('LOOK');
Pause(0.5)
r.setLEDDigits('WATR');
Pause(0.5)
waitbar(.67, f, '*EINKOMMENE NACHRICHT*'); % erzeugt eine Erhöhung der Warteleiste
r.setLEDDigits('LOOK');
Pause(0.5)
r.setLEDDigits('WATR');
waitbar(1, f, '*EINKOMMENE NACHRICHT*'); %vervollständigt die Warteleiste
Pause(1)
close(f) %schließt die Warteleiste
r.setLEDDigits(); % löscht die LED-Anzeige
Alle schließen %Schließt alle vorherigen Fenster
Achsen('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Löscht das Plotfenster der Achsen und des Diagramms
y = 0,5; % setzt die y-Position des Textes im Plotfenster
x = 0,06; % setzt die x-Position des Textes im Plotfenster
title('FROM MARS ROOMBA', 'fontsize', 32) % Fügt dem Plot-Fenster einen Titel hinzu
quadeqtxt = 'GEFUNDENES WASSER'; % Setzt die Variable 'quadeqtxt' auf Ausgabe 0
text(x, y, quadeqtxt, 'Interpreter', 'Latex', 'Schriftgröße', 36); % zeigt den Quadeq-Text im Plotfenster an
r.moveDistance(-0.2, 0.2) % kehrt den Roomba 0.2m. um
r.turnAngle(180, 0.5) %dreht den Roomba so schnell wie möglich um 180 Grad
r.setLEDCenterColor(128, 128); % setzt die mittlere LED des Roomba auf orange
schließe alle %schließt die verbleibenden offenen Fenster
end %endet 'red_mean' if-Anweisung
end %endet 'Flüssigkeiten' if-Anweisung
end % schließt unendlich while-Schleife
end % beendet Funktion 'LiquidCheck'
Schritt 4: Ausführen des Codes
Nachdem Sie den Code kopiert und in MATLAB eingefügt haben, müssen Sie sich mit dem Roomba verbinden. Sobald der Roomba verbunden ist, müssen Sie die Variable r benennen. Die Funktionen verwenden die Variable r, wenn sie sich auf den Roomba beziehen, daher muss der Roomba als Variable r definiert werden. Nach dem Ausführen des Codes sollte der Roomba wie angewiesen ausgeführt werden.
Empfohlen:
Roboterprojekt UTK 2017: 3 Schritte
Robot Project UTK 2017: Mission: Unser Ingenieurteam wurde von Froogle, einer gemeinnützigen Stiftung für Open-Source-Technologieentwicklung, eingestellt, um einen innovativen Human Assisting Mars Rover zu entwickeln. ist ein Roomba, den wir kodiert haben, um eine Serie von
Project Lux: 5 Schritte (mit Bildern)
Project Lux: Hallo und willkommen bei Project Lux! Project Lux ist ein Kleid mit integrierten LEDs. Dieses Kleid hat mehrere Interaktionsmöglichkeiten mit der Umgebung des Trägers und einfache Interaktionen. Dazu gehören Temperatur, Licht und Ton. Das Kleid hat auch ein paar
Project 2 Smart-Helm: 6 Schritte (mit Bildern)
Projekt 2 Smart-Helm: Wir, Benoot Sven, Staelens Lennert und Dujardin Laurens, mussten ein Projekt für die Schule machen. Wir mussten mit einem Studenten von IPO (Industrial Product Design) zusammenarbeiten. Er hatte die Idee, einen smarten Motorradhelm zu bauen. Er hat das Design von
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