Obsah:

UTK EF 230 MarsRoomba Project Fall 2018: 5 Steps
UTK EF 230 MarsRoomba Project Fall 2018: 5 Steps

Video: UTK EF 230 MarsRoomba Project Fall 2018: 5 Steps

Video: UTK EF 230 MarsRoomba Project Fall 2018: 5 Steps
Video: UTK - EF 230 Autonomous Vehicle Project 2024, Júl
Anonim
Projekt UTK EF 230 MarsRoomba, jeseň 2018
Projekt UTK EF 230 MarsRoomba, jeseň 2018

V súčasnej dobe sa rovery na Marse používajú na zber údajov o povrchu Marsu rôznymi metódami, až do konečného cieľa dozvedieť sa viac o potenciáli planéty pre mikrobiálny život. Na zber údajov používajú rovery predovšetkým nástroje na fotografovanie a analýzu pôdy, ale medzi rovery patria aj navigačné nástroje, detektory žiarenia, atmosférické senzory a laser na odparovanie vzoriek hornín. Plánovaný cieľ misie rovera 2020 je väčšinou rovnaký, ale so špeciálnou úlohou „zbierať vzorky pôdy a hornín a ukladať ich do vyrovnávacej pamäte na povrchu pre potenciálny návrat na Zem budúcou misiou“, uvádza NASA.

Za predpokladu, že budúce rovery budú použité na ľudskú pomoc, náš tím zvážil, aké aspekty ľudí môže rover monitorovať. Dospeli sme k záveru, že v prípade núdze, ktorá spôsobí, že astronaut bude v bezvedomí s nedostatočnou životnou podporou a vybavením, by náš rover mohol slúžiť ako mobilný maják na máj pozorovaním, že astronaut, ktorého nasledoval, je nehybný a odovzdáva správu o tiesni. Aby nasledoval človeka a určil nehybnosť, rover by bral vstupy, ako napríklad farbu ľudských topánok a ich pohyb. Ďalší vstup, ktorý je potrebné zvážiť, je, že by si musel pamätať svoju cestu, aby v prípade núdze mohol vysielať núdzový signál. Náš rover spĺňa potrebu na Marse v tom, že pokus o takú nákladnú misiu v takom cudzom teréne vyžaduje viac vrstiev núdzových trezorov a ak by astronaut nemohol získať vlastnú pomoc z dôvodu poruchy obleku alebo bezvedomia, môže vozítko upozorniť ostatných.

Tento inštrukčný návod je navrhnutý tak, aby pomohol čitateľovi v programovaní jeho robota Roomba, aby úspešne nasledoval „astronauta“a vyslal v prípade potreby núdzový signál.

Krok 1: Potrebný materiál

Potrebné materiály
Potrebné materiály

1) Počítač/prenosný počítač s prístupom na internet

2) MATLAB_R2018a

3) Roomba a Roomba na stiahnutie

Krok 2: Nastavenie/stiahnutie

Nastavenie/stiahnutie
Nastavenie/stiahnutie

Spustite tento skript v MATLABe a stiahnite si softvér potrebný na prístup k robotu Roomba (uložený vo vlastnom súbore v priečinku projektu)

Ďalšia pomoc:

% Inštalačný program pre projekt EF 230 Roomba% Posledná aktualizácia: 13. septembra 2017 (Opravené problémy so zabezpečením súvisiace so serverom https a upozornením na odstránenie odstráneného súboru, ak sa vyskytnú chyby) funkcia roombaInstall clc; % zoznam súborov na inštaláciu súborov = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % umiestnenia na inštaláciu z options = weboptions ('CertificateFilename', ''); % povedzte, aby ignoroval požiadavky na certifikát server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Inštalácia/aktualizácia Roomba'; % účel zobrazenia a výzva na potvrdenie = {'Tento program stiahne tieto súbory EF 230 Roomba:' '' strjoin (súbory, '') '' 'do tohto priečinka:' '' cd '' 'Chcete pokračovať? '}; pípnutie; yn = questdlg (prompt, … dlgTitle, … 'Yes', 'No', 'Yes');

if ~ strcmp (yn, 'Yes'), return; koniec

% získať zoznam existujúcich súborov existing_files = files (cellfun (@exist, files)> 0); if ~ isempty (existing_files) % uistite sa, že je skutočne v poriadku ich nahradiť prompt = {'Nahrádzate tieto súbory:' '' strjoin (existing_files, '') '' 'OK to replace?' }; pípnutie; yn = questdlg (prompt, … dlgTitle, … 'Yes', 'No', 'Yes'); if ~ strcmp (yn, 'Yes'), return; koniec koniec

% stiahnuť súbory cnt = 0; pre i = 1: dĺžka (súbory) f = súbory {i}; disp (['sťahovanie' f]); skúste url = [server f]; websave (f, URL, možnosti); % pridané možnosti, ako sa vyhnúť chybám zabezpečenia cnt = cnt + 1; catch disp (['Chyba pri sťahovaní' f]); atrapa = [f '.html']; ak existujú (atrapa, 'súbor') == 2 vymazať (atrapu) koniec koniec koniec

ak cnt == dĺžka (súbory) msg = 'Inštalácia bola úspešná'; čakať (msgbox (msg, dlgTitle)); else msg = 'Chyba inštalácie - podrobnosti nájdete v príkazovom okne'; čakať na (errordlg (msg, dlgTitle)); koniec

koniec %roombaInštalácia

Krok 3: Kód Časť 1: Funkcia sledovania

Kód Časť 1: Funkcia sledovania
Kód Časť 1: Funkcia sledovania

Táto funkcia vezme premennú Roomba a obrázok z kamery na Roombe a nájde stredové súradnice xy sledovaného objektu

Uložte tento kód do iného súboru v rovnakom priečinku.

funkcia [xm, ym] = trackingblue (r) %Vstupy: premenná roomba %Výstupy: x a y hodnota stredu nasledujúceho objektu %Účel: vyhľadá stred modrého objektu vzhľadom na obrázok %Použitie [hodnota x, y hodnota] = trackingblue (premenná roomba) img = r.getImage; % číta kameru mimo podobrazu (1, 2, 2) robota (obr.); %zobrazuje obrázok v rovnakom okne ako názov cesty („sledovací obrázok“) red = img (:,:, 1); zelená = img (:,:, 2); modrá = img (:,:,, 3); justBlue = modrá - zelená/2 - červená/2; bw = justBlue> 40; podržať podkres (1, 2, 2) podobraz (bw); [x, y] = find (bw); ak ~ je prázdny (x) && ~ prázdny (y) xm = okrúhly (priemer (x)); ym = okrúhly (priemer (y)); xx = max (1, xm-5): min (xm+5, veľkosť (telesná hmotnosť, 1)); yy = max (1, ym-5): min (ym+5, veľkosť (bw, 2)); bwbw = nuly (veľkosť (bw), 'uint8'); bwbw (xx, yy) = 255; podržať podkres (1, 2, 2) podobraz (justBlue + bwbw); koniec

Krok 4: Kód Časť 2: Pri slučke

Tento kód poháňa robot Roomba na základe umiestnenia objektu x a y z funkcie sledovania. Vďaka tomu bude Roomba pri hľadaní modrej dávať pozor na steny a útesy. To tiež zoberie súradnice x a y cesty Roomba a vytvorí zodpovedajúci graf so sledovacím obrázkom. Ak je snímač nárazov aktivovaný, prejde do sekcie e -mailu

%Rover Project

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Vstupy: hodnota roomba, údaje z kamery, snímače nárazov, svetla a steny %Účel: Nasleduje astronauta a vyhýba sa prekážkam. V prípade varovania roomba pošle e -mail s %podrobným popisom mapy a toho, kde sa nachádza, podľa jej počiatočnej polohy. %Použitie: stačí spustiť program s deklarovanou premennou roomba, tiež %mať pohybujúci sa zelený objekt %Výstupy: zobrazí obrázok sledujúci obrázok, mapu e -mailov a text používateľovi %% Podľa sekcie b = 0; %Inicializačné premenné c = 0; x = 0; y = 0; theta = 0; zatiaľ čo c == 0 %slučka, aby detekovala modrý objekt a prekážky t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); cliff = getCliffSensors (r); %inicializácia štruktúr pre hodnoty senzora light = getLightBumpers (r); bump = getBumpers (r); ak light.leftCenter> = 10 || light.rightCenter> = 10 % Rozpozná, ak sa v blízkosti r.stop r.setLEDDigits ('pomoc') nachádza múr c = 1 %, zatiaľ čo b == 0 % ak bump.right == 1 || bump.left == 1 || bump.front == 1 % Zistí, ak narazilo na niečo potom, čo rozcítilo stenu % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %Zistí, ak na niečo narazilo, ak áno, pošle e -mail r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || cliff.left <= 100 || cliff.right <= 100 %Rozpozná, ak sa v blízkosti bodu r.stop nachádza c = 1 r.setLEDDigits ('help') else %Nastaví rýchlosti pohonu podľa modrej, ak yval = 100 r.setDriveVelocity (0,1) inak 400 r.turnAngle (-5) koncový koniec theta = theta + r.getAngle; x = d.*cosd (theta) + x; % x súradnice roomba y = d.*sind (theta).*d + y; Súradnica % y súradnice podkresa Roomba (1, 2, 1) (x, y, 'bd') % vykreslí cestu a pridá názov titulu ('Cesta Roomba'), podržte sa; koniec

Krok 5: Kód, časť 3: Sekcia e -mailu

Odošle sa vykreslená cesta a obrázok a odošle sa na zadanú e -mailovú adresu

(Tu je zobrazené s príkladom e -mailu)

%% e -mailová sekcia

ak b == 1 saveas (gcf, 'rovermap.png') %uloží údaj setpref ('internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % poštový účet na odoslanie zo setpref ('Internet', 'SMTP_Username', '[email protected]'); % odosielateľov užívateľské meno setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Heslo pre odosielateľov = 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 ('príklad e -mailu', 'RoverBeacon', 'Astronaut sa prestal pohybovať. Pri obnove postupujte podľa pokynov v priloženom súbore.', 'rovermap.png') disp ('email sent') end

Odporúča: