Tabla de contenido:
- Paso 1: Suministros
- Paso 2: la declaración del problema
- Paso 3: control remoto Bluetooth
- Paso 4: reconocimiento de impacto
- Paso 5: Reconocimiento de vida
- Paso 6: ¡Ejecutarlo
Video: Mars Roomba: 6 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
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
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
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
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
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:
Convirtiendo su Roomba en un Mars Rover: 5 pasos
Convirtiendo su Roomba en un Mars Rover:
Mars Rover con Raspberry Pi: 5 pasos
Mars Rover con Raspberry Pi: Estimado gran aprendiz, Siempre tengo curiosidad por saber sobre Mars Rover, que tiene 6 ruedas que pueden recorrer toda la superficie de Marte y explorar cosas de la Tierra. También quiero explorar cosas sentándome en mi computadora portátil. Así que ahora creo que es el momento adecuado para hacerlo y
Raspberry Pi - Mars Rover autónomo con seguimiento de objetos OpenCV: 7 pasos (con imágenes)
Raspberry Pi - Mars Rover autónomo con seguimiento de objetos OpenCV: impulsado por una Raspberry Pi 3, reconocimiento de objetos Open CV, sensores ultrasónicos y motores de CC con engranajes. Este rover puede rastrear cualquier objeto para el que está entrenado y moverse en cualquier terreno
Mars Roomba Project UTK: 4 pasos
Mars Roomba Project UTK: DESCARGO DE RESPONSABILIDAD: ESTO SOLO FUNCIONARÁ SI EL ROOMBA ESTÁ CONFIGURADO DE CUALQUIER FORMA ESPECÍFICA, ESTE INSTRUCTABLE FUE CREADO PARA ESTUDIANTES Y FACULTADES DE LA UNIVERSIDAD DE TENNESSEE Y ESTUDIANTES DE LA UNIVERSIDAD DE TENNESSEE Este código se utiliza para configurar un Roomba para que funcione localmente escrito y s
IRobot Create-Mars Expedition Rover Mark I: 4 pasos
IRobot Create-Mars Expedition Rover Mark I: este instructivo le enseñará cómo configurar iRobot Create mediante la codificación MatLab. Su robot tendrá la capacidad de buscar minerales distinguiendo formas, maniobrar en terrenos accidentados mediante el uso de sensores de acantilado y tiene la capacidad