Inhaltsverzeichnis:
- Schritt 1: Benötigte Materialien
- Schritt 2: Einrichten/Herunterladen
- Schritt 3: Codeteil 1: Tracking-Funktion
- Schritt 4: Codeteil 2: While-Schleife
- Schritt 5: Code Teil 3: E-Mail-Bereich
Video: UTK EF 230 MarsRoomba-Projekt Herbst 2018 – Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
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
1) Internet zugänglicher Computer/Laptop
2) MATLAB_R2018a
3) Roomba- und Roomba-Download
Schritt 2: Einrichten/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
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:
Umwandeln einer 230-V-Wechselstrombirne in USB-Strom! - Gunook
Umwandlung einer 230-V-Wechselstrom-Glühbirne in USB-Strom!: Ich bin bei eBay auf diese hübschen Flammeneffekt-Glühbirnen gestoßen, die flackern und eine subtile Animation haben eine gefälschte brennende Fackel oder Laterne ist dies nicht ideal. Ich modifi
Generator - Fidget Spinner mit 9W LED-Glühbirne 230 V - Gunook
Generator - Fidget Spinner Powering 9W Led Bulb 230 V: In den folgenden Zeilen möchten wir zeigen, wie ein leistungsstarker Fidget Spinner Generator erstellt werden kann. Sie erzeugt zu Beginn 100 Volt Wechselstrom und kann eine LED-Glühbirne 230 V 9 W zünden. Ein pädagogisches Projekt mit wenigen Materialien. Finden
Venusfliegenfalle - ITM Herbst 2019 - Gunook
Venus Flytrap - ITM Herbst 2019: Was fehlt auf jedem Schreibtisch? Eine mechanische Venusfliegenfalle, die Bleistifte, Kugelschreiber und andere Gegenstände hält
Mars Roomba Project UTK - Gunook
Mars Roomba Project UTK: HAFTUNGSAUSSCHLUSS: DIES FUNKTIONIERT NUR, WENN DER ROOMBA SPEZIELL EINGESTELLT IST, DIESE ANLEITUNG WURDE FÜR STUDIERENDE UND FAKULTÄT DER UNIVERSITY OF TENNESSEE ERSTELLT UND BESTIMMT, VON UNIVERSITY OF TENNESSEE STUDENTEN UND FACULTY Dieser Code wird verwendet, um einen Roomba lokal einzurichten geschrieben und s
Eine Apfelgirlande für den Herbst oder den Schulanfang herstellen – wikiHow
Wie man eine Apfelgirlande für den Herbst oder den Schulanfang herstellt: Anjeanette von RootsAndWingsCo hat diese entzückende Apfelgirlande aus Filz und Material hergestellt. Es war ein einfaches Projekt, das selbst diejenigen, die sagen, dass sie nicht nähen können, tun können! (Solange Sie Ihre Nadel einfädeln können.)