Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
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
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
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
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.