Inhaltsverzeichnis:

UTK EF 230 MarsRoomba-Projekt Herbst 2018 – Gunook
UTK EF 230 MarsRoomba-Projekt Herbst 2018 – Gunook

Video: UTK EF 230 MarsRoomba-Projekt Herbst 2018 – Gunook

Video: UTK EF 230 MarsRoomba-Projekt Herbst 2018 – Gunook
Video: UTK - EF 230 Autonomous Vehicle Project 2024, November
Anonim
UTK EF 230 MarsRoomba-Projekt Herbst 2018
UTK EF 230 MarsRoomba-Projekt Herbst 2018

Derzeit werden Mars-Rover verwendet, um mit verschiedenen Methoden Daten auf der Marsoberfläche zu sammeln, um letztendlich mehr über das Potenzial des Planeten für mikrobielles Leben zu erfahren. Rover verwenden hauptsächlich Foto- und Bodenanalysetools zur Datenerfassung, aber Rover umfassen auch Navigationsinstrumente, Strahlungsdetektoren, atmosphärische Sensoren und einen Laser zur Verdampfung von Gesteinsproben. Das Ziel der geplanten Rover-Mission für 2020 ist größtenteils das gleiche, jedoch mit der besonderen Aufgabe, "Boden- und Gesteinsproben zu sammeln und sie auf der Oberfläche für eine mögliche Rückkehr zur Erde durch eine zukünftige Mission zwischenzuspeichern", so die NASA.

Unter der Prämisse, dass zukünftige Rover zur menschlichen Unterstützung eingesetzt werden, hat unser Team jedoch überlegt, welche Aspekte des Menschen der Rover überwachen könnte. Wir kamen zu dem Schluss, dass unser Rover, sollte ein Notfall einen Astronauten mit versagender Lebenserhaltung und Ausrüstung bewusstlos machen, als mobiles Mayday-Leuchtfeuer dienen könnte, indem er beobachtete, dass der Astronaut, dem er folgte, bewegungsunfähig ist und eine Notrufnachricht weiterleitete. Um dem Menschen zu folgen und die Unbeweglichkeit zu bestimmen, würde der Rover Eingaben wie die Farbe der Schuhe des Menschen und seine Bewegung aufnehmen. Ein weiterer zu berücksichtigender Input ist, dass er sich seinen Weg merken müsste, um im Notfall ein Notsignal weiterzugeben. Unser Rover erfüllt einen Bedarf auf dem Mars, da für den Versuch einer so kostspieligen Mission auf einem so fremden Gelände mehrere Schichten von Ausfallsicherungen erforderlich sind.

Dieses Instructable soll dem Leser bei der Programmierung seines Roomba helfen, einem "Astronauten" erfolgreich zu folgen und gegebenenfalls ein Notsignal zu senden.

Schritt 1: Benötigte Materialien

Benötigte Materialien
Benötigte Materialien

1) Internet zugänglicher Computer/Laptop

2) MATLAB_R2018a

3) Roomba- und Roomba-Download

Schritt 2: Einrichten/Herunterladen

Einrichtung/Herunterladen
Einrichtung/Herunterladen

Führen Sie dieses Skript in MATLAB aus, um die Software herunterzuladen, die für den Zugriff auf Roomba benötigt wird (in einer eigenen Datei im Projektordner gespeichert)

Zusätzliche Hilfe:

% Installationsprogramm für EF 230 Roomba Project% Letztes Update: 13. September 2017 (Sicherheitsprobleme im Zusammenhang mit https-Server behoben und Warnung zum Löschen von Dateien entfernt, wenn Fehler aufgetreten sind) function roombaInstall clc; % Liste der zu installierenden Dateien = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % Speicherort für die Installation von options = weboptions('CertificateFilename', ''); % sagen ihm, dass es die Zertifikatsanforderungen ignorieren soll server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba-Installation/-Aktualisierung'; % Anzeigezweck und Bestätigungsaufforderung = { 'Dieses Programm lädt diese EF 230 Roomba-Dateien herunter:' '' strjoin(files, ' ') '' 'in diesen Ordner:' '' cd '' 'Möchten Sie fortfahren? '}; Signalton; yn = questdlg(prompt, … dlgTitle, … 'Ja', 'Nein', 'Ja');

if ~strcmp(yn, 'Ja'), return; Ende

% Liste der existierenden Dateien abrufen existing_files = files(cellfun(@exist, files) > 0); if ~isempty(existing_files) % Stellen Sie sicher, dass es wirklich in Ordnung ist, sie zu ersetzen prompt = {'Sie ersetzen diese Datei(en): ' '' strjoin(existing_files, ' ') '' 'OK zu ersetzen?' }; Signalton; yn = questdlg(prompt, … dlgTitle, … 'Ja', 'Nein', 'Ja'); if ~strcmp(yn, 'Ja'), return; Ende Ende

% Dateien herunterladen cnt = 0; für i=1:Länge(Dateien) f=Dateien{i}; disp(['Herunterladen' f]); Versuchs-URL = [Server f]; websave(f, URL, Optionen); % Optionen hinzugefügt, um Sicherheitsfehler zu vermeiden cnt = cnt + 1; catch disp(['Fehler beim Herunterladen' f]); dummy = [f '.html']; if exist(dummy, 'file')==2 delete(dummy) end end end

