Innehållsförteckning:

UTK EF 230 MarsRoomba Project hösten 2018: 5 steg
UTK EF 230 MarsRoomba Project hösten 2018: 5 steg

Video: UTK EF 230 MarsRoomba Project hösten 2018: 5 steg

Video: UTK EF 230 MarsRoomba Project hösten 2018: 5 steg
Video: Paradise or Oblivion 2024, Juli
Anonim
UTK EF 230 MarsRoomba Project hösten 2018
UTK EF 230 MarsRoomba Project hösten 2018

För närvarande används Mars -rovers för att samla in data på Mars yta genom olika metoder för att i slutändan lära sig mer om planetens potential för mikrobiellt liv. Rovers använder främst fotograferings- och markanalysverktyg för datainsamling, men rovers inkluderar också navigationsinstrument, strålningsdetektorer, atmosfäriska sensorer och en laser för förångning av bergprover. Det planerade roveruppdragets 2020 -mål är i stort sett detsamma, men med den särskilda uppgiften att "samla jord- och bergprover och lagra dem på ytan för eventuell återkomst till jorden genom ett framtida uppdrag", enligt NASA.

Men under förutsättningen att framtida rovers kommer att användas för mänsklig hjälp, övervägde vårt team vilka aspekter av människor som rovern kunde övervaka. Vi kom till slutsatsen att om en nödsituation skulle göra en astronaut medvetslös med sviktande livsstöd och utrustning, kan vår rover fungera som en rörlig ledstjärna genom att observera att astronauten den följde är orörlig och förmedlar ett nödbudskap. För att följa människan och bestämma orörlighet skulle rovern ta insatser som färgen på människans skor och deras rörelse. En annan ingång att tänka på är att den måste komma ihåg sin väg för att vidarebefordra en nödsignal i nödfall. Vår rover tillgodoser ett behov på Mars genom att ett sådant kostsamt uppdrag på sådan främmande terräng kräver flera lager av felsäkerhetsskåp, och skulle en astronaut inte kunna få sin egen hjälp på grund av funktionsfel eller medvetslöshet, kan rovern varna andra.

Denna instruktionsbok är utformad för att hjälpa läsaren att programmera sin Roomba för att framgångsrikt följa en "astronaut" och att skicka en nödsignal om tillämpligt.

Steg 1: Material som behövs

Material behövs
Material behövs

1) Internet/tillgänglig dator/bärbar dator

2) MATLAB_R2018a

3) Roomba och Roomba Ladda ner

Steg 2: Installera/ladda ner

Inställning/nedladdning
Inställning/nedladdning

Kör detta skript i MATLAB för att ladda ner den programvara som behövs för att komma åt Roomba (sparad i sin egen fil i projektmappen)

Ytterligare hjälp:

% Installationsprogram för EF 230 Roomba -projekt% Senaste uppdatering: 13 september 2017 (Fixade säkerhetsproblem i samband med https -servern och borttagning av filradering om fel uppstår) funktion roombaInstall clc; % lista över filer att installera filer = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % plats att installera från alternativ = weboptions ('CertificateFilename', ''); % berätta att den ignorerar certifikatkrav server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba -installation/uppdatering'; % display purpose and get confirm prompt = {'Detta program hämtar dessa EF 230 Roomba -filer:' '' strjoin (files, '') '' 'till den här mappen:' '' cd '' 'Vill du fortsätta? '}; pip; yn = questdlg (prompt,… dlgTitle,… "Ja", "Nej", "Ja");

om ~ strcmp (yn, 'Ja'), returnera; slutet

% få lista över filer som finns eksisterende_filer = filer (cellfun (@exist, filer)> 0); om ~ isempty (eksisterende_filer) % se till att det verkligen är ok att byta ut dem prompt = {'Du byter ut dessa filer:' '' strjoin (befintliga_filer, '') '' 'OK att ersätta?' }; pip; yn = questdlg (prompt,… dlgTitle,… "Ja", "Nej", "Ja"); om ~ strcmp (yn, 'Ja'), returnera; slutet slut

% ladda ner filerna cnt = 0; för i = 1: längd (filer) f = filer {i}; disp (['Hämtar' f]); prova url = [server f]; webbspara (f, url, alternativ); % tillagda alternativ för att undvika säkerhetsfel cnt = cnt + 1; catch disp (['Fel vid nedladdning' f]); dummy = [f '.html']; if exist (dummy, 'file') == 2 delete (dummy) end end end

if cnt == length (files) msg = 'Installation lyckades'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Installationsfel - se kommandofönstret för mer information'; waitfor (errordlg (msg, dlgTitle)); slutet

slutet %roombaInstall

Steg 3: Kod Del 1: Spårningsfunktion

Kod Del 1: Spårningsfunktion
Kod Del 1: Spårningsfunktion

Denna funktion tar Roomba -variabeln och bilden från kameran på Roomba och hittar mitten xy -koordinaterna för det spårade objektet

Spara denna kod i en annan fil i samma mapp.

funktion [xm, ym] = trackingblue (r) %Ingångar: roomba -variabel %Outputs: x och y -värdet för mitten av följande objekt %Syfte: hittar mitten av ett blått objekt med en bild %Användning [x -värde, y värde] = trackingblue (roomba -variabel) img = r.getImage; % läser av kameran från robotens delplan (1, 2, 2) delbild (img); %visar bild i samma fönster som sökvägsrubriken ('Spårningsbild') röd = img (:,:, 1); grön = img (:,:, 2); blå = img (:,:, 3); justBlue = blå - grön/2 - röd/2; bw = justBlue> 40; håll på delplan (1, 2, 2) delbild (bw); [x, y] = hitta (bw); om ~ isempty (x) && ~ isempty (y) xm = round (mean (x)); ym = rund (medelvärde (y)); xx = max (1, xm-5): min (xm+5, storlek (bw, 1)); yy = max (1, ym-5): min (ym+5, storlek (bw, 2)); bwbw = nollor (storlek (bw), 'uint8'); bwbw (xx, åå) = 255; håll på delplan (1, 2, 2) delbild (justBlue + bwbw); slutet

Steg 4: Kod Del 2: While Loop

Denna kod driver Roomba baserat på objektets x och y -plats från spårningsfunktionen. Detta kommer att få Roomba att se upp för väggar och klippor, medan du letar efter blått. Detta tar också x- och y -koordinaterna för Roomba -sökvägen och skapar en motsvarande plot med spårningsbilden. Om bump -sensorn är aktiverad går den vidare till e -postavsnittet

%Rover -projekt

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Ingångar: roomba -värde, kameradata, bump-, ljus- och väggsensorer %Syfte: Följer astronaut och undviker hinder. Om varnas skickar roomba ett e -postmeddelande med information om en karta och var den är i enlighet med dess startposition. %Användning: kör bara programmet med att ha deklarerat en roomba -variabel, även %har ett rörligt grönt objekt %Utdata: visar bildspårningsbild, e -postkarta och text till användaren %% Efter avsnitt b = 0; %Initieringsvariabler c = 0; x = 0; y = 0; theta = 0; medan c == 0 %Loop för att få det att upptäcka det blå objektet och hinder t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); cliff = getCliffSensors (r); %initierar strukturerna för sensorvärden ljus = getLightBumpers (r); bump = getBumpers (r); om light.leftCenter> = 10 || light.rightCenter> = 10 % Känner om det finns en vägg nära r.stop r.setLEDDigits ('hjälp') c = 1 % medan b == 0 % om bump.right == 1 || bump.vänster == 1 || bump.front == 1 % Känner om det har stött på något efter att det känner av en vägg % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump.vänster == 1 || bump.front == 1 %Känner om det har stött på något, i så fall skickar det ett e -postmeddelande r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || klippa. vänster <= 100 || cliff.right <= 100 %Känner om det finns en klippa nära r.stop c = 1 r.setLEDDigits ('hjälp') annars %Ställer in drivhastigheterna för att följa den blå om yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r.turnAngle (-5) end end theta = theta + r.getAngle; x = d.*cosd (theta) + x; % x koordinat för roomba y = d.*sind (theta).*d + y; % y koordinat för roomba -subplot (1, 2, 1) plot (x, y, 'bd') % plottar sökvägen och lägger till en titeltitel ('Roomba Path') vänta; slutet

Steg 5: Kod Del 3: E -postavsnitt

Detta tar den plottade sökvägen och bilden och skickar den till en viss e -postadress

(Visas här med exempel e -post)

%% e -postavsnitt

om b == 1 saveas (gcf, 'rovermap.png') %sparar siffran setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % e -postkonto att skicka från setpref ('Internet', 'SMTP_Username', '[email protected]'); % avsändarnamn användarnamn setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Avsändares lösenord rekvisita = 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 ('exempel -e -post', 'RoverBeacon', 'Astronauten har slutat röra sig. För återställning, följ anvisningarna i den bifogade filen.', 'rovermap.png') disp ('e -post skickad') slut

Rekommenderad: