Índice:

Astronauta-Assisting Roomba: 4 etapas
Astronauta-Assisting Roomba: 4 etapas

Vídeo: Astronauta-Assisting Roomba: 4 etapas

Vídeo: Astronauta-Assisting Roomba: 4 etapas
Vídeo: How to Empty Clean Bin Roomba Combo j Series 2024, Novembro
Anonim
Astronaut-Assisting Roomba
Astronaut-Assisting Roomba

Este projeto é feito utilizando o Raspberry Pi 3 a bordo do iRobot Create Versão 2. O MATLAB é usado para programar o robô para seguir instruções específicas usando seus sensores e câmera. Os sensores e câmeras são utilizados para realizar tarefas específicas que seguiriam um astronauta e forneceriam a ele a capacidade de se comunicar com sua base doméstica se algo der errado.

Etapa 1: peças necessárias

Peças Necessárias
Peças Necessárias
Peças Necessárias
Peças Necessárias
Peças Necessárias
Peças Necessárias
Peças Necessárias
Peças Necessárias

1. iRobot Create Versão 2

O iRobot Create é a parte mais essencial deste projeto, pois é programável e pode ser uma ótima representação para um rover real que segue os astronautas e os auxilia no futuro

2. Raspberry Pi 3

O Raspberry Pi foi o programável usado para este projeto. O código é projetado para o Pi e a versão do Pi anexado é o 3 (modelo B). Outras placas programáveis, como o arduino, são utilizáveis; no entanto, o arduino e a maioria das outras placas exigirão uma codificação diferente da descrita em outra etapa

3. Módulo de câmera Raspberry Pi

A única conexão externa com o Raspberry Pi necessária para este projeto é o módulo da câmera. O módulo da câmera é parte integrante deste projeto, já que o roomba só executará tarefas com base no que vê na câmera

4. MATLAB 2018a

A segunda versão mais recente do MATLAB, 2018a, foi usada para a codificação envolvida nesta configuração. É provável que muitas outras versões do MATLAB funcionem com isso, já que a programação do roomba já existe há algum tempo

Etapa 2: Arquivos e configuração da câmera

Arquivos e configuração da câmera
Arquivos e configuração da câmera

1. Conexões do Raspberry Pi e da câmera com o roomba

  • O Pi pode se conectar ao iRobot diretamente com um micro USB. É tudo o que precisa para estar pronto para uso. No entanto, é recomendável que ele seja colocado com segurança no roomba, como mostrado nas fotos ao longo da apresentação até agora.
  • A câmera tem uma conexão direta com o Raspberry Pi e é altamente recomendável que algo seja comprado ou feito para segurar a câmera diretamente para cima. Não há nenhum ponto real para a câmera se ela não puder ser mantida no lugar para mostrar o que o roomba vê.

2. Arquivos

  • Depois de ter tudo configurado e conectado, certifique-se de que o robô está reiniciado e pronto para funcionar, segurando os botões "Spot" e "Dock" por 10 segundos juntos.
  • É aqui que o MATLAB é necessário pela primeira vez. Os arquivos para o roomba precisam ser instalados primeiro e tudo o que é necessário para esses arquivos executar é o código fornecido neste link:
  • https://ef.engr.utk.edu/ef230-2017-08//projects/ro…

Etapa 3: teste inicial do Roomba

Há muitas verificações iniciais a serem realizadas no roomba para garantir que ele está funcionando.

1. Certifique-se de que está conectado à mesma rede WiFi que o roomba. Sem isso, você nunca se conectará por meio do MATLAB.

2. Descubra a qual número seu roomba está atribuído para que você possa se conectar especificamente ao roomba que você escolheu. Por exemplo, se o número do seu roomba for 30, você se conectaria a ele digitando roomba (30) na janela de comando do MATLAB.

3. O roomba pode ser controlado através de structs no MATLAB. Por exemplo, se você definir seu código para roomba (30) para a variável 'r', o robô pode ser movido para frente com o comando r.moveDistance (0.2, 0.1).

4. Existem muitos comandos diferentes que podem ser comunicados ao roomba e podem ser vistos digitando 'doc roomba' na janela de comando.

5. Os sensores para leituras de luz, colisão e penhasco podem ser lidos usando os comandos vistos no 'doc roomba', mas uma maneira de ter um menu constante e limpo para ver os dados do sensor pode ser visto usando 'r.testSensors '.

6. Depois de testar tudo isso, o software de coleta de imagens do robô pode ser utilizado para ler e ver as fotos tiradas. O código básico para isso seria img = r.getImage e imshow (img);.

7. Os valores RGB da imagem podem ser encontrados com os códigos red_mean = mean (mean (img (:,:, 1)));

média_verde = média (média (img (:,:, 2))); e azul_média = média (média (img (:,:, 3)));.

Etapa 4: Exemplo de código MATLAB

Exemplo de código MATLAB
Exemplo de código MATLAB

Neste ponto, você está pronto para utilizar os sensores e o software de captura de imagens para criar seu próprio giro em um Protótipo de Ajuda Humana do Mars Rover. Nosso exemplo é seguir o astronauta rastreando a cor branca e movendo-se em sua direção. O robô emitirá um bipe se seus sensores estiverem lendo valores altos para que o astronauta possa reiniciar o robô se ele estiver preso ou ir buscá-lo e reiniciá-lo se ele estiver preso em um penhasco. No entanto, ele só lê esses erros enquanto vê o branco. Sem ser capaz de ver a cor branca, o robô entrará no modo de erro. Ele é programado para enviar dois tipos diferentes de e-mails de volta para a base, dependendo do que vê. Se ele vir a cor da pele do astronauta, isso obviamente não é bom, então ele alertará a base local se o astronauta tiver a pele aparecendo com um mau funcionamento do traje. A outra mensagem é preparada se o astronauta simplesmente desaparecer de vista. Se não houver branco ou cor de pele nas câmeras, o robô girará e enviará outro e-mail, mas diferente. As imagens onde o roomba não consegue ver o astronauta serão enviadas junto com a mensagem nos e-mails. O código do nosso projeto é mostrado abaixo:

para i = 1:.1: 3 img = r.getImage; imagem (img) red_mean = média (média (img (:,:, 1))); média_verde = média (média (img (:,:, 2))); média_ azul = média (média (img (:,:, 3))); if red_mean> 110 && red_mean 110 && blue_mean 110 && green_mean0 || bump.esquerdo> 0 || bump.front> 0 r.beep () r.beep () r.beep () r.stop elseif cliff.left <10 || cliff.leftFront <10 || cliff.rightFront <10 || cliff.right700 || light.leftFront> 700 || light.leftCenter> 700 || light.rightCenter> 700 || light.rightFront> 700 || light.right> 700 r.beep () r.beep () r.beep () r.beep () r.beep () r.stop else para i = 1: 2 r.moveDistance (0,2, 0,1) r. setDriveVelocity (.3,.2) r.stop end end end se green_mean <35 && blue_mean <35% da cor da pele mostrando (precisa ser ajustado com base na cor da pele do astronauta) r.beep (); r.beep (); r.beep (); mail = '[email protected]'; % envia e-mail mostrando que o terno está desativado psswd = 'sim'; host = 'smtp.gmail.com'; porta = '465'; emailto = '[email protected]'; m_subject = 'assunto'; m_text = 'teste'; setpref ('Internet', 'E_mail', mail); setpref ('Internet', 'SMTP_Server', host); setpref ('Internet', 'SMTP_Username', mail); setpref ('Internet', 'SMTP_Password', psswd); props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', mail); props.setProperty ('mail.smtp.host', host); props.setProperty ('mail.smtp.port', porta); props.setProperty ('mail.smtp.starttls.enable', 'true'); props.setProperty ('mail.smtp.debug', 'true'); props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.port', porta); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (emailto, 'Socorro!', 'O uniforme dos astronautas está desligado!', img); end if red_mean 135 || green_mean 135 || blue_mean 135 for j = 1: 2% se o branco não puder ser encontrado pelo robô r.turnAngle (360) mail = '[email protected]'; psswd = 'sim'; host = 'smtp.gmail.com'; porta = '465'; emailto = '[email protected]'; m_subject = 'assunto'; m_text = 'teste'; setpref ('Internet', 'E_mail', mail); setpref ('Internet', 'SMTP_Server', host); setpref ('Internet', 'SMTP_Username', mail); setpref ('Internet', 'SMTP_Password', psswd); props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', mail); props.setProperty ('mail.smtp.host', host); props.setProperty ('mail.smtp.port', porta); props.setProperty ('mail.smtp.starttls.enable', 'true'); props.setProperty ('mail.smtp.debug', 'true'); props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.port', porta); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (emailto, 'Ajuda!', 'O astronauta não pode ser encontrado!', img); r.stop end end end

Obviamente, é uma bagunça aqui, mas deve melhorar uma vez copiado. As senhas e e-mails para isso devem ser fornecidos por aqueles que fazem este projeto, obviamente.

No entanto, nosso exemplo é apenas uma das muitas maneiras de mexer com este robô para torná-lo adequado a todos. Há muitas coisas diferentes a serem feitas, nas quais você pode se adequar.

Recomendado: