Índice:

Mars Roomba Project UTK: 4 etapas
Mars Roomba Project UTK: 4 etapas

Vídeo: Mars Roomba Project UTK: 4 etapas

Vídeo: Mars Roomba Project UTK: 4 etapas
Vídeo: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Julho
Anonim
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK

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: