Índice:
- Etapa 1: Materiais e suprimentos:
- Passo 2:
- Etapa 3: montando seu "jardim"
- Etapa 4: escrever o código
- Etapa 5: copie o código
Vídeo: Garden Helper Roomba Bot: 8 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
Kiara Myers, Ahmad Alghadeer e Madison Tippet
Propósito:
Este instrutível irá ensiná-lo a programar um Roomba Bot, usando o MATLAB, para navegar por um jardim, detectando frutas / vegetais de formato circular que estão maduros o suficiente para serem colhidos com base em seu tamanho. Esse robô também envia um e-mail avisando quantas frutas estão prontas para serem colhidas e o caminho que percorreu.
Recursos:
- Usa sensores de luz para detectar paredes e virar ligeiramente para evitar atingi-las
- Utiliza sensores de colisão para interromper o programa quando atinge a rocha no final do jardim
- Usa processamento de imagem para detectar um círculo no jardim e então determinar seu raio
- Usa sensores de penhasco para detectar uma fita colorida que indica a presença de uma fruta
Etapa 1: Materiais e suprimentos:
- Um laptop
- MATLAB 2017
- Limpador Roomba Vaccum
- Raspberry Pi
- Blocos de madeira
- Papel branco
- Papel preto
- Fita colorida / tira fina de papel colorido
- Grande pedra
Passo 2:
Etapa 3: montando seu "jardim"
- Pegue seu papel preto e corte círculos de vários tamanhos
-
Cole esses círculos pretos em um grande papel branco
Este contraste será necessário ao detectar uma fruta
-
Use seus blocos de madeira para construir um caminho de jardim semelhante a um labirinto para o seu robô navegar
Escolhemos um caminho em forma de U, conforme ilustrado acima
- No final do seu jardim, adicione uma pedra ou porta ou outro objeto para o seu robô saber que está feito
-
Cole seu papel branco com o círculo nas paredes do jardim
Usamos baldes para prender porque nossas paredes eram muito curtas para a câmera
- Coloque fita colorida / tira fina de papel colorido no chão na frente da fruta
Etapa 4: escrever o código
Navegando no Jardim
Usando sensores de impacto: para executar o programa, colocamos a codificação em uma instrução while que percorre várias instruções if até que o código seja quebrado. Se qualquer um dos bumpers for atingido, seu valor será igual a true (que em booleano é o valor 1). Uma instrução if é usada para quebrar o código quando um de seus valores for igual a 1.
Usando sensores de penhasco: dentro da instrução while, usamos uma instrução if para informar ao Roomba quando ele chegou à localização de uma planta. O Roomba detecta a fita colorida no chão examinando o limite de vermelho que os sensores de penhasco captam. Se o sensor de penhasco esquerdo ou direito detecta uma cor com um limite maior do que o do solo, ele irá parar o robô por 2 segundos (usando o comando de pausa). Durante esses 2 segundos, o Roomba obterá e exibirá uma imagem da fruta. Usando o comando imfindcircles embutido, defina um intervalo para os raios de seus círculos e seu Roomba encontrará sua fruta.
Usando o processamento de imagem: dentro da instrução if, incorporamos outra instrução if que diz: se o raio detectado, radii3, é maior ou igual ao nosso requisito mínimo de uma fruta madura, r1 (você decide isso), então conte e exiba o Roomba quantas frutas estão prontas e vire para continuar pelo jardim. Se não, é a vez de continuar pelo jardim. Nota: pode ser necessário ajustar o ângulo de rotação porque cada Roomba é diferente
Usando Light Bumpers: Em outra instrução if, os light bumpers são analisados para garantir que nenhum deles se torne maior do que nosso limite determinado. Se o pára-choque esquerdo, direito, centro esquerdo, centro direito, frontal esquerdo ou direito dianteiro ultrapassar a soleira, o Roomba girará levemente no ângulo apropriado para evitar bater em uma parede. Portanto, navegando no labirinto.
O resto do código é usado para traçar o caminho percorrido pelo Roomba e, em seguida, enviar os resultados para seu e-mail
Etapa 5: copie o código
% Objetivo: Com base em seus tamanhos, o roomba percorre um jardim e distingue vegetais / frutas que estão prontos para serem colhidos. % Entradas: sensores Lightbump, sensores Cliff, sensores Bump, imagem da câmera% Saídas: Sempre que os sensores de luz forem maiores que o limite, o roomba irá virar e tirar uma imagem, emite um bipe se o raio de% vegetais / frutas estiver entre um intervalo específico. O código quebra quando o roomba esbarra em% um objeto, envia ao astronauta um e-mail sobre quantas frutas estão prontas para serem% coletadas e um mapeamento do movimento do roomba. % Uso: declarações if e while, comandos de plotagem, código de e-mail do MATLAB
k = 0
tique
timerVal = tic
enquanto verdadeiro
v = 0,2; % velocity r.setDriveVelocity (v, v);% roomba avançar L = r.getLightBumpers; LC = L.leftCenter; Rr = L. direita; Lf = L.esquerdo; RC = L.rightCenter; LF = L.leftFront; RF = L.rightFront; Q = 75; % limiar. RTH = 30; % Limite vermelho alto RTL = 10; % Limite vermelho baixo B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; if S.leftFront> PL1 || S.rightFront> PL1% detecta se a cor no solo está acima do limite r.stop pause (2) elapsedTime = toc (timerVal-2) tic timerVal = tic% pausa por 2 segundos img = r.getImage; % take image imshow (img)% display image [centers3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0,9); h = viscírculos (centros3, raios3); % procuram círculos de raios com o intervalo especificado na imagem se raios3> = r1 T = 1 k = k + 1 dist1 = 0,2. * elapsedTime% Se o raio detectado for maior ou igual ao requisito mínimo de% de uma fruta madura, então o Roomba conta essa fruta elseif radii3 <= r3 T = 0 else T = 0 dist2 = 0.2. * elapsedTime% Caso contrário, ele não conta a extremidade da fruta
if T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78)% Se uma fruta foi detectada, exibe o número no Roomba,% faz um barulho e vira elseif T == 2 r.turnAngle (78)% Se 2 frutas forem detectadas, gire para continuar através da% garden else r.turnAngle (78)% Se nenhuma fruta for detectada, então gire para continuar até a% garden end if LC> Q r.stop r.turnAngle (-7) elseif RC> Q r.parar r.turnAngle (7) elseif LF> Q r.stop r.turnAngle (-7) elseif RF> Q r.stop r. turnAngle (7) elseif Lf> Q r.stop r.turnAngle (-7) elseif Rr> Q r.stop r.turnAngle (7) end% Se algum dos valores dos amortecedores de luz ultrapassar o limite, então% o Roomba irá virar ligeiramente na direção apropriada para evitar% bater em uma parede
se B.direito == 1 || B.esquerdo == 1 || B.front == 1 dist3 = 0.2. * ElapsedTime r.stop r.beep ('F # * 2, F # * 2, c, F # * 2, F # * 2') r.turnAngle (360)% Se algum dos bumbers são atingidos, então o roomba toca o som, gira,% e quebra o código
fim do intervalo
end scatter (0,533, 0, '^') hold on scatter (0,533, dist1, '<') hold on scatter (-dist2, dist1, 'v') hold on scatter (-dist2, 0, 'd') saveas (gcf, 'Movement.png')
kmsg = num2str (k) mail = '[email protected]' senha = 'Srsora123 #' host = 'smtp.gmail.com' porta = '465'
setpref ('Internet', 'E_mail', mail); setpref ('Internet', 'SMTP_Server', host) 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 (mail, 'Olá astronauta! Existem tantas frutas assim no jardim', kmsg, {'movement.png'})
Recomendado:
The Werewolves of Miller's Hollow (狼人 殺) Circuit Helper: 4 etapas
The Werewolves of Miller's Hollow (狼人 殺) Circuit Helper: Este projeto é feito para pessoas que gostam de jogar The Werewolves of Miller's Hollow, e esta caixa é usada para jogar com 8 pessoas, com três lobisomens, dois aldeões e três papéis especiais (Vidente, Bruxa e Caçador). Esta caixa é feita para substituir o
Breadboard Wire Helper: 10 etapas (com imagens)
Breadboard Wire Helper: Este manual de instruções mostra como construir uma ferramenta para ajudar a tornar a prototipagem da breadboard mais fácil e organizada. Eu a chamo de Breadboard Wire Helper
Ultimate Electronics Helper -- PSU de bancada variável com mãos que ajudam: 12 etapas (com imagens)
Ultimate Electronics Helper || PSU de bancada variável com mãos que ajudam: Ao trabalhar com eletrônicos, duas ferramentas são quase sempre necessárias. Hoje estaremos criando esses dois fundamentos. E também vamos dar um passo adiante e mesclar esses dois juntos no melhor ajudante de eletrônica! É claro que estou falando sobre
Bot de desenho de linha BT criado para o lixo - Meu bot: 13 etapas (com imagens)
Lixo construído BT Line Drawing Bot - Meu Bot: Hai amigos, depois de um longo intervalo de cerca de 6 meses, aqui estou eu com um novo projeto. Até a conclusão de Cute Drawing Buddy V1, SCARA Robot - Arduino eu planejo um outro robô de desenho, o objetivo principal é cobrir um grande espaço para desenho. Braços robóticos tão fixos c
Roomba Bot the Bulider: 5 etapas (com imagens)
Roomba Bot the Bulider: Bot the Builder é um roomba, que com " grabbers " anexado à frente será capaz de mover objetos. O código com ele é configurado para registrar o primeiro movimento com uma caixa GUI que você pode controlar com apenas um clique do mouse. Afte