Cuprins:

UTK EF 230 MarsRoomba Project Toamna 2018: 5 pași
UTK EF 230 MarsRoomba Project Toamna 2018: 5 pași

Video: UTK EF 230 MarsRoomba Project Toamna 2018: 5 pași

Video: UTK EF 230 MarsRoomba Project Toamna 2018: 5 pași
Video: UTK - EF 230 Autonomous Vehicle Project 2024, Noiembrie
Anonim
UTK EF 230 MarsRoomba Project Toamna 2018
UTK EF 230 MarsRoomba Project Toamna 2018

În prezent, rover-urile de pe Marte sunt folosite pentru a colecta date de pe suprafața lui Marte prin diferite metode, până la finalul final de a afla mai multe despre potențialul planetei pentru viața microbiană. Rover-urile folosesc în principal instrumente de fotografie și de analiză a solului pentru colectarea datelor, dar rover-urile includ și instrumente de navigație, detectoare de radiații, senzori atmosferici și un laser pentru vaporizarea probelor de rocă. Scopul planificat al misiunii rover 2020 este în mare parte același, dar cu sarcina specială de a „colecta mostre de sol și piatră și a le ascunde pe suprafață pentru o posibilă întoarcere pe Pământ de către o viitoare misiune”, potrivit NASA.

Cu toate acestea, sub premisa că viitorii rovers vor fi folosiți pentru asistență umană, echipa noastră a luat în considerare ce aspecte ale oamenilor ar putea monitoriza roverul. Am ajuns la concluzia că, în cazul în care o situație de urgență ar face un astronaut inconștient cu suportul de viață și echipamente defectuoase, rover-ul nostru ar putea servi drept far mobil mobil observând că astronautul pe care l-a urmat este imobil și transmite un mesaj de primejdie. Pentru a urmări umanul și pentru a determina imobilitatea, rover-ul ar lua intrări precum culoarea pantofilor omului și mișcarea lor. O altă intrare de luat în considerare este că ar trebui să-și amintească calea pentru a transmite un semnal de primejdie în caz de urgență. Roverul nostru răspunde unei nevoi de pe Marte, deoarece încercarea unei misiuni atât de costisitoare pe un teren străin necesită mai multe straturi de seifuri și dacă un astronaut nu poate obține propriul ajutor din cauza disfuncționalității sau inconștientului, roverul poate alerta pe alții.

Acest instructabil este conceput pentru a ajuta cititorul în programarea lui Roomba pentru a urmări cu succes un „astronaut” și pentru a trimite un semnal de primejdie, dacă este cazul.

Pasul 1: Materiale necesare

Materiale necesare
Materiale necesare

1) computer / laptop accesibil la internet

2) MATLAB_R2018a

3) Roomba și Roomba Download

Pasul 2: Configurare / Descărcare

Configurare / descărcare
Configurare / descărcare

Rulați acest script în MATLAB pentru a descărca software-ul necesar pentru a accesa Roomba (salvat în propriul fișier din folderul proiectului)

Ajutor suplimentar:

% Program de instalare pentru proiectul EF 230 Roomba Ultima actualizare: 13 septembrie 2017 (S-au remediat problemele de securitate asociate cu serverul https și eliminarea avertismentului de ștergere a fișierelor dacă au apărut erori) function roombaInstall clc; % list of files to install files = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % locație de instalat din options = weboptions ('CertificateFilename', ''); % spune-i să ignore cerințele certificatului server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Instalare / actualizare Roomba'; % afișează scopul și primește promptul de confirmare = {'Acest program va descărca aceste fișiere EF 230 Roomba:' '' strjoin (files, '') '' 'în acest folder:' '' cd '' 'Vrei să continui? '}; bip; yn = questdlg (prompt, … dlgTitle, … 'Da', 'Nu', 'Da');

if ~ strcmp (yn, 'Da'), returnează; Sfârșit

% obține lista de fișiere care există existing_files = files (cellfun (@exist, files)> 0); if ~ isempty (existing_files)% asigurați-vă că este într-adevăr ok să le înlocuiți prompt = {'Înlocuiți aceste fișiere:' '' strjoin (existing_files, '') '' 'OK pentru a înlocui?' }; bip; yn = questdlg (prompt, … dlgTitle, … 'Da', 'Nu', 'Da'); if ~ strcmp (yn, 'Da'), returnează; sfârșit sfârșit

% descarcă fișierele cnt = 0; pentru i = 1: lungime (fișiere) f = fișiere {i}; disp ([„Descărcare” f]); încercați url = [server f]; websave (f, url, opțiuni); % opțiuni adăugate pentru a evita erorile de securitate cnt = cnt + 1; catch disp (['Eroare la descărcarea' f]); manechin = [f '.html']; dacă există (fictiv, „fișier”) == 2 ștergeți (fictiv)

if cnt == length (files) msg = 'Instalare reușită'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Eroare de instalare - vezi fereastra de comandă pentru detalii'; waitfor (errordlg (msg, dlgTitle)); Sfârșit

end% roombaInstall

Pasul 3: Cod Partea 1: Funcția de urmărire

Cod Partea 1: Funcția de urmărire
Cod Partea 1: Funcția de urmărire

Această funcție preia variabila Roomba și imaginea de pe camera de pe Roomba și găsește coordonatele xy centrale ale obiectului urmărit

Salvați acest cod într-un alt fișier din același folder.

funcție [xm, ym] = trackingblue (r)% Intrări: variabilă roomba% Ieșiri: valoarea x și y a centrului următorului obiect% Scop: găsește centrul unui obiect albastru dat o imagine% Utilizare [valoare x, y valoare] = trackingblue (variabila roomba) img = r.getImage; % citește camera de pe subimaginea robotului (1, 2, 2) subimagine (img); % arată imaginea în aceeași fereastră ca titlul căii („Urmărirea imaginii”) roșu = img (:,:, 1); verde = img (:,:, 2); albastru = img (:,:, 3); doar albastru = albastru - verde / 2 - roșu / 2; bw = justBlue> 40; mențineți subplot (1, 2, 2) subimagine (bw); [x, y] = găsi (bw); if ~ isempty (x) && ~ isempty (y) xm = round (mean (x)); ym = rotund (medie (y)); xx = max (1, xm-5): min (xm + 5, dimensiune (bw, 1)); yy = max (1, ym-5): min (ym + 5, dimensiune (bw, 2)); bwbw = zerouri (dimensiune (bw), 'uint8'); bwbw (xx, yy) = 255; mențineți subplot (1, 2, 2) subimagine (justBlue + bwbw); Sfârșit

Pasul 4: Cod Partea 2: În timp ce bucla

Acest cod conduce Roomba pe baza locației x și y a obiectului din funcția de urmărire. Acest lucru îl va face pe Roomba să fie atent la pereți și stânci, în timp ce caută albastru. Aceasta va lua, de asemenea, coordonatele x și y ale căii Roomba și va crea un grafic corespunzător cu imaginea de urmărire. Dacă senzorul de blocare este activat, acesta va trece la secțiunea de e-mail

% Proiect Rover

% Jonah Zahn, Wade Price, Noah Sloan% jzahn2, wprice15, nsloan1% Intrări: valoare roomba, date ale camerei, senzori de lumină și perete% Scop: Urmărește astronautul și evită obstacolele. Dacă este avertizat, roomba trimite un e-mail% care detaliază o hartă și unde se află în funcție de poziția sa de pornire. % Utilizare: pur și simplu rulați programul cu declararea unei variabile roomba, de asemenea% au un obiect verde în mișcare% Ieșiri: arată imaginea de urmărire a imaginilor, harta e-mailurilor și textul către utilizator %% Următoarea secțiune b = 0; % Initializarea variabilelor c = 0; x = 0; y = 0; theta = 0; în timp ce c == 0% Buclă pentru a face să detecteze obiectul albastru și obstacolele t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); cliff = getCliffSensors (r); % inițializarea structurilor pentru valorile senzorului light = getLightBumpers (r); bump = getBumpers (r); dacă light.leftCenter> = 10 || light.rightCenter> = 10% Simte dacă există un perete lângă r.stop r.setLEDDigits („ajutor”) c = 1% în timp ce b == 0% dacă bump.right == 1 || bump.left == 1 || bump.front == 1% Simte dacă a lovit ceva după ce a simțit un perete% c = 1% b = 1% disp ('bump')% end% end elseif bump.right == 1 || bump.left == 1 || bump.front == 1% Simte dacă a lovit ceva, dacă da, va trimite un e-mail r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || stâncă.stânga <= 100 || cliff.right <= 100% Simte dacă există o stâncă lângă r.stop c = 1 r.setLEDDigits („ajutor”) else% Setează viteza de acționare pentru a urma albastrul dacă yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r.turnAngle (-5) end end theta = theta + r.getAngle; x = d. * cosd (theta) + x; coordonata% x a camerei y = d. * sind (theta). * d + y; coordonata% y a subplotului roomba (1, 2, 1) grafic (x, y, 'bd')% trasează calea și adaugă un titlu de titlu ('Cale Roomba') așteptat; Sfârșit

Pasul 5: Cod Partea 3: Secțiunea de e-mail

Aceasta va lua calea și imaginea trasate și le va trimite la o adresă de e-mail specificată

(Afișat aici cu un exemplu de e-mail)

Secțiunea de e-mail %%

dacă b == 1 saveas (gcf, 'rovermap.png')% salvează cifra setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref („Internet”, „E-mail”, „[email protected]”); % cont de mail de trimis de la setpref ('Internet', 'SMTP_Username', '[email protected]'); % senders username setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Expeditori parola recuzită = 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 („exemplu de e-mail”, „RoverBeacon”, „Astronautul s-a oprit din mișcare. Pentru recuperare, urmați instrucțiunile din fișierul atașat.”, „rovermap.png”) disp („e-mail trimis”) sfârșit

Recomandat: