Taula de continguts:

Projecte UTK EF 230 MarsRoomba tardor 2018: 5 passos
Projecte UTK EF 230 MarsRoomba tardor 2018: 5 passos

Vídeo: Projecte UTK EF 230 MarsRoomba tardor 2018: 5 passos

Vídeo: Projecte UTK EF 230 MarsRoomba tardor 2018: 5 passos
Vídeo: Глава 11. Джейн Эйр Шарлотты Бронте 2024, Desembre
Anonim
Projecte UTK EF 230 MarsRoomba tardor 2018
Projecte UTK EF 230 MarsRoomba tardor 2018

Actualment, els rovers de Mart s’utilitzen per recopilar dades sobre la superfície de Mart mitjançant diversos mètodes, fins al final màxim d’aprendre més sobre el potencial del planeta per a la vida microbiana. Els rovers utilitzen principalment eines d’anàlisi de sòls i fotografia per a la recopilació de dades, però també inclouen instruments de navegació, detectors de radiació, sensors atmosfèrics i un làser per a la vaporització de mostres de roca. L'objectiu de la missió de rover 2020 previst és majoritàriament el mateix, però amb la tasca especial de "recollir mostres de terra i roca i guardar-les a la superfície per a un possible retorn a la Terra per una futura missió", segons la NASA.

Tanmateix, sota la premissa que els futurs rovers s’utilitzaran per a l’assistència humana, el nostre equip va considerar quins aspectes dels humans el rover podria controlar. Vam arribar a la conclusió que, en cas que una emergència fes inconscient a un astronauta amb un equipament i un equip de suport vital defectuosos, el nostre motor podria servir de far mòbil observant que l’astronauta que va seguir era immòbil i transmetia un missatge d’angoixa. Per seguir l’humà i determinar la immobilitat, el rover prendria aportacions com el color de les sabates de l’ésser humà i el seu moviment. Una altra entrada a tenir en compte és que hauria de recordar el seu camí per retransmetre un senyal de socors en cas d’emergència. El nostre rover compleix una necessitat a Mart, ja que intentar una missió tan costosa en un terreny tan estrany necessita múltiples capes de caixes fortes i, si un astronauta no pot obtenir la seva pròpia ajuda a causa d’un mal funcionament o inconsciència, el rover pot alertar els altres.

Aquest instructiu està dissenyat per ajudar el lector a programar el seu Roomba per seguir amb èxit un "astronauta" i enviar un senyal de socors si escau.

Pas 1: materials necessaris

Materials necessaris
Materials necessaris

1) Ordinador / portàtil accessible a Internet

2) MATLAB_R2018a

3) Descarregar Roomba i Roomba

Pas 2: Configuració / baixada

Configuració / descàrrega
Configuració / descàrrega

Executeu aquest script a MATLAB per descarregar el programari necessari per accedir al Roomba (desat al seu propi fitxer a la carpeta del projecte)

Ajuda addicional:

% Programa d'instal·lació del projecte EF 230 Roomba Darrera actualització: 13 de setembre de 2017 (S'han corregit els problemes de seguretat associats amb el servidor https i s'ha eliminat l'avís de supressió de fitxers en cas d'errors) function roombaInstall clc; % llista de fitxers per instal·lar fitxers = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % ubicació per instal·lar des d'opcions = opcions web ('CertificateFilename', ''); % digueu-li que ignori els requisits del certificat servidor = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Instal·lació / actualització de Roomba'; % display purpose and get confirmation prompt = {'Aquest programa descarregarà aquests fitxers EF 230 Roomba:' '' strjoin (files, '') '' 'a aquesta carpeta:' '' cd '' 'Voleu continuar? '}; bip; yn = questdlg (indicador, … dlgTitle, … "Sí", "No", "Sí");

si ~ strcmp (yn, 'Sí'), torna; final

% obtenir la llista de fitxers que existeixen existing_files = fitxers (cellfun (@exist, fitxers)> 0); if ~ isempty (existing_files)% assegureu-vos que està realment bé substituir-los prompt = {'Esteu substituint aquests fitxers:' '' strjoin (existing_files, '') '' 'Voleu substituir?' }; bip; yn = questdlg (indicador, … dlgTitle, … "Sí", "No", "Sí"); si ~ strcmp (yn, 'Sí'), torna; fi final

% descarrega els fitxers cnt = 0; per a i = 1: longitud (fitxers) f = fitxers {i}; disp (['Descarregant' f]); proveu url = [servidor f]; websave (f, url, opcions); % d'opcions afegides per evitar errors de seguretat cnt = cnt + 1; catch disp (['Error en descarregar' f]); maniquí = [f '.html']; si existeix (fictici, 'fitxer') == 2 esborra (fictici) extrem extrem extrem

if cnt == length (files) msg = 'Instal·lació correcta'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Error d'instal·lació: vegeu la finestra d'ordres per obtenir més detalls'; waitfor (errordlg (msg, dlgTitle)); final

end% roombaInstall

Pas 3: Codi Part 1: Funció de seguiment

Codi Part 1: Funció de seguiment
Codi Part 1: Funció de seguiment

Aquesta funció pren la variable Roomba i la imatge de la càmera del Roomba i troba les coordenades centrals xy de l'objecte rastrejat

Deseu aquest codi en un altre fitxer de la mateixa carpeta.

function [xm, ym] = trackingblue (r)% Entrades: variable roomba% Sortides: valor x i y del centre de l'objecte següent% Finalitat: troba el centre d'un objecte blau amb una imatge% Ús [valor x, y valor] = trackingblue (variable roomba) img = r.getImage; % llegeix la càmera de la subimatge (img) de la subtrama del robot (1, 2, 2); % mostra la imatge a la mateixa finestra que el títol del camí ('Imatge de seguiment') red = img (:,:, 1); verd = img (:,:, 2); blau = img (:,:, 3); blau just = blau - verd / 2 - vermell / 2; bw = justBlue> 40; mantenir la subimatge (1, 2, 2) subimatge (bw); [x, y] = trobar (bw); si ~ isempty (x) && ~ isempty (y) xm = round (mean (x)); ym = rodó (mitjana (y)); xx = màx (1, xm-5): min (xm + 5, mida (bw, 1)); yy = màx (1, ym-5): min (ym + 5, mida (bw, 2)); bwbw = zeros (mida (bw), 'uint8'); bwbw (xx, yy) = 255; mantingueu la subimatge (1, 2, 2) subimatge (justBlue + bwbw); final

Pas 4: Codi de la part 2: Mentre bucle

Aquest codi condueix Roomba basant-se en la ubicació xey de l'objecte des de la funció de seguiment. Això farà que Roomba tingui cura de les parets i els penya-segats mentre busca el blau. Això també prendrà les coordenades xy del camí de Roomba i crearà un diagrama corresponent amb la imatge de seguiment. Si el sensor de cops està activat, passarà a la secció de correu electrònic

Projecte% Rover

% Jonah Zahn, Wade Price, Noah Sloan% jzahn2, wprice15, nsloan1% Entrades: valor roomba, dades de la càmera, sensors de bump, llum i paret% Finalitat: Segueix l'astronauta i evita obstacles. Si s’avisa, roomba envia un% de correu electrònic detallant un mapa i on es troba segons la seva posició inicial. % Ús: només cal executar el programa amb haver declarat una variable roomba, també% té un objecte verd en moviment% Sortides: mostra la imatge de seguiment d'imatges, el mapa de correus electrònics i el text a l'usuari %% Seguint la secció b = 0; % Inicialització de variables c = 0; x = 0; y = 0; theta = 0; mentre que c == 0% bucle per fer-lo detectar l'objecte blau i els obstacles t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); penya-segat = getCliffSensors (r); % inicialitzant les estructures per als valors del sensor light = getLightBumpers (r); bump = getBumpers (r); si light.leftCenter> = 10 || light.rightCenter> = 10% Sentits si hi ha una paret a prop de r.stop r.setLEDDigits ('help') c = 1% mentre que b == 0% si bump.right == 1 || bump.left == 1 || bump.front == 1% Sentit si ha tocat alguna cosa després de detectar una paret% c = 1% b = 1% disp ('bump')% end% end elseif bump.right == 1 || bump.left == 1 || bump.front == 1% Sentirà si ha topat amb alguna cosa, si és així, enviarà un correu electrònic r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || penya-segat <= 100 || cliff.right <= 100% Sentits si hi ha un penya-segat a prop de r.stop c = 1 r.setLEDDigits ('ajuda') else% Estableix les velocitats de la unitat per seguir el blau si yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r.turnAngle (-5) end end theta = theta + r.getAngle; x = d. * cosd (theta) + x; coordenada% x del roomba y = d. * sind (theta). * d + y; coordenada% y de la trama de la subtrama roomba (1, 2, 1) (x, y, 'bd')% dibuixa el camí i afegeix un títol del títol ('Camí de Roomba'); final

Pas 5: Codi Part 3: Secció de correu electrònic

Això prendrà el camí i la imatge representats i els enviarà a una adreça de correu electrònic especificada

(Es mostra aquí amb un exemple de correu electrònic)

Secció de correu electrònic %%

si b == 1 saveas (gcf, 'rovermap.png')% desa la figura setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % compte de correu per enviar des de setpref ('Internet', 'SMTP_Username', '[email protected]'); % senders username setpref ('Internet', 'SMTP_Password', 'gssegsse'); Propietats de contrasenya de% Senders = 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 ("exemple de correu electrònic", "RoverBeacon", "L'astronauta ha deixat de moure's. Per recuperar-lo, seguiu les instruccions del fitxer adjunt.", "rovermap.png") disp ("correu electrònic enviat") final

Recomanat: