Inhaltsverzeichnis:

MATLAB-gesteuerter Roomba - Gunook
MATLAB-gesteuerter Roomba - Gunook

Video: MATLAB-gesteuerter Roomba - Gunook

Video: MATLAB-gesteuerter Roomba - Gunook
Video: Hexapod - tripod gait and vertical obstacles 2024, November
Anonim
MATLAB-gesteuertes Roomba
MATLAB-gesteuertes Roomba
MATLAB-gesteuertes Roomba
MATLAB-gesteuertes Roomba

Ziel dieses Projekts ist es, MATLAB sowie einen modifizierten programmierbaren iRobot-Roboter zu nutzen. Unsere Gruppe kombinierte unsere Programmierkenntnisse, um ein MATLAB-Skript zu erstellen, das viele Funktionen des iRobot verwendet, einschließlich der Klippensensoren, Stoßfängersensoren, Lichtsensoren und der Kamera. Wir haben diese Sensor- und Kameramesswerte als Eingaben verwendet, sodass wir mithilfe von MATLAB-Codefunktionen und -Schleifen bestimmte Ausgaben erstellen können, die wir möchten. Wir verwenden auch das MATLAB-Mobilgerät und das Gyroskop, um eine Verbindung zum iRobot herzustellen und ihn zu steuern.

Schritt 1: Teile und Materialien

Teile und Materialien
Teile und Materialien
Teile und Materialien
Teile und Materialien
Teile und Materialien
Teile und Materialien
Teile und Materialien
Teile und Materialien

MATLAB 2018a

-Die 2018er-Version von MATLAB ist die am meisten bevorzugte Version, vor allem, weil sie am besten mit dem Code funktioniert, der mit dem mobilen Gerät verbunden ist. Der Großteil unseres Codes kann jedoch in den meisten MATLAB-Versionen interpretiert werden.

iRobot Gerät erstellen

-Dieses Gerät ist ein speziell angefertigtes Gerät, das ausschließlich zum Programmieren und Codieren dient. (Es ist kein tatsächliches Vakuum)

Raspberry Pi (mit Kamera)

- Dies ist eine kostengünstige Computerplatine, die als das Gehirn des iRobot fungiert. Es mag klein sein, aber es ist zu vielem fähig. Die Kamera ist ein zusätzliches Add-On. Es verwendet auch den Himbeer-Pi, um alle seine Funktionen und Befehle zu erhalten. Die oben abgebildete Kamera ist auf einem 3D-gedruckten Ständer montiert, der von den Engineering Fundamentals Departments der University of Tennessee erstellt wurde

Schritt 2: Roomba-Datenbankdatei

Roomba-Datenbankdatei
Roomba-Datenbankdatei

Es gibt eine Hauptdatei, die Sie benötigen, um die richtigen Funktionen und Befehle für Ihren Roomba zu verwenden. Aus dieser Datei schöpft Ihr Code Funktionen, um die Bedienung Ihres Roomba überschaubarer zu machen.

Sie können die Datei unter diesem Link oder der herunterladbaren Datei unten herunterladen

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

Schritt 3: Verbinden mit Roomba

Zuerst müssen Sie sicherstellen, dass Ihr Roboter über einen Micro-USB-Stecker mit Ihrem Raspberry Pi Board verbunden ist. Dann müssen Sie Ihren Computer und Roboter ordnungsgemäß mit demselben WLAN verbinden. Sobald dies geschehen ist, können Sie Ihren Roboter einschalten und mit dem angegebenen Befehl in der Roboterdatenbankdatei eine Verbindung zu ihm herstellen. (Setzen Sie Ihren Roboter immer hart zurück, bevor und nachdem Sie ihn verwenden). Zum Beispiel verwenden wir den Befehl "r.roomba(19)", um uns mit unserem Roboter zu verbinden und unserem Gerät die Variable r zuzuweisen. Dies bezieht sich auf die Datenbankdatei, die unsere Variable als Struktur einrichtet, auf die wir jederzeit verweisen können.

Schritt 4: Der Code

Der Code
Der Code
Der Code
Der Code

Wir haben den vollständigen Code unten angehängt, aber hier ist eine kurze Übersicht, die die wichtigen Elemente in unserem Skript hervorhebt. Wir haben alle Sensoren sowie die Kamera genutzt, um das Potenzial unseres Roboters voll auszuschöpfen. Wir haben auch Code eingefügt, der es uns ermöglichte, ein mobiles Gerät mit unserem Roboter zu verbinden und sein Gyroskop zur manuellen Steuerung zu verwenden.

Wir begannen mit dem einfachen Befehl "r.setDriveVelocity(.06)", der die Vorwärtsgeschwindigkeit des Roboters auf 0,06 m/s setzt. Dies dient nur dazu, den Roboter vorher in Bewegung zu setzen

Dann wird unser Hauptskript mit einer while-Schleife gestartet, die die Daten des gegebenen Roboters abruft, indem Strukturen erstellt werden, die wir in bedingten Anweisungen unten referenzieren und verwenden können der Roboter liest mit seinen Sensoren. Wir richten es so ein, dass der Roboter seine Klippensensoren liest und einem schwarzen Pfad folgt

while true % while Schleife geht, bis etwas "falsches" auftritt (in diesem Fall geht es unendlich weiter) data = r.getCliffSensors; data2 = r.getBumpers;% ruft kontinuierlich Daten über die Klippensensorwerte ab und weist sie einer Variablen zu % img = r.getImage; % Nimmt ein Bild von der montierten Kamera auf % image(img); % Zeigt das aufgenommene Bild % red_mean = mean(mean(img(:,:, 1)));% Nimmt den Durchschnittswert für die grüne Farbe, wenn data.rightFront < 2000 r.turnAngle(-2); % dreht den Roomba um ungefähr 0,2 Grad im Uhrzeigersinn, sobald der Wert für die rechten vorderen Klippensensoren unter 2000 r.setDriveVelocity(.05) fällt; elseif data.leftFront data.leftFront && 2000 > data.rightFront r.moveDistance(.1); % weist den Roomba an, mit ca. 0,2 m/s vorwärts zu fahren, wenn beide Werte von den rechten vorderen und linken vorderen Sensoren unter 2000 % r.turnAngle(0) fallen; % weist den Roomba an, sich nicht zu drehen, wenn die oben genannten Bedingungen zutreffen

elseif data2.right == 1 r.moveDistance(-.12); r. Drehwinkel(160); r.setDriveVelocity(.05); elseif data2.left == 1 r.moveDistance(-.2); r. Drehwinkel(5); r.setDriveVelocity(.05); elseif data2.front == 1 r.moveDistance(-.12); r. Drehwinkel(160); r.setDriveVelocity(.05);

Nach dieser while-Schleife geben wir eine weitere while-Schleife ein, die die durch die Kamera erhaltenen Daten auslöst. Und wir verwenden eine if-Anweisung innerhalb dieser while-Schleife, die ein Bild mit einem bestimmten Programm (alexnet) erkennt und sobald es das Bild identifiziert, sofort die Fernbedienung des Mobilgeräts auslöst

anet = alexnet; % Weist alexnet Deep Learning einer Variablen zu while true % Infinite while loop img = r.getImage; img = imresize(img, [227, 227]); label = klassifizieren(anet, img); if label == "Papiertuch" || label == "Kühlschrank" label = "Wasser"; Endbild(img); title(char(label)); gezeichnet;

Die while-Schleife, die es uns ermöglicht, das Gerät mit unserem Telefon zu steuern, ruft diese Daten vom Gyroskop des Telefons ab und wir stecken sie in eine Matrix, die kontinuierlich Daten zurück in MATLAB auf dem Computer überträgt. Wir verwenden eine if-Anweisung, die die Daten der Matrix liest und eine Ausgabe ausgibt, die das Gerät basierend auf bestimmten Werten des Gyroskops des Telefons bewegt. Es ist wichtig zu wissen, dass wir die Orientierungssensoren des Mobilgeräts verwendet haben. Die oben erwähnte Eins-zu-Drei-Matrix wird nach jedem Element der Ausrichtungssensoren des Telefons kategorisiert, das heißt Azimut, Neigung und Seite. Die if-Anweisungen haben Bedingungen geschaffen, die besagten, wenn die Seite die Werte 50 überschreitet oder unter -50 fällt, dann bewegt sich der Roboter eine bestimmte Strecke vorwärts (positiv 50) oder rückwärts (negative 50). Das gleiche gilt für den Tonhöhenwert. Wenn der Steigungswert den Wert von 25 überschreitet oder unter -25 fällt, dreht sich der Roboter in einem Winkel von 1 Grad (positive 25) oder minus 1 Grad (negative 25)

while true pause(.1) % Pause von 0,5 Sekunden, bevor jeder Wert übernommen wird Controller=iphone. Orientation; % Weist die Matrix für die Werte der Ausrichtung des iPhones einer Variablen zu Azimuthal=Controller(1); % Weist den ersten Wert der Matrix einer Variablen zu Pitch=Controller(2); % Weist den zweiten Wert der Matrix einer Variablen zu (nach vorne und hinten neigen, wenn das iPhone seitwärts gehalten wird) Side=Controller(3); % Weist den dritten Wert der Matrix einer Variablen zu (nach links und rechts neigen, wenn das iPhone seitwärts gehalten wird) % Verursacht eine Ausgabe basierend auf der Ausrichtung des Telefons, wenn Seite > 130 || Seite 25 r.moveDistance(-.1) % Bewegt den Roomba ca. 0,1 Meter nach hinten, wenn das iPhone um mindestens 25 Grad nach hinten geneigt ist elseif Seite 25 r.turnAngle(-1) % Dreht den Roomba um ca. 1 Grad gegen den Uhrzeigersinn, wenn das iPhone ist um mindestens 25 Grad nach links geneigt sonst wenn Pitch < -25 r.turnAngle(1) % Dreht den Roomba um ungefähr 1 Grad im Uhrzeigersinn, wenn das iPhone um mindestens 25 Grad geneigt ist

Dies sind nur die Highlights der wichtigsten Teile unseres Codes, die wir hinzugefügt haben, wenn Sie einen Abschnitt zu Ihrem Vorteil schnell kopieren und einfügen müssen. Unser gesamter Code ist jedoch bei Bedarf unten angehängt

Schritt 5: Fazit

Dieser Code, den wir geschrieben haben, wurde speziell für unseren Roboter sowie für unsere Gesamtvision des Projekts entwickelt. Unser Ziel war es, all unsere MATLAB-Codierungskenntnisse zu nutzen, um ein gut gestaltetes Skript zu erstellen, das die meisten Funktionen des Roboters nutzt. Die Verwendung des Telefoncontrollers ist nicht so schwierig, wie Sie vielleicht denken, und wir hoffen, dass unser Code Ihnen helfen kann, das Konzept hinter der Codierung eines iRobots besser zu verstehen.

Empfohlen: