Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Ao utilizar o MATLAB e o robô Create2 da iRobot, este projeto irá explorar várias áreas de um local desconhecido. Empregamos os sensores do robô para ajudar a manobrar em um terreno perigoso. Ao obter fotografias e vídeo de um Raspberry Pi anexado, pudemos determinar os obstáculos que o robô enfrentará e eles serão classificados.
Peças e Materiais
Para este projeto, você precisará
- um computador
-versão mais recente do MATLAB (MATLAB R2018b foi usado para este projeto)
- caixa de ferramentas roombaInstall
- Robô Create2 do iRobot
-Raspberry Pi com câmera
Etapa 1: Inicialização e Sensores
Antes de iniciar qualquer programação, baixamos a caixa de ferramentas roombaInstall, que permitia o acesso a diferentes componentes do Robot.
Inicialmente, criamos uma GUI para inicializar qualquer robô. Para fazer isso, você precisa digitar o número do robô como entrada. Isso permitirá o acesso ao robô para executar nosso programa. Trabalhamos para fazer o robô manobrar pelos muitos terrenos que encontraria. Implementamos os Sensores Cliff, Sensores Light Bump e Sensores Physical Bump, usando suas saídas para desarmar o Robô para mudar sua velocidade e / ou direção. Quando qualquer um dos seis sensores Light Bump estão detectando um objeto, o valor de saída deles diminuirá, fazendo com que a velocidade do robô diminua para evitar uma colisão de velocidade total. Quando o robô finalmente colide com um obstáculo, os sensores de colisão física reportarão um valor maior que zero; por causa disso, o Robot irá parar, então não haverá mais colisões e mais funções podem ser colocadas em ação. Para os sensores de penhasco, eles lerão o brilho da área ao seu redor. Se o valor for maior que 2800, determinamos que o robô estaria em solo estável e seguro. Porém, se o valor for inferior a 800, os Sensores de Penhasco estarão detectando um penhasco, parando imediatamente para não cair. Qualquer valor intermediário foi determinado para representar água e fará com que o robô interrompa sua ação. Ao usar os sensores acima, a velocidade do robô é alterada, permitindo-nos determinar melhor se existe algum perigo.
Abaixo está o código (de MATLAB R2018b)
%% de inicialização
dlgPrompts = {'Número do Roomba'};
dlgTitle = 'Selecione seu Roomba';
dlgDefaults = {''};
opts. Resize = 'ligado';
dlgout = inputdlg (dlgPrompts, dlgTitle, 1, dlgDefaults, opts)% Criar janela que solicita que o usuário insira seu número de roomba
n = str2double (dlgout {1});
r = roomba (n); % Inicializa o Roomba especificado pelo usuário %% determinação de velocidade dos sensores Light Bump enquanto true s = r.getLightBumpers; % obtém sensores de colisão leve
lbumpout_1 = campo de extração (s, 'esquerdo'); % pega os valores numéricos dos sensores e os torna mais utilizáveis lbumpout_2 = extractfield (s, 'leftFront');
lbumpout_3 = campo de extração (s, 'leftCenter');
lbumpout_4 = campo de extração (s, 'rightCenter');
lbumpout_5 = campo de extração (s, 'rightFront');
lbumpout_6 = campo de extração (s, 'direita');
lbout = [lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6]% converte valores em matriz
sLbump = classificar (lbout); % classifica a matriz para o valor mais baixo pode ser extraída
lowLbump = sLbump (1); velocidade =.05 + (lowLbump) *. 005% usando o valor mais baixo, que representa os obstáculos próximos, para determinar a velocidade, velocidade mais alta quando nada for detectado
r.setDriveVelocity (velocidade, velocidade)
fim
% Pára-choques físicos
b = r.getBumpers; % De saída verdadeiro, falso
bsen_1 = campo de extração (b, 'esquerda')
bsen_2 = campo de extração (b, 'direita')
bsen_3 = campo de extração (b, 'frente')
bsen_4 = extractfield (b, 'leftWheelDrop')
bsen_5 = extractfield (b, 'rightWheelDrop')
bumps = [bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump = sum (bums)
se tbump> 0 r.setDriveVelocity (0, 0)
fim
% Sensores de Penhasco
c = r.getCliffSensors %% 2800 seguro, senão água
csen_1 = campo de extração (c, 'esquerda')
csen_2 = campo de extração (c, 'direita')
csen_3 = campo de extração (c, 'leftFront')
csen_4 = campo de extração (c, 'rightFront')
penhascos = [csen_1, csen_2, csen_3, csen_4]
ordcliff = sort (penhascos)
se ordcliff (1) <2750
r.setDriveVelocity (0, 0)
se precipício <800
disp 'precipício'
outro
disp 'água'
fim
r. TurnAngle (45)
fim
Etapa 2: obtendo dados
Depois que os sensores de impacto físico forem acionados, o robô implementará seu Raspberry Pi a bordo para tirar uma foto do obstáculo. Depois de tirar uma fotografia, usando o reconhecimento de texto se houver texto na imagem, o Robô determinará qual é o obstáculo e o que o obstáculo diz.
img = r.getImage; imshow (img);
imwrite (img, 'imgfromcamera.jpg')
photo = imread ('imgfromcamera.jpg')
ocrResults = ocr (foto)
knownText = ocrResults. Text;
figura;
texto imshow (foto) (220, 0, knownText, 'BackgroundColor', [1 1 1]);
Etapa 3: Concluindo a missão
Quando o Robô determinar que o obstáculo está em CASA, ele completará sua missão e ficará em casa. Após o término da missão, o Robô enviará um e-mail avisando que voltou para casa, e enviará as imagens que levou ao longo de sua viagem.
% Enviando email
setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com');
setpref ('Internet', 'E_mail', '[email protected]'); % conta de e-mail para enviar de setpref ('Internet', 'SMTP_Username', 'insira o e-mail do remetente'); % senders username setpref ('Internet', 'SMTP_Password', 'insira a senha do remetente'); % Senha do remetente
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 ('Digite o e-mail de recebimento', 'Roomba', 'O Roomba voltou para casa !!', 'imgfromcamera.jpg')% conta de correio para enviar para
O robô é então concluído.
Etapa 4: Conclusão
O programa MATLAB incluído é separado de todo o script que foi utilizado com o Robot. No rascunho final, certifique-se de colocar todo o código, exceto a etapa de inicialização, em um loop while para garantir que os bumpers estejam em execução constante. Este programa pode ser editado para atender às necessidades do usuário. A configuração do nosso robô é mostrada.
* Lembrete: não se esqueça de que a caixa de ferramentas roombaInstall é necessária para que o MATLAB interaja com o robô e o Raspberry Pi a bordo.