Inhoudsopgave:

UTK EF 230 MarsRoomba-project herfst 2018: 5 stappen
UTK EF 230 MarsRoomba-project herfst 2018: 5 stappen

Video: UTK EF 230 MarsRoomba-project herfst 2018: 5 stappen

Video: UTK EF 230 MarsRoomba-project herfst 2018: 5 stappen
Video: UTK - EF 230 Autonomous Vehicle Project 2024, November
Anonim
UTK EF 230 MarsRoomba-project herfst 2018
UTK EF 230 MarsRoomba-project herfst 2018

Momenteel worden Marsrovers gebruikt om op verschillende manieren gegevens over het oppervlak van Mars te verzamelen, om uiteindelijk meer te weten te komen over het potentieel van de planeet voor microbieel leven. Rovers gebruiken voornamelijk fotografie- en bodemanalysetools voor het verzamelen van gegevens, maar rovers bevatten ook navigatie-instrumenten, stralingsdetectoren, atmosferische sensoren en een laser voor de verdamping van rotsmonsters. Het doel van de geplande rover-missie voor 2020 is grotendeels hetzelfde, maar met de speciale taak om "monsters van grond en gesteente te verzamelen en deze op het oppervlak op te slaan voor mogelijke terugkeer naar de aarde door een toekomstige missie", aldus NASA.

Onder de veronderstelling dat toekomstige rovers zullen worden gebruikt voor menselijke hulp, heeft ons team echter overwogen welke aspecten van de mens de rover zou kunnen volgen. We kwamen tot de conclusie dat als een astronaut een astronaut bewusteloos zou maken met falende levensondersteuning en uitrusting, onze rover zou kunnen dienen als een mobiel noodbaken door te observeren dat de astronaut die hij volgde onbeweeglijk is en een noodbericht uitzendt. Om de mens te volgen en immobiliteit te bepalen, zou de rover inputs nemen zoals de kleur van de schoenen van de mens en hun beweging. Een andere input om te overwegen is dat het zijn pad moet onthouden om in geval van nood een noodsignaal door te geven. Onze rover voorziet in een behoefte op Mars doordat het proberen van zo'n kostbare missie op dergelijk vreemd terrein meerdere lagen fail-safes vereist, en als een astronaut niet in staat is om zijn eigen hulp te krijgen vanwege een defect of bewusteloosheid, kan de rover anderen waarschuwen.

Deze Instructable is ontworpen om de lezer te helpen bij het programmeren van zijn of haar Roomba om met succes een "astronaut" te volgen en om indien van toepassing een noodsignaal te sturen.

Stap 1: Benodigde materialen

Benodigde materialen
Benodigde materialen

1) Internet toegankelijke computer/laptop

2) MATLAB_R2018a

3) Roomba en Roomba downloaden

Stap 2: Instellen/downloaden

Instellen/Downloaden
Instellen/Downloaden

Voer dit script uit in MATLAB om de software te downloaden die nodig is om toegang te krijgen tot Roomba (opgeslagen in een eigen bestand in de projectmap)

Extra hulp:

% Installatieprogramma voor EF 230 Roomba Project% Laatste update: 13 september 2017 (Opgeloste beveiligingsproblemen geassocieerd met https-server en verwijderde waarschuwing voor het verwijderen van bestanden als er fouten zijn opgetreden) functie roombaInstall clc; % lijst met te installeren bestanden bestanden = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % locatie om te installeren vanuit options = weboptions('CertificateFilename', ''); % vertel het de certificaatvereisten te negeren server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba installeren/bijwerken'; % weergavedoel en krijg bevestigingsprompt = { 'Dit programma zal deze EF 230 Roomba-bestanden downloaden:' '' strjoin(files, ' ') '' 'naar deze map:' '' cd '' 'Wilt u doorgaan? ' }; piep; yn = questdlg(prompt, … dlgTitle, … 'Ja', 'Nee', 'Ja');

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

% haal een lijst op met bestanden die bestaan bestaande_bestanden = bestanden(cellfun(@exist, bestanden) > 0); if ~isempty(existing_files) % zorg ervoor dat het echt ok is om ze te vervangen prompt = {'U vervangt deze bestanden): ' '' strjoin(existing_files, ' ') '' 'OK om te vervangen?' }; piep; yn = questdlg(prompt, … dlgTitle, … 'Ja', 'Nee', 'Ja'); if ~strcmp(yn, 'Ja'), return; einde einde

% download de bestanden cnt = 0; voor i=1:lengte(bestanden) f=bestanden{i}; disp(['Bezig met downloaden' f]); probeer url = [server f]; websave (f, url, opties); % toegevoegde opties om beveiligingsfouten te voorkomen cnt = cnt + 1; catch disp(['Fout bij downloaden' f]); dummy = [f '.html']; if exist(dummy, 'file')==2 delete(dummy) end end end

if cnt == lengte(bestanden) msg = 'Installatie geslaagd'; waitfor(msgbox(msg, dlgTitle)); else msg = 'Installatiefout - zie opdrachtvenster voor details'; waitfor(errordlg(bericht, dlgTitel)); einde

einde %roombaInstall

Stap 3: Code Deel 1: Volgfunctie

Code Deel 1: Volgfunctie
Code Deel 1: Volgfunctie

Deze functie neemt de Roomba-variabele en het beeld van de camera op de Roomba en vindt de middelste xy-coördinaten van het gevolgde object

Bewaar deze code in een ander bestand in dezelfde map.

functie [xm, ym] = trackingblue(r)%Inputs: roomba variabele %Outputs: x en y waarde van het midden van het volgende object %Doel: vindt het midden van een blauw object gegeven een afbeelding %Usage [x waarde, y waarde] = trackingblue (variabele roomba) img=r.getImage; % leest de camera af van de robot subplot(1, 2, 2) subimage(img); %toont afbeelding in hetzelfde venster als de padtitel ('Tracking Image') red = img(:,:, 1); groen = img(:,:, 2); blauw = img(:,:, 3); justBlue = blauw - groen/2 - rood/2; bw = gewoon blauw > 40; houd op subplot (1, 2, 2) subimage (bw); [x, y] = vind(bw); if ~isempty(x) && ~isempty(y) xm = round(mean(x)); ym = rond (gemiddelde (y)); xx = max(1, xm-5):min(xm+5, grootte(bw, 1)); yy = max(1, ym-5):min(ym+5, grootte(bw, 2)); bwbw = nullen (grootte (bw), 'uint8'); bwbw(xx, yy) = 255; houd op subplot (1, 2, 2) subimage (justBlue + bwbw); einde

Stap 4: Codeer deel 2: While Loop

Deze code stuurt de Roomba aan op basis van de x- en y-locatie van het object vanuit de volgfunctie. Hierdoor zal de Roomba oppassen voor muren en kliffen, terwijl hij op zoek gaat naar blauw. Dit neemt ook de x- en y-coördinaten van het Roomba-pad en creëert een overeenkomstige plot met de volgafbeelding. Als de stootsensor is geactiveerd, gaat deze naar het e-mailgedeelte

%Rover-project

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Ingangen: roomba-waarde, cameragegevens, stoot-, licht- en muursensoren Doel: Volgt astronaut en vermijdt obstakels. Indien gewaarschuwd, stuurt de roomba een e-mail % met gedetailleerde informatie over een kaart en waar deze zich bevindt volgens zijn startpositie. %Gebruik: voer het programma uit met een roomba-variabele gedeclareerd, ook %heeft een bewegend groen object %Outputs: toont afbeeldingsvolgbeeld, e-mailkaart en tekst aan gebruiker %% Volgende sectie b=0; %Initialiseren variabelen c=0; x=0; y=0; theta=0; while c==0 %Loop om het blauwe object en obstakels te laten detecteren t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue(r); cliff=getCliffSensors(r); %initialisatie van de structuren voor sensorwaarden light=getLightBumpers(r); hobbel = getBumpers(r); if light.leftCenter >= 10 || light.rightCenter >= 10 % Voelt of er een muur in de buurt is r.stop r.setLEDDigits('help') c=1 % while b==0 % if bump.right == 1 || bump.left == 1 || bump.front == 1 %Stelt vast of het iets heeft gestoten nadat het een muur heeft gedetecteerd % c=1 % b=1 % disp('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 % Voelt of het ergens tegenaan is gestoten, zo ja, dan zal het een e-mail sturen r.stop c=1 b=1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || cliff.left <= 100 || cliff.right <= 100 %Detecteert of er een klif is in de buurt van r.stop c=1 r.setLEDDigits('help') else %Stelt de rijsnelheden in om de blauwe kleur te volgen als yval = 100 r.setDriveVelocity(0.1) elseif yval 400 r.turnAngle(-5) end end theta = theta + r.getAngle; x = d.*cosd(theta) + x; % x coördinaat van de roomba y = d.*sind(theta).*d + y; % y-coördinaat van de roomba-subplot(1, 2, 1) plot(x, y, 'bd') % plot het pad en voegt een titel toe title ('Roomba Path') wacht even; einde

Stap 5: Code Deel 3: E-mailsectie

Hiermee worden het geplotte pad en de afbeelding naar een opgegeven e-mailadres verzonden

(Hier weergegeven met voorbeeld e-mail)

%% E-mailsectie

if b==1 saveas(gcf, 'rovermap.png') %saves the figure setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('Internet', 'E_mail', '[email protected]'); % e-mailaccount om te verzenden vanaf setpref('Internet', 'SMTP_Username', '[email protected]'); % afzender gebruikersnaam setpref('Internet', 'SMTP_Password', 'gssegsse'); % Afzenders wachtwoord rekwisieten = 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', 'The astronaut is gestopt met bewegen. Volg voor herstel de aanwijzingen in het bijgevoegde bestand.', 'rovermap.png') disp('email sent') end

Aanbevolen: