Inhaltsverzeichnis:

Mars Roomba - Gunook
Mars Roomba - Gunook

Video: Mars Roomba - Gunook

Video: Mars Roomba - Gunook
Video: Roomba, mars 2011 - Robot-Maker.com 2024, Juli
Anonim
Mars Roomba
Mars Roomba

Dieses Instructable führt Sie in die Richtungen zum Betrieb eines Raspberry Pi-gesteuerten Roomba-Vakuum-Bots. Als Betriebssystem verwenden wir MATLAB.

Schritt 1: Zubehör

Was Sie sammeln müssen, um dieses Projekt durchzuführen:

  • Der Create2 Roomba Staubsauger-Bot von iRobot
  • Himbeer-Pi
  • Raspberry Pi Kamera
  • Die neueste Version von MATLAB
  • Die Roomba-Installations-Toolbox für MATLAB
  • MATLAB-Anwendung für ein Mobilfunkgerät

Schritt 2: Die Problemstellung

Die Problemstellung
Die Problemstellung

Wir wurden beauftragt, mit MATLAB einen Rover zu entwickeln, der auf dem Mars eingesetzt werden könnte, um Wissenschaftler beim Sammeln von Planetendaten zu unterstützen. Die Funktionen, die wir in unserem Projekt adressierten, waren Fernbedienung, Objektaufprallerkennung, Wassererkennung, Lebenserkennung und Bildverarbeitung. Um diese Leistungen zu erreichen, haben wir mit den Roomba-Toolbox-Befehlen programmiert, um die vielen Funktionen von iRobots Create2 Roomba zu manipulieren.

Schritt 3: Bluetooth-Fernbedienung

Bluetooth-Fernbedienung
Bluetooth-Fernbedienung

Diese Folie führt den Code durch, um die Bewegung des Roomba mithilfe der Bluetooth-Funktionen Ihres Smartphones zu steuern. Laden Sie zunächst die MATLAB-Anwendung auf Ihr Smartphone herunter und melden Sie sich bei Ihrem Mathworks-Konto an. Gehen Sie nach der Anmeldung zu "Mehr", "Einstellungen" und stellen Sie eine Verbindung zu Ihrem Computer über die IP-Adresse her. Gehen Sie nach der Verbindung zurück zu "Mehr" und wählen Sie "Sensoren". Tippen Sie auf den dritten Sensor in der oberen Symbolleiste des Bildschirms und tippen Sie auf Start. Jetzt ist Ihr Smartphone eine Fernbedienung!

Der Code lautet wie folgt:

während 0 == 0

Pause(.5)

PhoneData = M. Orientation;

Azi = Telefondaten(1);

Tonhöhe = PhoneData(2);

Seite = PhoneData(3);

Stöße = r.getBumpers;

wenn Seite>80 || Seite<-80

r.stop

r.beep('C, E, G, C^, G, E, C')

brechen

elseif Seite>20 && Seite<40

r. Drehwinkel(-5);

sonst Seite>40

r. Drehwinkel (-25);

sonst Seite-40

r. Drehwinkel(5);

sonst Seite <-40

r. Drehwinkel (25);

Ende

wenn Tonhöhe >10 && Tonhöhe<35

r.moveDistance(.03)

elseif Tonhöhe>-35 && Tonhöhe<-10

r.moveDistance(-.03)

Ende

Ende

Schritt 4: Auswirkungserkennung

Auswirkungserkennung
Auswirkungserkennung

Eine weitere Funktion, die wir implementiert haben, bestand darin, den Aufprall des Roomba auf ein Objekt zu erkennen und dann seinen aktuellen Weg zu korrigieren. Dazu mussten wir Bedingungen mit den Messwerten der Stoßfängersensoren verwenden, um festzustellen, ob ein Objekt getroffen wurde. Wenn der Roboter auf ein Objekt trifft, fährt er 0,2 Meter zurück und dreht sich in einem Winkel, der von der Stoßstange bestimmt wird. Sobald ein Element getroffen wurde, erscheint ein Menü mit dem Wort "oof".

Der Code wird unten angezeigt:

während 0 == 0

Stöße = r.getBumpers;

r.setDriveVelocity(.1)

wenn Unebenheiten.links == 1

msgbox('Uff!');

r.moveDistance(-0.2)

r.setTurnVelocity(.2)

r. Drehwinkel(-35)

r.setDriveVelocity(.2)

elseif Beulen.vorne == 1

msgbox('Uff!');

r.moveDistance(-0.2)

r.setTurnVelocity(.2)

r. Drehwinkel(90)

r.setDriveVelocity(.2)

elseif Beulen.rechts == 1

msgbox('Uff!');

r.moveDistance(-0.2)

r.setTurnVelocity(.2)

r. Drehwinkel(35)

r.setDriveVelocity(.2)

elseif Bumps.leftWheelDrop ==1

msgbox('Uff!');

r.moveDistance(-0.2)

r.setTurnVelocity(.2)

r. Drehwinkel(-35)

r.setDriveVelocity(.2)

elseif Stöße.rightWheelDrop ==1

msgbox('Uff!');

r.moveDistance(-0.2)

r.setTurnVelocity(.2)

r. Drehwinkel(35)

r.setDriveVelocity(.2)

Ende

Ende

Schritt 5: Lebenserkennung

Lebenserkennung
Lebenserkennung

Wir haben ein Lebenserkennungssystem codiert, um die Farben von Objekten davor zu lesen. Die drei Arten von Leben, für die wir kodiert haben, sind Pflanzen, Wasser und Außerirdische. Dazu haben wir die Sensoren codiert, um die Durchschnittswerte von Rot, Blau, Grün oder Weiß zu berechnen. Diese Werte wurden mit den manuell eingestellten Schwellenwerten verglichen, um die Farbe zu bestimmen, die die Kamera betrachtet. Der Code würde auch den Pfad zum Objekt darstellen und eine Karte erstellen.

Der Code lautet wie folgt:

t = 10;

ich = 0;

während t == 10

img = r.getImage; imshow(img)

Pause(0.167)

i = i + 1;

red_mean = mean(mean(img(:,:, 1)));

blue_mean = mean(mean(img(:,:, 3)));

green_mean = mean(mean(img(:,:, 2)));

white_mean = (blue_mean + green_mean + red_mean) / 3; % wollen dieses Wert ca. 100

neun_plus_ten = 21;

green_threshold = 125;

blue_threshold = 130;

white_threshold = 124;

red_threshold = 115;

während nine_plus_ten == 21 %grün - Leben

if green_mean > green_threshold && blue_mean < blue_threshold && red_mean < red_threshold

r.moveDistance(-.1)

a = msgbox('mögliche Lebensquelle gefunden, Standort eingezeichnet');

Pause(2)

löschen(a)

[y2, Fs2] = Audioread('z_speak2.wav');

Ton(y2, Fs2)

Pause(2)

%plant = r.getImage; %imshow(Pflanze);

%save('plant_img.mat', Pflanze');

%Plot-Standort in Grün

ich = 5;

brechen

anders

neun_plus_ten = 19;

Ende

Ende

neun_plus_ten = 21;

während nine_plus_ten == 21 %blau - woder

if blue_mean > blue_threshold && green_mean < green_threshold && white_mean < white_threshold && red_mean < red_threshold

r.moveDistance(-.1)

a = msgbox('eine Wasserquelle wurde gefunden, Ort eingezeichnet');

Pause(2)

löschen(a)

[y3, Fs3] = Audioread('z_speak3.wav');

Ton(y3, Fs3);

%woder = r.getImage; %imshow(woder)

%save('water_img.mat', woder)

%Plot-Standort in Blau

ich = 5;

brechen

anders

neun_plus_ten = 19;

Ende

Ende

neun_plus_ten = 21;

while nine_plus_ten == 21 %white - Aliens MonkaS

if white_mean > white_threshold && blue_mean < blue_threshold && green_mean < green_threshold

[y5, Fs5] =audioread('z_speak5.wav');

Ton(y5, Fs5);

Pause(3)

r.setDriveVelocity(0,.5)

[ys, Fss] =audioread('z_scream.mp3');

Ton(ys, Fss);

Pause(3)

r.stop

% alien = r.getImage; %imshow(fremd);

% save('alien_img.mat', fremd);

ich = 5;

brechen

anders

neun_plus_ten = 19;

Ende

Ende

wenn ich == 5

a = 1; %Winkel

t = 9; %beende große Schleife

ich = 0;

Ende

Ende

Schritt 6: Führen Sie es aus

Nachdem der gesamte Code geschrieben wurde, kombinieren Sie ihn in einer Datei und voila! Ihr Roomba-Bot ist jetzt voll funktionsfähig und funktioniert wie angekündigt! Das Bluetooth-Steuerelement sollte sich jedoch entweder in einer separaten Datei befinden oder mit %% vom Rest des Codes getrennt werden.

Viel Spaß mit Ihrem Roboter !!

Empfohlen: