Inhaltsverzeichnis:

Roomba Explorer - Gunook
Roomba Explorer - Gunook

Video: Roomba Explorer - Gunook

Video: Roomba Explorer - Gunook
Video: Roomba i3 — обзор робота-пылесоса от iRobot 2024, November
Anonim
Roomba Explorer
Roomba Explorer

Durch die Verwendung von MATLAB und dem Create2-Roboter von iRobot wird dieses Projekt verschiedene Bereiche eines unbekannten Ortes erkunden. Wir setzten die Sensoren des Roboters ein, um ein gefährliches Gelände zu manövrieren. Durch das Erhalten von Fotos und Video-Feeds von einem angeschlossenen Raspberry Pi konnten wir die Hindernisse bestimmen, denen der Roboter begegnen wird, und sie werden klassifiziert.

Teile und Materialien

Für dieses Projekt benötigen Sie

-ein Computer

-neueste Version von MATLAB (MATLAB R2018b wurde für dieses Projekt verwendet)

- roombaInstall-Toolbox

- Der Create2-Roboter von iRobot

-Raspberry Pi mit Kamera

Schritt 1: Initialisierung und Sensoren

Initialisierung und Sensoren
Initialisierung und Sensoren

Bevor wir mit der Programmierung begannen, haben wir die roombaInstall-Toolbox heruntergeladen, die den Zugriff auf verschiedene Komponenten des Roboters ermöglichte.

Zunächst haben wir eine GUI erstellt, um jeden Roboter zu initialisieren. Dazu müssen Sie die Nummer des Roboters als Eingabe eingeben. Dies ermöglicht den Zugriff zum Ausführen unseres Programms für den Roboter Wir haben daran gearbeitet, den Roboter dazu zu bringen, sich durch die vielen Terrains zu manövrieren, denen er begegnen würde. Wir haben die Cliff-Sensoren, Light Bump-Sensoren und Physical Bump-Sensoren implementiert, indem wir ihre Ausgänge dazu verwenden, den Roboter auszulösen, um seine Geschwindigkeit und/oder Richtung zu ändern. Wenn einer der sechs Light Bump Sensoren ein Objekt erkennt, verringert sich der von ihnen ausgegebene Wert, wodurch die Geschwindigkeit des Roboters verringert wird, um eine Kollision mit voller Geschwindigkeit zu vermeiden. Wenn der Roboter schließlich mit einem Hindernis kollidiert, melden die Physical Bump-Sensoren einen Wert größer als Null; Aus diesem Grund stoppt der Roboter, sodass es zu keinen weiteren Kollisionen kommt und mehr Funktionen ausgeführt werden können. Bei den Cliff-Sensoren lesen sie die Helligkeit des Bereichs um sie herum. Wenn der Wert größer als 2800 ist, haben wir festgestellt, dass der Roboter auf stabilem Boden und sicher steht. Wenn der Wert jedoch weniger als 800 beträgt, erkennen die Klippensensoren eine Klippe und stoppen sofort, um nicht herunterzufallen. Jeder Wert dazwischen wurde für Wasser bestimmt und führt dazu, dass der Roboter seine Aktion stoppt. Durch die Verwendung der oben genannten Sensoren wird die Geschwindigkeit des Roboters geändert, sodass wir besser feststellen können, ob eine Gefahr besteht.

Unten ist der Code (von MATLAB R2018b)

%% Initialisierung

dlgPrompts = {'Roomba-Nummer'};

dlgTitle = 'Wählen Sie Ihren Roomba';

dlgDefaults = {''};

opts. Resize = 'on';

dlgout = inputdlg(dlgPrompts, dlgTitle, 1, dlgDefaults, opts) % Fenster erstellen, das den Benutzer auffordert, seine Roomba-Nummer einzugeben

n=str2double(dlgout{1});

r = Raumba(n); % Initialisiert benutzerdefinierten Roomba %% Geschwindigkeitsbestimmung von Light Bump Sensoren während true s=r.getLightBumpers; % bekommen leichte Stoßsensoren

lbumpout_1=extractfield(s, 'links'); % nimmt die numerischen Werte der Sensoren und macht sie besser nutzbar lbumpout_2=extractfield(s, 'leftFront');

lbumpout_3=extractfield(s, 'leftCenter');

lbumpout_4=extractfield(s, 'rightCenter');

lbumpout_5=extractfield(s, 'rightFront');

lbumpout_6=extractfield(s, 'rechts');

lbout=[lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6] % konvertiert Werte in eine Matrix

sLbump=sort(lbout); %sortiert Matrix zum niedrigsten Wert kann extrahiert werden

lowLbump=sLbump(1); speed=.05+(lowLbump)*.005 % unter Verwendung des niedrigsten Wertes, der nahe Hindernisse darstellt, um die Geschwindigkeit zu bestimmen, höhere Geschwindigkeit, wenn nichts erkannt wird

r.setDriveVelocity(Geschwindigkeit, Geschwindigkeit)

Ende

% physische Stoßfänger

b=r.getBumpers; %Ausgabe wahr, falsch

bsen_1=extractfield(b, 'links')

bsen_2=extractfield(b, 'rechts')

bsen_3=extractfield(b, 'vorne')

bsen_4=extractfield(b, 'leftWheelDrop')

bsen_5=extractfield(b, 'rightWheelDrop')

Bumps=[bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump=sum(Bums)

if tbump>0 r.setDriveVelocity(0, 0)

Ende

% Klippensensoren

c=r.getCliffSensors %% 2800 sicher, sonst Wasser

csen_1=extractfield(c, 'links')

csen_2=extractfield(c, 'rechts')

csen_3=extractfield(c, 'linksvorne')

csen_4=extractfield(c, 'rechtsvorne')

Klippen=[csen_1, csen_2, csen_3, csen_4]

ordcliff=sort(Klippen)

wenn ordcliff(1) < 2750

r.setDriveVelocity(0, 0)

wenn Klippe <800

disp 'Klippe'

anders

'Wasser' ausgeben

Ende

r. Drehwinkel(45)

Ende

Schritt 2: Daten abrufen

Nachdem die physischen Stoßsensoren ausgelöst wurden, implementiert der Roboter seinen integrierten Raspberry Pi, um ein Foto des Hindernisses zu machen. Nach der Aufnahme eines Fotos ermittelt der Roboter mithilfe der Texterkennung, wenn das Bild Text enthält, was das Hindernis ist und was das Hindernis sagt.

img = r.getImage; imshow(img);

imwrite(img, 'imgfromcamera.jpg')

photo = imread('imgfromcamera.jpg')

ocrResults = ocr(Foto)

erkanntText = ocrResults. Text;

Abbildung;

imshow(photo) text(220, 0, erkannterText, 'BackgroundColor', [1 1 1]);

Schritt 3: Mission beenden

Wenn der Roboter feststellt, dass das Hindernis HOME ist, wird er seine Mission erfüllen und zu Hause bleiben. Nach Abschluss der Mission sendet der Roboter eine E-Mail-Benachrichtigung, dass er nach Hause zurückgekehrt ist, und sendet die Bilder, die er auf seiner Reise mitgenommen hat.

% Email schicken

setpref('Internet', 'SMTP_Server', 'smtp.gmail.com');

setpref('Internet', 'E_Mail', '[email protected]'); % E-Mail-Konto zum Senden von setpref('Internet', 'SMTP_Benutzername', 'E-Mail-Adresse des Absenders eingeben'); % Benutzername des Absenders setpref('Internet', 'SMTP_Password', 'Passwort des Absenders eingeben'); % Absender-Passwort

props = java.lang. System.getProperties; props.setProperty('mail.smtp.auth', 'true'); props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty('mail.smtp.socketFactory.port', '465');

sendmail('Empfangs-E-Mail eingeben', 'Roomba', 'Roomba ist nach Hause zurückgekehrt!!', 'imgfromcamera.jpg') % E-Mail-Konto zum Senden an

Der Roboter ist dann fertig.

Schritt 4: Fazit

Abschluss
Abschluss

Das enthaltene MATLAB-Programm ist vom gesamten Skript getrennt, das mit dem Roboter verwendet wurde. Stellen Sie im endgültigen Entwurf sicher, dass der gesamte Code mit Ausnahme des Initialisierungsschritts in eine while-Schleife eingefügt wird, um sicherzustellen, dass die Bumper ständig ausgeführt werden. Dieses Programm kann an die Bedürfnisse des Benutzers angepasst werden. Die Konfiguration unseres Roboters wird angezeigt.

*Erinnerung: Vergessen Sie nicht, dass die roombaInstall-Toolbox benötigt wird, damit MATLAB mit dem Roboter und dem integrierten Raspberry Pi interagieren kann.

Empfohlen: