Inhaltsverzeichnis:
- Schritt 1: Initialisierung und Sensoren
- Schritt 2: Daten abrufen
- Schritt 3: Mission beenden
- Schritt 4: Fazit
Video: Roomba Explorer - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
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
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
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:
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