Índice:

UTK EF 230 MarsRoomba Projeto Outono 2018: 5 etapas
UTK EF 230 MarsRoomba Projeto Outono 2018: 5 etapas

Vídeo: UTK EF 230 MarsRoomba Projeto Outono 2018: 5 etapas

Vídeo: UTK EF 230 MarsRoomba Projeto Outono 2018: 5 etapas
Vídeo: UTK - EF 230 Autonomous Vehicle Project 2024, Novembro
Anonim
UTK EF 230 MarsRoomba Projeto Outono 2018
UTK EF 230 MarsRoomba Projeto Outono 2018

Atualmente, os rovers de Marte são usados para coletar dados na superfície de Marte por meio de vários métodos, até o fim de aprender mais sobre o potencial do planeta para a vida microbiana. Os rovers usam principalmente ferramentas de fotografia e análise de solo para coleta de dados, mas os rovers também incluem instrumentos de navegação, detectores de radiação, sensores atmosféricos e um laser para vaporização de amostras de rocha. O objetivo da missão do rover planejado para 2020 é basicamente o mesmo, mas com a tarefa especial de "coletar amostras de solo e rocha e armazená-las na superfície para possível retorno à Terra em uma missão futura", de acordo com a NASA.

No entanto, sob a premissa de que futuros rovers serão usados para assistência humana, nossa equipe considerou quais aspectos dos humanos o rover poderia monitorar. Chegamos à conclusão de que, caso alguma emergência deixasse um astronauta inconsciente devido a falhas no suporte de vida e no equipamento, nosso rover poderia servir como um sinalizador móvel ao observar que o astronauta que ele seguia está imóvel e transmitindo uma mensagem de angústia. Para seguir o humano e determinar a imobilidade, o rover pegaria informações como a cor dos sapatos do humano e seus movimentos. Outro dado a ser considerado é que ele teria que lembrar seu caminho para retransmitir um sinal de socorro em caso de emergência. Nosso rover atende a uma necessidade em Marte, pois a tentativa de uma missão tão cara em tal terreno estranho exige várias camadas de segurança contra falhas e, caso um astronauta não consiga obter ajuda devido a mau funcionamento ou inconsciência, o rover pode alertar outros.

Este Instructable foi projetado para ajudar o leitor a programar seu Roomba para seguir um "astronauta" com sucesso e enviar um sinal de socorro, se aplicável.

Etapa 1: Materiais necessários

Materiais necessários
Materiais necessários

1) Computador / laptop com acesso à Internet

2) MATLAB_R2018a

3) Download do Roomba e do Roomba

Etapa 2: configuração / download

Configuração / Download
Configuração / Download

Execute este script no MATLAB para baixar o software necessário para acessar o Roomba (salvo em arquivo próprio na pasta do projeto)

Ajuda adicional:

% Programa de instalação para EF 230 Roomba Project% Última atualização: 13 de setembro de 2017 (problemas de segurança corrigidos associados ao servidor https e aviso de exclusão de arquivo removido se ocorrerem erros) function roombaInstall clc; % lista de arquivos para instalar arquivos = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % local para instalação de options = weboptions ('CertificateFilename', ''); % diga a ele para ignorar os requisitos de certificado server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Instalação / atualização do Roomba'; % display purpose and get confirmation prompt = {'Este programa irá baixar estes arquivos EF 230 Roomba:' '' strjoin (arquivos, '') '' 'para esta pasta:' '' cd '' 'Deseja continuar? '}; bip; yn = questdlg (prompt, … dlgTitle, … 'Sim', 'Não', 'Sim');

if ~ strcmp (yn, 'Sim'), retorna; fim

% obtém a lista de arquivos existentes existing_files = files (cellfun (@exist, files)> 0); if ~ isempty (existing_files)% certifique-se de que está realmente ok para substituí-los prompt = {'Você está substituindo este (s) arquivo (s):' '' strjoin (existing_files, '') '' 'OK para substituir?' }; bip; yn = questdlg (prompt, … dlgTitle, … 'Sim', 'Não', 'Sim'); if ~ strcmp (yn, 'Sim'), retorna; fim fim

% baixe os arquivos cnt = 0; para i = 1: comprimento (arquivos) f = arquivos {i}; disp (['Baixando' f]); tente url = [servidor f]; websave (f, url, opções); % opções adicionadas para evitar erros de segurança cnt = cnt + 1; catch disp (['Erro ao baixar' f]); dummy = [f '.html']; se existe (dummy, 'arquivo') == 2 delete (dummy) end end end

if cnt == comprimento (arquivos) msg = 'Instalação bem-sucedida'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Erro de instalação - veja a janela de comando para detalhes'; waitfor (errordlg (msg, dlgTitle)); fim

fim% roombaInstall

Etapa 3: Código Parte 1: Função de rastreamento

Parte do código 1: Função de rastreamento
Parte do código 1: Função de rastreamento

Esta função pega a variável Roomba e a imagem da câmera no Roomba e encontra as coordenadas xy centrais do objeto rastreado

Salve este código em outro arquivo na mesma pasta.

função [xm, ym] = trackingblue (r)% Entradas: variável roomba% Saídas: valor xey do centro do seguinte objeto% Objetivo: encontra o centro de um objeto azul dado uma imagem% Uso [valor x, y valor] = trackingblue (variável roomba) img = r.getImage; % lê a câmera da subtrama do robô (1, 2, 2) subimagem (img); % mostra a imagem na mesma janela que o título do caminho ('Tracking Image') red = img (:,:, 1); verde = img (:,:, 2); azul = img (:,:, 3); justBlue = azul - verde / 2 - vermelho / 2; bw = justBlue> 40; segure na subtrama (1, 2, 2) subimagem (bw); [x, y] = encontrar (bw); se ~ isempty (x) && ~ isempty (y) xm = round (mean (x)); ym = redondo (média (y)); xx = max (1, xm-5): min (xm + 5, tamanho (bw, 1)); yy = max (1, ym-5): min (ym + 5, tamanho (bw, 2)); bwbw = zeros (tamanho (bw), 'uint8'); bwbw (xx, yy) = 255; segure na subtrama (1, 2, 2) subimagem (justBlue + bwbw); fim

Etapa 4: Código Parte 2: While Loop

Este código direciona o Roomba com base na localização xey do objeto da função de rastreamento. Isso fará com que o Roomba fique atento a paredes e penhascos, enquanto busca o azul. Isso também pegará as coordenadas xey do caminho do Roomba e criará um gráfico correspondente com a imagem de rastreamento. Se o sensor de resposta estiver ativado, ele passará para a seção de e-mail

% Projeto Rover

% Jonah Zahn, Wade Price, Noah Sloan% jzahn2, wprice15, nsloan1% Entradas: valor roomba, dados da câmera, bump, sensores de luz e parede% Objetivo: Segue o astronauta e evita obstáculos. Se alertado, o roomba envia um e-mail% detalhando um mapa e onde está de acordo com sua posição inicial. % Uso: apenas execute o programa após ter declarado uma variável roomba, também% tem um objeto verde em movimento% Saídas: mostra a imagem de rastreamento de imagem, o mapa de e-mails e o texto para o usuário %% Seguindo a Seção b = 0; % Inicializando variáveis c = 0; x = 0; y = 0; teta = 0; enquanto c == 0% Loop para fazê-lo detectar o objeto azul e os obstáculos t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); precipício = getCliffSensors (r); % inicializando as estruturas para os valores do sensor light = getLightBumpers (r); bump = getBumpers (r); se light.leftCenter> = 10 || light.rightCenter> = 10% Detecta se há uma parede perto de r.stop r.setLEDDigits ('help') c = 1% enquanto b == 0% se bump.right == 1 || bump.left == 1 || bump.front == 1% Detecta se bateu em algo depois de detectar uma parede% c = 1% b = 1% disp ('bump')% end% end elseif bump.right == 1 || bump.left == 1 || bump.front == 1% Detecta se bateu em algo, em caso afirmativo, ele enviará um e-mail r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || cliff.left <= 100 || cliff.right <= 100% Detecta se há um penhasco próximo a r.stop c = 1 r.setLEDDigits ('help') else% Define as velocidades de direção para seguir o azul 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 coordenada do roomba y = d. * sind (theta). * d + y; % y coordenada do subplot de roomba (1, 2, 1) plot (x, y, 'bd')% plota o caminho e adiciona um título de título ('Roomba Path') hold on; fim

Etapa 5: Código Parte 3: Seção de e-mail

Isso pegará o caminho traçado e a imagem e os enviará para um endereço de e-mail especificado

(Mostrado aqui com e-mail de exemplo)

%% Seção de Email

if b == 1 saveas (gcf, 'rovermap.png')% salva a figura setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % conta de email para enviar de setpref ('Internet', 'SMTP_Username', '[email protected]'); % senders username setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Senders password 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 ('exemplo de e-mail', 'RoverBeacon', 'O astronauta parou de se mover. Para recuperação, siga as instruções no arquivo anexado.', 'rovermap.png') disp ('e-mail enviado') end

Recomendado: