Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Este manual de instruções o orientará nas instruções de operação de um robô a vácuo Roomba controlado por Raspberry Pi. O sistema operacional que usaremos é através do MATLAB.
Etapa 1: suprimentos
O que você precisa reunir para realizar este projeto:
- Bot de aspirador de pó Create2 Roomba da iRobot
- Raspberry Pi
- Câmera Raspberry Pi
- A última versão do MATLAB
- A caixa de ferramentas de instalação do Roomba para MATLAB
- Aplicativo MATLAB para um aparelho celular
Etapa 2: a declaração do problema
Fomos encarregados de usar o MATLAB para desenvolver um rover que pudesse ser usado em Marte para auxiliar os cientistas na coleta de dados do planeta. As funções que abordamos em nosso projeto foram de controle remoto, reconhecimento de impacto de objeto, reconhecimento de água, reconhecimento de vida e processamento de imagem. Para conseguir esses talentos, codificamos usando os comandos da caixa de ferramentas do Roomba para manipular as várias funções do Roomba Create2 da iRobot.
Etapa 3: controle remoto Bluetooth
Este slide irá percorrer o código para controlar o movimento do Roomba usando os recursos Bluetooth do seu smartphone. Para começar, baixe o aplicativo MATLAB em seu smartphone e faça login em sua conta Mathworks. Uma vez logado, vá para "mais", "configurações" e conecte-se ao seu computador usando seu endereço IP. Uma vez conectado, volte para "mais" e selecione "sensores". Toque no terceiro sensor na barra de ferramentas superior da tela e toque em iniciar. Agora, seu smartphone é um controle remoto!
O código é o seguinte:
enquanto 0 == 0
pausa (.5)
PhoneData = M. Orientation;
Azi = PhoneData (1);
Pitch = PhoneData (2);
Lado = PhoneData (3);
bumps = r.getBumpers;
se lado> 80 || Lado <-80
r.stop
r.bipe ('C, E, G, C ^, G, E, C')
pausa
elseif Side> 20 && Side <40
r.turnAngle (-5);
elseif Side> 40
r.turnAngle (-25);
elseif Side-40
r.turnAngle (5);
elseif Side <-40
r.turnAngle (25);
fim
se Pitch> 10 && Pitch <35
r.moveDistance (.03)
elseif Pitch> -35 && Pitch <-10
r.moveDistance (-. 03)
fim
fim
Etapa 4: reconhecimento de impacto
Outra função que implementamos foi detectar o impacto do Roomba em um objeto e, em seguida, corrigir seu caminho atual. Para fazer isso, tivemos que usar condicionais com as leituras dos sensores do pára-choque para determinar se um objeto foi atingido. Se o robô atingir um objeto, ele recuará 0,2 metros e girará em um ângulo determinado pelo pára-choque que foi atingido. Depois que um item é atingido, um menu aparece exibindo a palavra "oof".
O código é mostrado abaixo:
enquanto 0 == 0
bumps = r.getBumpers;
r.setDriveVelocity (.1)
if bumps.left == 1
msgbox ('Oof!');
r.moveDistance (-0,2)
r.setTurnVelocity (.2)
r.turnAngle (-35)
r.setDriveVelocity (.2)
elseif bumps.front == 1
msgbox ('Oof!');
r.moveDistance (-0,2)
r.setTurnVelocity (.2)
r.turnAngle (90)
r.setDriveVelocity (.2)
elseif bumps.right == 1
msgbox ('Oof!');
r.moveDistance (-0,2)
r.setTurnVelocity (.2)
r.turnAngle (35)
r.setDriveVelocity (.2)
elseif bumps.leftWheelDrop == 1
msgbox ('Oof!');
r.moveDistance (-0,2)
r.setTurnVelocity (.2)
r.turnAngle (-35)
r.setDriveVelocity (.2)
elseif bumps.rightWheelDrop == 1
msgbox ('Oof!');
r.moveDistance (-0,2)
r.setTurnVelocity (.2)
r.turnAngle (35)
r.setDriveVelocity (.2)
fim
fim
Etapa 5: reconhecimento de vida
Codificamos um sistema de reconhecimento de vida para ler as cores dos objetos à sua frente. Os três tipos de vida para os quais codificamos são plantas, água e alienígenas. Para fazer isso, codificamos os sensores para calcular os valores médios de vermelho, azul, verde ou branco. Esses valores foram comparados aos limites definidos manualmente para determinar a cor para a qual a câmera está olhando. O código também traçaria o caminho para o objeto e criaria um mapa.
O código é o seguinte:
t = 10;
i = 0;
enquanto t == 10
img = r.getImage; imshow (img)
pausar (0,167)
i = i + 1;
média_ vermelha = média (média (img (:,:, 1)));
média_ azul = média (média (img (:,:, 3)));
média_verde = média (média (img (:,:, 2)));
média_branca = (média_ azul + média_verde + média_vermelha) / 3; % querem este valor de aproximadamente 100
nove_mais_ten = 21;
limiar_verde = 125;
limiar_ azul = 130;
limite_branco = 124;
limiar_ vermelho = 115;
enquanto nine_plus_ten == 21% verde - vida
if green_mean> green_threshold && blue_mean <blue_threshold && red_mean <red_threshold
r.moveDistance (-. 1)
a = msgbox ('possível fonte de vida encontrada, localização plotada');
pausa (2)
deletar (a)
[y2, Fs2] = audioread ('z_speak2.wav');
som (y2, Fs2)
pausa (2)
% plant = r.getImage; % imshow (planta);
% save ('plant_img.mat', plant ');
% localização do gráfico em verde
i = 5;
pausa
outro
nine_mais_ten = 19;
fim
fim
nove_mais_ten = 21;
enquanto nine_plus_ten == 21% blue - woder
if blue_mean> blue_threshold && green_mean <green_threshold && white_mean <white_threshold && red_mean <red_threshold
r.moveDistance (-. 1)
a = msgbox ('uma fonte de água foi encontrada, localização plotada');
pausa (2)
deletar (a)
[y3, Fs3] = audioread ('z_speak3.wav');
som (y3, Fs3);
% woder = r.getImage; % imshow (woder)
% save ('water_img.mat', woder)
% localização do gráfico em azul
i = 5;
pausa
outro
nine_mais_ten = 19;
fim
fim
nove_mais_ten = 21;
enquanto nine_plus_ten == 21% branco - alienígenas monkaS
if white_mean> white_threshold && blue_mean <blue_threshold && green_mean <green_threshold
[y5, Fs5] = audioread ('z_speak5.wav');
som (y5, Fs5);
pausa (3)
r.setDriveVelocity (0,.5)
[ys, Fss] = audioread ('z_scream.mp3');
som (sim, Fss);
pausa (3)
r.stop
% alien = r.getImage; % imshow (estrangeiro);
% save ('alien_img.mat', alien);
i = 5;
pausa
outro
nine_mais_ten = 19;
fim
fim
se i == 5
a = 1; % ângulo de giros
t = 9; % termina o grande loop
i = 0;
fim
fim
Etapa 6: Execute
Depois que todo o código foi escrito, combine tudo em um arquivo e voila! Seu bot do Roomba agora estará totalmente funcional e operará conforme anunciado! No entanto, o controle do Bluetooth deve estar em um arquivo separado ou separado do resto do código com %%.
Divirta-se usando seu robô !!