Índice:
- Etapa 1: obtendo as bibliotecas
- Etapa 2: Escrevendo os programas
- Etapa 3: Código
- Etapa 4: executando o código
Vídeo: Mars Roomba Project UTK: 4 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
ISENÇÃO DE RESPONSABILIDADE: ISTO SÓ FUNCIONARÁ SE O ROOMBA ESTIVER INSTALADO NUMA
FORMA MUITO ESPECÍFICA, ESTE INSTRUÍVEL FOI CRIADO PARA E DESTINADO A SER USADO PELA UNIVERSIDADE DE ESTUDANTES TENNESSEE E PELA FACULDADE
Este código é usado para configurar um Roomba para executar código gravado e salvo localmente no MATLAB. Isso não funcionará se você não conseguir obter as bibliotecas necessárias no site da Universidade do Tennessee. Se você tiver as bibliotecas, poderá usá-las para programar seu próprio Roomba usando as funções da biblioteca. Este Instructable ensina como instalar as bibliotecas, criar uma pasta para todo o código e como codificar e usar o programa que fornecemos abaixo.
Materiais requeridos:
· Roomba
· MATLAB
· Câmera Raspberry Pi e Pi
Etapa 1: obtendo as bibliotecas
No site da engenharia, há uma caixa de ferramentas / biblioteca fornecida, faça o download e coloque em uma nova pasta. Esta pasta deve conter todos os arquivos de trabalho do projeto, pois qualquer função usada em um programa que você fizer precisará se referir à biblioteca. Depois de fazer isso, você pode começar a trabalhar em seus programas
Etapa 2: Escrevendo os programas
Existem algumas funções que podem ser usadas no programa, essas funções podem ser acessadas usando o comando "doc roomba". Usando essas funções, você pode controlar seu Roomba de várias maneiras diferentes. O código fornecido a seguir usa os sensores de colisão, sensores de barra de luz, câmera e sensores de penhasco de maneiras diferentes para criar um marte rover. Usamos os sensores de impacto para detectar quando o Roomba atinge um objeto, quando isso acontece, o robô vai inverter, virar e continuar a se mover. Antes que o Roomba atinja um objeto, a barra de luz detecta o objeto e desacelera o Roomba para que, quando ele colidir com o objeto para ativar o sensor de colisão, o Roomba seja menos danificado / afetado pelo impacto. A câmera procura por água ou lava na superfície, se nenhum líquido for encontrado, o robô continuará a procurar, se houver água, o robô enviará uma mensagem aos operadores. Os sensores de penhasco são projetados para parar o robô se ele se aproximar de um penhasco. Se o robô sentir um penhasco, ele inverterá e se virará para evitar a queda.
Etapa 3: Código
Copie e cole isso em um arquivo MATLAB que está localizado na mesma pasta que as bibliotecas
functionMainRoombaFile (r)
r.setDriveVelocity (0,1, 0,1)
while true% Infinte while loop para manter o código em execução
dontFall = cliffCheck (r)% Atribui a variável 'dontFall' à função 'cliffCheck'
if dontFall% if instrução para prosseguir no código depois que 'cliffCheck' for concluído
r.setDriveVelocity (0,1, 0,1)% Mantém o Roomba em movimento após a conclusão do 'cliffCheck'
end% termina a instrução 'dontFall' if
bumper = bumpcheck (r)% Atribui a variável 'bumper' à função 'bumpcheck'
if bumper% if instrução para prosseguir no código após 'bumpcheck' ser concluído
r.setDriveVelocity (0,1, 0,1)% Mantém o Roomba em movimento após a 'verificação de bumpcheck' ser concluída
end% termina 'bumper' if instrução
liquids = LiquidCheck (r)% Atribui a variável 'líquidos' à função 'LiquidCheck'
if liquids% if declaração para prosseguir no código após 'LiquidCheck' for concluída
r.setDriveVelocity (0,1, 0,1)% Mantém o Roomba em movimento após a conclusão de 'LiquidCheck'
end% termina a instrução if de 'líquidos'
lightbumper = lightcheck (r)% Atribui a variável 'lightbumper' à função 'lightcheck'
pause (0,1)% Faça uma breve pausa para evitar a iteração contínua do loop
end% termina infinito while loop
fim% termina função
function bumper = bumpcheck (r)% Cria a função 'bumpcheck'
bumpdata = r.getBumpers% Atribui todos os dados do bumper à variável 'bumpdata'
bumper = bumpdata.right || bumpdata.left || bumpdata.front% Cria uma variável armazenada, 'bumper', para os diferentes bumpers
if bumpdata.right> 0% Instrução If para fazer com que diferentes funções do roomba aconteçam se o pára-choque for colidido
r.stop% para o Roomba
r.moveDistance (-0,3, 0,2)% inverte o Roomba 0,3 m
r.turnAngle (90, 0,5)% Gira o Roomba 90 graus o mais rápido possível
fim
se bumpdata.front> 0
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (randi (270), 0,5)% Gira o Roomba em um intervalo aleatório entre 0 e 270 graus o mais rápido possível
fim
se bumpdata.left> 0
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (-90, 0,5)% Gira o Roomba -90 graus o mais rápido possível
fim
fim
function lightbumper = lightcheck (r)% Cria a função 'lightcheck'
lightdata = r.getLightBumpers% Atribui todos os dados do sensor de colisão de luz para a variável 'lightdata'
lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter% Cria uma variável armazenada, 'lightbumper', para os diferentes amortecedores de luz
if lightbumper% declaração If para chamar os dados do lightbumper de cima
if lightdata.left> 10% declaração If para fazer com que diferentes funções do roomba aconteçam se o pára-choque de luz detectar mais de 10 valores
r.setDriveVelocity (0,05, 0,05)% Retarda o roomba para se preparar para colisão
end% termina a instrução if inicial
se lightdata.rightCenter> 10
r.setDriveVelocity (0,05, 0,05)
fim
se lightdata.right> 10
r.setDriveVelocity (0,05, 0,05)
fim
se lightdata.leftCenter> 10
r.setDriveVelocity (0,05, 0,05)
fim
end% termina a instrução if 'lightbumper'
end% termina a função lightcheck
function dontFall = cliffCheck (r)% Cria a função 'cliffCheck'
dados = r.getCliffSensors; % Atribui todos os dados do sensor de penhasco a 'dados' variáveis
dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020% Cria uma variável armazenada, 'dontFall', para os diferentes sensores de penhasco
if dontFall% If declaração para chamar os dados do sensor de penhasco de cima
if data.left <1010% declaração If para fazer com que diferentes funções do roomba aconteçam se o sensor de penhasco detectar menos de 1010 valores
r.stop
r.moveDistance (-0,2, 0,2)% inverte o Roomba 0,2 m
r.turnAngle (-90, 0,5)% Gira o Roomba -90 graus o mais rápido possível
elseif data.leftFront <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5)% Gira o Roomba 90 graus o mais rápido possível
elseif data.rightFront <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5)% Gira o Roomba 90 graus o mais rápido possível
elseif data.right <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5)% Gira o Roomba 90 graus o mais rápido possível
fim
fim
fim
função liquids = LiquidCheck (r)% Cria a função 'LiquidCheck'
enquanto true% start loop infinito para calibração
img = r.getImage; % lê a câmera do robô
image (img)% mostra a imagem em uma janela de figura
red_mean = mean (mean (img (200, 150, 1)))% lê a quantidade média de pixels vermelhos
blue_mean = mean (mean (img (200, 150, 3)))% lê a quantidade média de pixels azuis
líquidos = média_ vermelha || blue_mean% Cria uma variável armazenada, 'líquidos', para as diferentes variáveis de cor
if liquids% declaração If para chamar os dados da imagem de cima
if red_mean> 170% declaração If para fazer com que diferentes funções do roomba aconteçam se a câmera vir uma cor vermelha média maior que 170
r.stop% para o roomba
r.setLEDCenterColor (255)% define o círculo para a cor vermelha
r.setLEDDigits (); % limpa a tela
f = waitbar (0, '* MENSAGEM RECEBIDA *'); % cria uma barra de espera para uma mensagem de carregamento
r.setLEDDigits ('HOT'); % define o display LED para saída 'HOT'
pausa (0,5)% Breve pausa para ler as informações exibidas
r.setLEDDigits ('LAVA'); % define o display LED para saída 'LAVA'
pausa (0,5)
waitbar (.33, f, '* MENSAGEM RECEBIDA *'); % cria um aumento na barra de espera
r.setLEDDigits ('HOT');
pausa (0,5)
r.setLEDDigits ('LAVA');
pausa (0,5)
waitbar (.67, f, '* MENSAGEM RECEBIDA *'); % cria um aumento na barra de espera
r.setLEDDigits ('HOT');
pausa (0,5)
r.setLEDDigits ('LAVA');
waitbar (1, f, '* MENSAGEM RECEBIDA *'); % completa a barra de espera
pausa (1)
close (f)% fecha a barra de espera
r.setLEDDigits (); % limpa o display LED
fechar tudo% Fecha todas as janelas anteriores
eixos ('Cor', 'nenhum', 'XColor', 'nenhum', 'YColor', 'nenhum')% Limpa a janela de plotagem dos eixos e gráfico
y = 0,5; % define a posição y do texto na janela de plotagem
x = 0,06; % define a posição x do texto na janela de plotagem
title ('FROM MARS ROOMBA', 'fontsize', 32)% Adiciona um título à janela de plotagem
quadeqtxt = 'LAVA DE PERIGO'; % Define a variável 'quadeqtxt' para a saída 0
texto (x, y, quadeqtxt, 'intérprete', 'látex', 'tamanho da fonte', 36); % exibe o texto quadeq na janela de plotagem
r.moveDistance (-0,2, 0,2)% inverte o roomba 0,2m
r.turnAngle (180, 0,5)% gira o roomba 180 graus o mais rápido possível
r.setLEDCenterColor (128, 128); % define o LED central do roomba para laranja
fechar todas as% fecha as janelas abertas restantes
elseif blue_mean> 175% Instrução If para fazer com que diferentes funções do roomba aconteçam se a câmera vir uma cor azul média maior que 175
r.stop% para o roomba
r.setLEDCenterColor (255)% define o círculo para a cor vermelha
r.setLEDDigits (); % limpa a tela
f = waitbar (0, '* MENSAGEM RECEBIDA *'); % cria uma barra de espera para uma mensagem de carregamento
r.setLEDDigits ('OLHAR'); % define o display de LED para saída 'LOOK'
pausa (0,5)% Breve pausa para ler as informações exibidas
r.setLEDDigits ('WATR'); % define a exibição de LED para saída 'WATR'
pausa (0,5)
waitbar (.33, f, '* MENSAGEM RECEBIDA *'); % cria um aumento na barra de espera
r.setLEDDigits ('OLHAR');
pausa (0,5)
r.setLEDDigits ('WATR');
pausa (0,5)
waitbar (.67, f, '* MENSAGEM RECEBIDA *'); % cria um aumento na barra de espera
r.setLEDDigits ('OLHAR');
pausa (0,5)
r.setLEDDigits ('WATR');
waitbar (1, f, '* MENSAGEM RECEBIDA *'); % completa a barra de espera
pausa (1)
close (f)% fecha a barra de espera
r.setLEDDigits (); % limpa o display LED
fechar tudo% Fecha todas as janelas anteriores
eixos ('Color', 'none', 'XColor', 'none', 'YColor', 'none')% Limpa a janela de plotagem dos eixos e gráfico
y = 0,5; % define a posição y do texto na janela de plotagem
x = 0,06; % define a posição x do texto na janela de plotagem
title ('FROM MARS ROOMBA', 'fontsize', 32)% Adiciona um título à janela de plotagem
quadeqtxt = 'ENCONTRAR ÁGUA'; % Define a variável 'quadeqtxt' para a saída 0
texto (x, y, quadeqtxt, 'intérprete', 'látex', 'tamanho da fonte', 36); % exibe o texto quadeq na janela de plotagem
r.moveDistance (-0,2, 0,2)% inverte o roomba 0,2m
r.turnAngle (180, 0,5)% gira o roomba 180 graus o mais rápido possível
r.setLEDCenterColor (128, 128); % define o LED central do roomba para laranja
fechar todas as% fecha as janelas abertas restantes
end% termina 'red_mean' se a instrução
end% termina a instrução if de 'líquidos'
end% fecha infinito while loop
end% encerra a função 'LiquidCheck'
Etapa 4: executando o código
Depois de copiar e colar o código no MATLAB, você deve se conectar ao Roomba. Assim que o Roomba estiver conectado, você deve nomear a variável r. As funções usam a variável r quando se referem ao Roomba, portanto, o Roomba deve ser definido como a variável r. Depois de executar o código, o Roomba deve ser executado conforme as instruções.
Recomendado:
Transformando seu Roomba em um Mars Rover: 5 etapas
Transformando seu Roomba em um Mars Rover:
Projeto Robô UTK 2017: 3 etapas
Robot Project UTK 2017: Missão: Nossa equipe de engenheiros foi contratada pela Froogle, uma fundação sem fins lucrativos para o desenvolvimento de tecnologia de código aberto, para desenvolver uma equipe inovadora Human Assisting Mars Rover.-Out " rover " é um roomba que codificamos para executar uma série de
Mars Rover usando Raspberry Pi: 5 etapas
Mars Rover usando Raspberry Pi: Caros todos, Grande Aprendiz, Estou sempre curioso para saber sobre o Marte Rover, que tem 6 rodas que podem percorrer toda a superfície de Marte e explorar coisas da Terra. Eu também quero explorar as coisas sentando no meu laptop. Então agora eu acho que é a hora certa de fazer isso e
Mars Roomba: 6 etapas
Mars Roomba: Este manual de instruções irá guiá-lo 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
UTK EF 230 MarsRoomba Projeto Outono 2018: 5 etapas
UTK EF 230 MarsRoomba Projeto Outono 2018: Atualmente, os rovers de Marte são usados para coletar dados na superfície de Marte por meio de vários métodos, com o objetivo final de aprender mais sobre o potencial do planeta para a vida microbiana. Rovers usam principalmente ferramentas de fotografia e análise de solo para dados c