if cnt == length(files) msg = 'Installation erfolgreich'; waitfor(msgbox(msg, dlgTitle)); else msg = 'Installationsfehler - siehe Befehlsfenster für Details'; waitfor(errordlg(msg, dlgTitle)); Ende

Ende %roombaInstall

Schritt 3: Codeteil 1: Tracking-Funktion

Code Teil 1: Tracking-Funktion
Code Teil 1: Tracking-Funktion

Diese Funktion nimmt die Roomba-Variable und das Bild von der Kamera auf dem Roomba und findet die xy-Mittelkoordinaten des verfolgten Objekts

Speichern Sie diesen Code in einer anderen Datei im selben Ordner.

function [xm, ym] = trackingblue(r)%Inputs: roomba Variable %Outputs: x- und y-Wert der Mitte des folgenden Objekts %Purpose: findet die Mitte eines blauen Objekts bei einem Bild %Usage [x-Wert, y Wert] = trackingblue(roomba-Variable) img=r.getImage; % liest die Kamera aus dem Roboter subplot(1, 2, 2) subimage(img); %zeigt das Bild im selben Fenster wie der Pfad title('Tracking Image') red = img(:,:, 1); grün = img(:,:, 2); blau = img(:,:, 3); justBlue = blau - grün/2 - rot/2; bw = justBlue > 40; halte auf subplot(1, 2, 2) subimage(bw); [x, y] = find(bw); if ~isempty(x) && ~isempty(y) xm = round(mean(x)); ym = rund(Mittelwert(y)); xx = max(1, xm-5):min(xm+5, Größe(bw, 1)); yy = max(1, ym-5):min(ym+5, Größe(bw, 2)); bwbw = Nullen (Größe (bw), 'uint8'); bwbw(xx, yy) = 255; halte auf subplot(1, 2, 2) subimage(justBlue + bwbw); Ende

Schritt 4: Codeteil 2: While-Schleife

Dieser Code steuert den Roomba basierend auf der x- und y-Position des Objekts aus der Tracking-Funktion. Dadurch wird der Roomba nach Wänden und Klippen Ausschau halten, während er nach Blau sucht. Dadurch werden auch die x- und y-Koordinaten des Roomba-Pfads verwendet und ein entsprechender Plot mit dem Tracking-Bild erstellt. Wenn der Stoßsensor aktiviert ist, wird er zum E-Mail-Bereich weitergeleitet

%Rover-Projekt

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Eingaben: Roomba-Wert, Kameradaten, Stoß-, Licht- und Wandsensoren %Zweck: Folgt dem Astronauten und vermeidet Hindernisse. Bei einer Warnung sendet der roomba eine E-Mail mit %detaillierten Angaben zu einer Karte und deren Position gemäß ihrer Startposition. %Verwendung: Führen Sie das Programm einfach aus, indem Sie eine roomba-Variable deklariert haben, und haben Sie auch % ein sich bewegendes grünes Objekt. %Initialisieren von Variablen c=0; x=0; y = 0; theta=0; während c==0 %Loop, damit das blaue Objekt und Hindernisse erkannt werden t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue(r); cliff=getCliffSensors(r); %initialisieren der Strukturen für Sensorwerte light=getLightBumpers(r); Bump= getBumpers(r); if light.leftCenter >= 10 || light.rightCenter >= 10 % Erkennt, ob sich eine Wand in der Nähe von r.stop befindet r.setLEDDigits('help') c=1 % während b==0 % wenn Bump.right == 1 || stoß.links == 1 || Bump.front == 1 % Erkennt, ob er gegen eine Wand gestoßen ist % c=1 % b=1 % disp('bump') % end % end elseif Bump.right == 1 || stoß.links == 1 || Bump.front == 1 % Erkennt, wenn etwas angestoßen wurde, wenn ja, wird eine E-Mail gesendet r.stop c=1 b=1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || Klippe.links <= 100 || cliff.right <= 100 % Erkennt, ob sich eine Klippe in der Nähe von r.stop befindet c=1 r.setLEDDigits('help') else %Stellt die Antriebsgeschwindigkeiten so ein, dass sie dem Blau folgen, wenn yval = 100 r.setDriveVelocity(0.1) elseif yval 400 r.turnAngle(-5) end end theta = theta + r.getAngle; x = d.*cosd(Theta) + x; % x-Koordinate des Roomba y = d.*sind(theta).*d + y; % y-Koordinate des roomba subplot(1, 2, 1) plot(x, y, 'bd') % zeichnet den Pfad und fügt einen Titel hinzu title('Roomba Path') hold on; Ende

Schritt 5: Code Teil 3: E-Mail-Bereich

Dies nimmt den gezeichneten Pfad und das Bild und sendet es an eine angegebene E-Mail-Adresse

(Hier mit Beispiel-E-Mail gezeigt)

%% E-Mail-Bereich

if b==1 saveas(gcf, 'rovermap.png') %saves the figure setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('Internet', 'E_Mail', '[email protected]'); % E-Mail-Konto zum Senden von setpref('Internet', 'SMTP_Username', '[email protected]'); % Benutzername des Absenders setpref('Internet', 'SMTP_Password', 'gssegsse'); % Absenderkennwortprops = 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('example email', 'RoverBeacon', 'Der Astronaut hat sich nicht mehr bewegt. Folgen Sie zur Wiederherstellung den Anweisungen in der angehängten Datei.', 'rovermap.png') disp('email sent') end

Empfohlen: