Índice:

Mars Roomba: 6 etapas
Mars Roomba: 6 etapas

Vídeo: Mars Roomba: 6 etapas

Vídeo: Mars Roomba: 6 etapas
Vídeo: How to Make a Mars Rover / Rocker bogie Robot - Stair climbing 2024, Novembro
Anonim
Mars Roomba
Mars Roomba

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

A Declaração do Problema
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

Controle Remoto Bluetooth
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

Reconhecimento de Impacto
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

Reconhecimento de Vida
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ô !!

Recomendado: