Tabla de contenido:

Mars Roomba: 6 pasos
Mars Roomba: 6 pasos

Video: Mars Roomba: 6 pasos

Video: Mars Roomba: 6 pasos
Video: ТОП-10 РОБОТОВ-ПЫЛЕСОСОВ 2021 ГОДА🔥 ПОД РАЗНЫЙ БЮДЖЕТ!✅ Какой робот-пылесос выбрать в 2021 году?! 2024, Noviembre
Anonim
Mars Roomba
Mars Roomba

Este Instructable lo guiará en las instrucciones para operar un robot aspirador Roomba controlado por Raspberry Pi. El sistema operativo que usaremos es a través de MATLAB.

Paso 1: Suministros

Lo que necesitarás reunir para llevar a cabo este proyecto:

  • Robot aspirador Create2 Roomba de iRobot
  • Frambuesa pi
  • Cámara Raspberry Pi
  • La última versión de MATLAB
  • La caja de herramientas de instalación de Roomba para MATLAB
  • Aplicación MATLAB para un dispositivo celular

Paso 2: la declaración del problema

La declaración del problema
La declaración del problema

Se nos encomendó la tarea de utilizar MATLAB para desarrollar un rover que pudiera utilizarse en Marte para ayudar a los científicos a recopilar datos planetarios. Las funciones que abordamos en nuestro proyecto fueron de control remoto, reconocimiento de impacto de objetos, reconocimiento de agua, reconocimiento de vida y procesamiento de imágenes. Para lograr estas hazañas, codificamos usando los comandos de la caja de herramientas de Roomba para manipular las muchas funciones de Create2 Roomba de iRobot.

Paso 3: control remoto Bluetooth

Control Remoto Bluetooth
Control Remoto Bluetooth

Esta diapositiva recorrerá el código para controlar el movimiento del Roomba utilizando las capacidades de Bluetooth de su dispositivo de teléfono inteligente. Para comenzar, descargue la aplicación MATLAB en su teléfono inteligente e inicie sesión en su cuenta de Mathworks. Una vez que haya iniciado sesión, vaya a "más", "configuración" y conéctese a su computadora usando su dirección IP. Una vez conectado, vuelva a "más" y seleccione "sensores". Toque el tercer sensor en la barra de herramientas superior de la pantalla y toque comenzar. ¡Ahora, su teléfono inteligente es un control remoto!

El código es el siguiente:

mientras 0 == 0

pausa (.5)

PhoneData = M. Orientation;

Azi = PhoneData (1);

Paso = PhoneData (2);

Lado = PhoneData (3);

golpes = r.getBumpers;

si Lado> 80 || Lado <-80

r.stop

r.beep ('C, E, G, C ^, G, E, C')

rotura

elseif Lado> 20 && Lado <40

r.turnAngle (-5);

elseif Lado> 40

r.turnAngle (-25);

elseif Side-40

r.turnAngle (5);

elseif Lado <-40

r.turnAngle (25);

fin

si Pitch> 10 && Pitch <35

r.moveDistance (.03)

elseif Tono> -35 && Tono <-10

r.moveDistance (-. 03)

fin

fin

Paso 4: reconocimiento de impacto

Reconocimiento de impacto
Reconocimiento de impacto

Otra función que implementamos fue la de detectar el impacto del Roomba en un objeto y luego corregir su ruta actual. Para hacer esto, tuvimos que usar condicionales con las lecturas de los sensores del parachoques para determinar si se golpeó un objeto. Si el robot golpea un objeto, retrocederá 0,2 metros y girará en un ángulo determinado por qué parachoques fue golpeado. Una vez que se ha pulsado un elemento, aparece un menú que muestra la palabra "oof".

El código se muestra a continuación:

mientras 0 == 0

golpes = r.getBumpers;

r.setDriveVelocity (.1)

si 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)

fin

fin

Paso 5: Reconocimiento de vida

Reconocimiento de vida
Reconocimiento de vida

Codificamos un sistema de reconocimiento de vida para leer los colores de los objetos frente a él. Los tres tipos de vida que codificamos son plantas, agua y extraterrestres. Para hacer esto, codificamos los sensores para calcular los valores promedio de rojo, azul, verde o blanco. Estos valores se compararon con los umbrales que se establecieron manualmente para determinar el color que está mirando la cámara. El código también trazaría la ruta al objeto y crearía un mapa.

El código es el siguiente:

t = 10;

i = 0;

mientras que t == 10

img = r.getImage; imshow (img)

pausa (0.167)

i = i + 1;

red_mean = mean (mean (img (:,:, 1)));

blue_mean = mean (mean (img (:,:, 3)));

green_mean = mean (mean (img (:,:, 2)));

media_blanco = (medio_azul + medio_verde + medio_rojo) / 3; % quiere este valor aproximadamente 100

nine_plus_ten = 21;

umbral_verde = 125;

umbral_azul = 130;

umbral_blanco = 124;

umbral_rojo = 115;

while nine_plus_ten == 21% verde - vida

if green_mean> green_threshold && blue_mean <blue_threshold && red_mean <red_threshold

r.moveDistance (-. 1)

a = msgbox ('posible fuente de vida encontrada, ubicación trazada');

pausa (2)

eliminar (a)

[y2, Fs2] = audioread ('z_speak2.wav');

sonido (y2, Fs2)

pausa (2)

% planta = r.getImage; % imshow (planta);

% save ('plant_img.mat', plant ');

% ubicación de la parcela en verde

i = 5;

rotura

demás

nine_plus_ten = 19;

fin

fin

nine_plus_ten = 21;

while nine_plus_ten == 21% azul - woder

if blue_mean> blue_threshold && green_mean <green_threshold && white_mean <white_threshold && red_mean <red_threshold

r.moveDistance (-. 1)

a = msgbox ('se ha encontrado una fuente de agua, se trazó la ubicación');

pausa (2)

eliminar (a)

[y3, Fs3] = audioread ('z_speak3.wav');

sonido (y3, Fs3);

% woder = r.getImage; % imshow (woder)

% save ('water_img.mat', woder)

% ubicación de la parcela en azul

i = 5;

rotura

demás

nine_plus_ten = 19;

fin

fin

nine_plus_ten = 21;

while nine_plus_ten == 21% blanco - alienígenas monkaS

if white_mean> white_threshold && blue_mean <blue_threshold && green_mean <green_threshold

[y5, Fs5] = audioread ('z_speak5.wav');

sonido (y5, Fs5);

pausa (3)

r.setDriveVelocity (0,.5)

[ys, Fss] = audioread ('z_scream.mp3');

sonido (ys, Fss);

pausa (3)

r.stop

% alien = r.getImage; % imshow (extranjero);

% save ('alien_img.mat', alien);

i = 5;

rotura

demás

nine_plus_ten = 19;

fin

fin

si i == 5

a = 1; % de ángulo de giro

t = 9; % terminar bucle grande

i = 0;

fin

fin

Paso 6: ¡Ejecutarlo

Después de que se haya escrito todo el código, combínelo todo en un solo archivo y ¡listo! ¡Su robot Roomba ahora será completamente funcional y operará como se anuncia! Sin embargo, el control de Bluetooth debe estar en un archivo separado o separado del resto del código con %%.

¡Disfruta usando tu robot!

Recomendado: