Sommario:

Progetto UTK EF 230 MarsRoomba Autunno 2018: 5 passaggi
Progetto UTK EF 230 MarsRoomba Autunno 2018: 5 passaggi

Video: Progetto UTK EF 230 MarsRoomba Autunno 2018: 5 passaggi

Video: Progetto UTK EF 230 MarsRoomba Autunno 2018: 5 passaggi
Video: Зашивка инсталляции. Установка унитаза + кнопка. Переделка хрущевки от А до Я # 36 2024, Dicembre
Anonim
UTK EF 230 MarsRoomba Project Autunno 2018
UTK EF 230 MarsRoomba Project Autunno 2018

Attualmente, i rover su Marte vengono utilizzati per raccogliere dati sulla superficie di Marte attraverso vari metodi, allo scopo ultimo di saperne di più sul potenziale del pianeta per la vita microbica. I rover utilizzano principalmente strumenti di fotografia e analisi del suolo per la raccolta dei dati, ma i rover includono anche strumenti di navigazione, rilevatori di radiazioni, sensori atmosferici e un laser per la vaporizzazione del campione di roccia. L'obiettivo della missione rover pianificata per il 2020 è per lo più lo stesso, ma con il compito speciale di "raccogliere campioni di suolo e roccia e conservarli sulla superficie per un potenziale ritorno sulla Terra da una missione futura", secondo la NASA.

Tuttavia, con la premessa che i futuri rover saranno utilizzati per l'assistenza umana, il nostro team ha considerato quali aspetti degli umani il rover potrebbe monitorare. Siamo giunti alla conclusione che se un'emergenza dovesse rendere incosciente un astronauta con il supporto vitale e l'equipaggiamento difettosi, il nostro rover potrebbe fungere da faro mobile osservando che l'astronauta seguito è immobile e trasmette un messaggio di angoscia. Per seguire l'essere umano e determinare l'immobilità, il rover avrebbe preso input come il colore delle scarpe dell'essere umano e il loro movimento. Un altro input da considerare è che dovrebbe ricordare il suo percorso per trasmettere un segnale di soccorso in caso di emergenza. Il nostro rover soddisfa un'esigenza su Marte in quanto il tentativo di una missione così costosa su un terreno così estraneo richiede più livelli di dispositivi di sicurezza e, se un astronauta non è in grado di ottenere il proprio aiuto a causa di un malfunzionamento o dell'incoscienza, il rover può avvisare gli altri.

Questo Instructable è progettato per aiutare il lettore a programmare il proprio Roomba per seguire con successo un "astronauta" e per inviare un segnale di soccorso, se applicabile.

Passaggio 1: materiali necessari

Materiale necessario
Materiale necessario

1) Computer/laptop accessibile da Internet

2) MATLAB_R2018a

3) Download di Roomba e Roomba

Passaggio 2: installazione/download

Configurazione/Download
Configurazione/Download

Esegui questo script in MATLAB per scaricare il software necessario per accedere a Roomba (salvato nel proprio file nella cartella del progetto)

Aiuto aggiuntivo:

% Programma di installazione per EF 230 Roomba Project% Ultimo aggiornamento: 13 settembre 2017 (Risolti problemi di sicurezza associati al server https e avviso di eliminazione file rimosso in caso di errori) function roombaInstall clc; % elenco di file da installare files = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % percorso di installazione da options = weboptions('CertificateFilename', ''); % digli di ignorare i requisiti del certificato server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Installazione/Aggiornamento Roomba'; % visualizza lo scopo e ottieni la richiesta di conferma = { 'Questo programma scaricherà questi file EF 230 Roomba:' '' strjoin(files, ' ') '' 'in questa cartella:' '' cd '' 'Vuoi continuare? ' }; bip; yn = questdlg(prompt, … dlgTitle, … 'Sì', 'No', 'Sì');

if ~strcmp(yn, 'Sì'), return; fine

% ottiene l'elenco dei file esistenti esistenti_file = files(cellfun(@exist, files) > 0); if ~isempty(existing_files) % assicurati che sia davvero ok sostituirli prompt = {'Stai sostituendo questi file: ' '' strjoin(existing_files, ' ') '' 'OK per sostituire?' }; bip; yn = questdlg(prompt, … dlgTitle, … 'Sì', 'No', 'Sì'); if ~strcmp(yn, 'Sì'), return; fine fine

% scarica i file cnt = 0; for i=1:lunghezza(file) f=file{i}; disp(['Scaricamento 'f]); prova url = [server f]; websave(f, url, opzioni); % di opzioni aggiunte per evitare errori di sicurezza cnt = cnt + 1; catch disp(['Errore durante il download 'f]); fittizio = [f '.html']; if exist(fittizio, 'file')==2 delete(fittizio) end end end

if cnt == length(files) msg = 'Installazione riuscita'; waitfor(msgbox(msg, dlgTitle)); else msg = 'Errore di installazione - vedere la finestra di comando per i dettagli'; waitfor(errordlg(msg, dlgTitle)); fine

end %roombaInstall

Passaggio 3: codice parte 1: funzione di tracciamento

Codice Parte 1: Funzione di monitoraggio
Codice Parte 1: Funzione di monitoraggio

Questa funzione prende la variabile Roomba e l'immagine dalla telecamera su Roomba e trova le coordinate xy centrali dell'oggetto tracciato

Salva questo codice in un altro file nella stessa cartella.

funzione [xm, ym] = trackingblue(r)%Ingressi: variabile roomba %Uscite: valore xey del centro del seguente oggetto %Scopo: trova il centro di un oggetto blu data un'immagine %Uso [valore x, y value] = trackingblue (variabile roomba) img=r.getImage; % legge la telecamera dalla sottotrama del robot(1, 2, 2) subimage(img); %mostra l'immagine nella stessa finestra del percorso title('Tracking Image') red = img(:,:, 1); verde = img(:,:, 2); blu = img(:,:, 3); justBlue = blu - verde/2 - rosso/2; bw = soloBlu > 40; tieni premuto subplot(1, 2, 2) subimage(bw); [x, y] = trova(bw); if ~isempty(x) && ~isempty(y) xm = round(mean(x)); ym = round(media(y)); xx = max(1, xm-5):min(xm+5, dimensione(bw, 1)); yy = max(1, ym-5):min(ym+5, size(bw, 2)); bwbw = zeros(size(bw), 'uint8'); bwbw(xx, aa) = 255; tieni premuto sottotrama (1, 2, 2) sottoimmagine (justBlue + bwbw); fine

Passaggio 4: Codice Parte 2: Mentre il ciclo

Questo codice guida il Roomba in base alla posizione xey dell'oggetto dalla funzione di tracciamento. In questo modo Roomba starà attento a muri e scogliere, mentre cerca il blu. Questo prenderà anche le coordinate x e y del percorso di Roomba e creerà un grafico corrispondente con l'immagine di tracciamento. Se il sensore di collisione è attivato, passerà alla sezione e-mail

%Progetto Rover

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Ingressi: valore roomba, dati della videocamera, sensori di urto, luce e parete %Scopo: segue l'astronauta ed evita gli ostacoli. Se avvisato, roomba invia un'e-mail %dettagliante una mappa e dove si trova in base alla sua posizione di partenza. %Uso: basta eseguire il programma dopo aver dichiarato una variabile roomba, %avere anche un oggetto verde in movimento %Uscite: mostra l'immagine di tracciamento dell'immagine, la mappa delle email e il testo all'utente %% Seguendo la sezione b=0; %Inizializzazione variabili c=0; x=0; y=0; theta=0; mentre c==0 %Loop per fargli rilevare l'oggetto blu e gli ostacoli t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue(r); scogliera=getCliffSensors(r); %inizializzazione delle strutture per i valori del sensore light=getLightBumpers(r); bump= getBumpers(r); if light.leftCenter >= 10 || light.rightCenter >= 10 %Sente se c'è un muro vicino a r.stop r.setLEDDigits('help') c=1 % mentre b==0 % se bump.right == 1 || bump.left == 1 || bump.front == 1 %Sense se ha urtato qualcosa dopo aver rilevato un muro % c=1 % b=1 % disp('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %Sente se ha urtato qualcosa, in tal caso, invierà un'e-mail r.stop c=1 b=1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || scogliera.sinistra <= 100 || cliff.right <= 100 %Rileva se c'è una scogliera vicino a r.stop c=1 r.setLEDDigits('help') else %Imposta le velocità di guida per seguire il blu se yval = 100 r.setDriveVelocity(0.1) elseif yval 400 r.turnAngle(-5) end end theta = theta + r.getAngle; x = d.*cosd(teta) + x; % x coordinata della roomba y = d.*sind(theta).*d + y; % coordinata y della sottotrama roomba(1, 2, 1) plot(x, y, 'bd') % traccia il percorso e aggiunge un titolo title('Roomba Path') aspetta; fine

Passaggio 5: codice parte 3: sezione e-mail

Questo prenderà il percorso e l'immagine tracciati e li invierà a un indirizzo email specificato

(Mostrato qui con un'e-mail di esempio)

%% Sezione e-mail

if b==1 saveas(gcf, 'rovermap.png') %salva la cifra setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('Internet', 'E_mail', '[email protected]'); % account di posta da inviare da setpref('Internet', 'SMTP_Username', '[email protected]'); % username del mittente setpref('Internet', 'SMTP_Password', 'gssegsse'); % password del mittente props = 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('esempio email', 'RoverBeacon', 'L'astronauta ha smesso di muoversi. Per il recupero, segui le indicazioni nel file allegato.', 'rovermap.png') disp('email inviata') end

Consigliato: