Kazalo:

UTK EF 230 MarsRoomba Project jesen 2018: 5 korakov
UTK EF 230 MarsRoomba Project jesen 2018: 5 korakov

Video: UTK EF 230 MarsRoomba Project jesen 2018: 5 korakov

Video: UTK EF 230 MarsRoomba Project jesen 2018: 5 korakov
Video: Глава 11. Джейн Эйр Шарлотты Бронте 2024, November
Anonim
UTK EF 230 MarsRoomba projekt jesen 2018
UTK EF 230 MarsRoomba projekt jesen 2018

Trenutno se Mars roverji uporabljajo za zbiranje podatkov o površini Marsa z različnimi metodami do končnega spoznanja o potencialu planeta za življenje mikrobov. Roverji za zbiranje podatkov uporabljajo predvsem orodja za fotografiranje in analizo tal, roverji pa vključujejo tudi navigacijske instrumente, detektorje sevanja, atmosferske senzorje in laser za uparjanje vzorcev kamnin. Načrtovana misija roverja za leto 2020 je večinoma enaka, vendar s posebno nalogo, da "zbere vzorce zemlje in kamnine ter jih predpomni na površino, da bi se s prihodnjo misijo vrnila na Zemljo", pravi NASA.

Toda pod predpostavko, da bodo prihodnji roverji uporabljeni za človeško pomoč, je naša ekipa razmislila, katere vidike ljudi bi rover lahko spremljal. Prišli smo do zaključka, da bi lahko v primeru izrednih razmer astronavt izgubil zavest zaradi pomanjkljive oskrbe z življenjem in opreme, bi lahko naš rover služil kot premični svetilnik, ko bi opazil, da je astronavt, ki mu je sledil, nepremičen in prenašal sporočilo o stiski. Da bi sledil človeku in določil nepremičnost, bi rover vnesel podatke, kot so barva človeških čevljev in njihovo gibanje. Še en vložek, ki ga je treba upoštevati, je, da bi si moral zapomniti svojo pot, da bi v nujnih primerih posredoval signal v sili. Naš rover izpolnjuje potrebo na Marsu, da poskušanje tako drage misije na tako tujem terenu zahteva več plasti varnostnih sefov in če astronavt zaradi okvare obleke ali nezavesti ne more dobiti svoje pomoči, lahko rover opozori druge.

Ta Instructable je zasnovan tako, da bralcu pomaga pri programiranju njegove Roombe, da uspešno sledi "astronavtu" in po potrebi pošlje signal v sili.

Korak: Potrebni materiali

Potrebni materiali
Potrebni materiali

1) Računalnik/prenosni računalnik, dostopen do interneta

2) MATLAB_R2018a

3) Roomba in Roomba Download

2. korak: Nastavitev/prenos

Nastavitev/prenos
Nastavitev/prenos

Zaženite ta skript v MATLAB -u, da prenesete programsko opremo, potrebno za dostop do Roombe (shranjeno v svoji datoteki v mapi projekta)

Dodatna pomoč:

% Namestitveni program za projekt EF 230 Roomba% Zadnja posodobitev: 13. september 2017 (Odpravljene varnostne težave, povezane s strežnikom https, in opozorilo o izbrisu datoteke, če pride do napak) funkcija roombaInstall clc; % seznam datotek za namestitev datotek = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % lokacija za namestitev iz možnosti = weboptions ('CertificateFilename', ''); % mu povejte, naj prezre zahteve za certifikate server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Namestitev/posodobitev Roombe'; % display name in get prompt prompt = {'Ta program bo prenesel te datoteke EF 230 Roomba:' '' strjoin (files, '') '' '' v to mapo: '' 'cd' '' Ali želite nadaljevati? '}; pisk; yn = questdlg (poziv, … dlgTitle,… 'Da', 'Ne', 'Da');

če ~ strcmp (yn, 'Da'), vrni; konec

% get seznam datotek, ki obstajajo obstoječe_files = datoteke (cellfun (@exist, files)> 0); if ~ isempty (existing_files) % se prepričajte, da jih je res v redu zamenjati prompt = {'Zamenjate te datoteke (datoteke):' '' strjoin (existing_files, '') '' 'OK to replace?' }; pisk; yn = questdlg (poziv, … dlgTitle,… 'Da', 'Ne', 'Da'); če ~ strcmp (yn, 'Da'), vrni; konec konec

% prenese datoteke cnt = 0; za i = 1: dolžina (datoteke) f = datoteke {i}; disp (['Prenos' f]); poskusite url = [strežnik f]; websave (f, url, možnosti); % dodanih možnosti za izogibanje varnostnim napakam cnt = cnt + 1; catch disp (['Napaka pri nalaganju' f]); lutka = [f '.html']; če obstaja (lažna, 'datoteka') == 2 izbriši (lažna) konec end end

if cnt == length (files) msg = 'Namestitev je uspela'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Napaka pri namestitvi - za podrobnosti glej ukazno okno'; waitfor (errordlg (msg, dlgTitle)); konec

end %roombaInstall

3. korak: Koda 1. del: Funkcija sledenja

Koda 1. del: Funkcija sledenja
Koda 1. del: Funkcija sledenja

Ta funkcija vzame spremenljivko Roomba in sliko iz kamere na Roombi ter poišče osrednje xy koordinate sledljivega predmeta

To kodo shranite v drugo datoteko v isti mapi.

funkcija [xm, ym] = trackingblue (r) %Vhodi: spremenljivka roomba %Izhodi: x in y vrednost središča naslednjega predmeta %Namen: najde središče modrega predmeta s sliko %Uporaba [vrednost x, y value] = trackingblue (spremenljivka roomba) img = r.getImage; % bere kamero z podplikate robota (1, 2, 2) (img); %prikazuje sliko v istem oknu kot naslov poti ('Sledilna slika') red = img (:,:, 1); zelena = img (:,:, 2); modra = img (:,:, 3); justBlue = modra - zelena/2 - rdeča/2; bw = samo modra> 40; pridržite podpodris (1, 2, 2) podsliko (bw); [x, y] = najdi (črno); če je ~ prazno (x) && ~ prazno (y) xm = okroglo (povprečje (x)); ym = okroglo (povprečje (y)); xx = max (1, xm-5): min (xm+5, velikost (bw, 1)); yy = max (1, ym-5): min (ym+5, velikost (bw, 2)); bwbw = ničle (velikost (bw), 'uint8'); bwbw (xx, yy) = 255; pridržite podsliko (1, 2, 2) podobo (samo modra + bwbw); konec

4. korak: Koda 2. del: Medtem ko je zanka

Ta koda poganja Roombo na podlagi lokacije x in y predmeta iz funkcije sledenja. Tako bo Roomba pozorna na stene in pečine, medtem ko išče modro. To bo vzelo tudi koordinate x in y poti Roomba in ustvarilo ustrezno ploskev s sliko za sledenje. Če je senzor udarcev aktiviran, se bo pomaknil na razdelek za e -pošto

%Roverjev projekt

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Vhodi: vrednost roombe, podatki o kameri, udarci, svetlobni in stenski senzorji %Namen: Sledi astronavtu in se izogiba oviram. Če je opozorilo, roomba pošlje e -poštno sporočilo %s podrobnostmi o zemljevidu in o tem, kje je glede na začetni položaj. %Uporaba: samo zaženite program z deklarirano spremenljivko roomba, %tudi imate premikajoč se zeleni objekt %Izhodi: prikaže sliko za sledenje slikam, zemljevid e -pošte in besedilo uporabniku %% Po razdelku b = 0; %Inicializacija spremenljivk c = 0; x = 0; y = 0; theta = 0; medtem ko je c == 0 %Loop, da zazna modri predmet in ovire t = r.timeGet; d = r.getDistance; [xval, yval] = sledilno modro (r); cliff = getCliffSensors (r); %inicializacija struktur za vrednosti senzorjev light = getLightBumpers (r); bump = getBumpers (r); če je light.leftCenter> = 10 || light.rightCenter> = 10 % Zazna, če je v bližini r.stop stena r.setLEDDigits ('pomoč') c = 1 %, medtem ko je b == 0 %, če je bump.right == 1 || bump.left == 1 || bump.front == 1 % Zazna, če je nekaj udaril, potem ko zazna steno % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %Zazna, če je kaj naletelo, v tem primeru bo poslalo e -poštno sporočilo r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || cliff.left <= 100 || cliff.right <= 100 %Zazna, če je v bližini r.stop pečina c = 1 r.setLEDDigits ('help') else %Nastavi hitrosti vožnje, da sledijo modri barvi, če je yval = 100 r.setDriveVelocity (0,1) elseif yval 400 r.turnAngle (-5) konec konca theta = theta + r.getAngle; x = d.*cosd (theta) + x; % x koordinata roombe y = d.*sind (theta).*d + y; % y koordinata roomba podplata (1, 2, 1) plot (x, y, 'bd') % nariše pot in doda naslov naslova ('Roomba Path') hold on; konec

5. korak: Koda 3. del: Oddelek za e -pošto

To bo vzelo začrtano pot in sliko ter jo poslalo na določen e -poštni naslov

(Prikazano tukaj z vzorčnim e -poštnim naslovom)

%% E -poštni odsek

če je b == 1 saveas (gcf, 'rovermap.png') %shrani številko setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % poštnega računa za pošiljanje iz setpref ('Internet', 'SMTP_Username', '[email protected]'); % uporabnikov pošiljateljev setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Podporniki gesla pošiljateljev = 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', 'Astronavt se je prenehal premikati. Za obnovitev sledite navodilom v priloženi datoteki.', 'rovermap.png') disp ('email sent') end

Priporočena: