Tabla de contenido:
- Paso 1: Obtener las bibliotecas
- Paso 2: escribir los programas
- Paso 3: Código
- Paso 4: Ejecutar el código
Video: Mars Roomba Project UTK: 4 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
DESCARGO DE RESPONSABILIDAD: ESTO SOLO FUNCIONARÁ SI EL ROOMBA ESTÁ INSTALADO EN UN
DE MANERA MUY ESPECÍFICA, ESTE INSTRUCTABLE FUE CREADO Y PREVISTO PARA SER UTILIZADO POR ESTUDIANTES Y FACULTADES DE LA UNIVERSIDAD DE TENNESSEE
Este código se utiliza para configurar un Roomba para ejecutar código escrito y guardado localmente en MATLAB. Esto no funcionará si no puede obtener las bibliotecas necesarias del sitio web de la Universidad de Tennessee. Si tiene las bibliotecas, puede usarlas para programar su propio Roomba usando las funciones de la biblioteca. Este Instructable le enseña cómo instalar las bibliotecas, crear una carpeta para todo el código y cómo codificar y usar el programa que le proporcionamos a continuación.
Los materiales requeridos:
· Roomba
· MATLAB
· Cámara Raspberry Pi y Pi
Paso 1: Obtener las bibliotecas
En el sitio web de ingeniería se proporciona una caja de herramientas / biblioteca, descárguela y colóquela en una nueva carpeta. Esta carpeta debe contener todos los archivos de trabajo del proyecto, ya que cualquier función utilizada en un programa que cree deberá hacer referencia a la biblioteca. Una vez hecho esto, puede comenzar a trabajar en sus programas.
Paso 2: escribir los programas
Hay bastantes funciones que se pueden usar en el programa, estas funciones se pueden acceder usando el comando "doc roomba". Con estas funciones, puede controlar su Roomba de muchas formas diferentes. El código que se proporciona a continuación utiliza los sensores de golpes, los sensores de la barra de luz, la cámara y los sensores de acantilado de diferentes maneras para crear un vehículo explorador de Marte. Usamos los sensores de golpes para detectar cuándo el Roomba golpea un objeto, cuando esto sucede, el robot retrocede, gira y continúa moviéndose. Antes de que el Roomba golpee un objeto, la barra de luz detectará el objeto y ralentizará el Roomba de modo que cuando choque con el objeto para activar el sensor de golpes, el Roomba resultará menos dañado / afectado por el impacto. La cámara busca agua o lava en la superficie, si no se encuentra líquido, el robot continuará buscando, si se encuentra algo de agua, el robot enviará un mensaje a los operadores. Los sensores de acantilado están diseñados para detener al robot si se acerca a un acantilado. Si el robot detecta un acantilado, retrocederá y se dará la vuelta para evitar caer.
Paso 3: Código
Copie y pegue esto en un archivo MATLAB que se encuentra en la misma carpeta que las bibliotecas
functionMainRoombaFile (r)
r.setDriveVelocity (0,1, 0,1)
while true% Infinte while loop para mantener el código en ejecución
dontFall = cliffCheck (r)% Asigna la variable 'dontFall' a la función 'cliffCheck'
if dontFall% if instrucción para continuar en el código después de que 'cliffCheck' esté completo
r.setDriveVelocity (0.1, 0.1)% Mantiene Roomba en movimiento después de que se completa 'cliffCheck'
end% termina la declaración if 'dontFall'
bumper = bumpcheck (r)% Asigna la variable 'bumper' a la función 'bumpcheck'
if bumper% if declaración para continuar en el código después de que se complete 'bumpcheck'
r.setDriveVelocity (0.1, 0.1)% Mantiene Roomba en movimiento después de que se completa el 'bumpcheck'
end% termina 'bumper' if declaración
líquidos = LiquidCheck (r)% Asigna la variable 'líquidos' a la función 'LiquidCheck'
if liquids% if instrucción para continuar en el código después de que 'LiquidCheck' esté completo
r.setDriveVelocity (0.1, 0.1)% Mantiene Roomba en movimiento después de que se completa 'LiquidCheck'
end% termina la declaración if de 'líquidos'
lightbumper = lightcheck (r)% Asigna la variable 'lightbumper' a la función 'lightcheck'
pause (0.1)% Pausa brevemente para evitar la iteración continua del bucle
end% termina infinito while loop
end% termina la función
function bumper = bumpcheck (r)% Crea la función 'bumpcheck'
bumpdata = r.getBumpers% Asigna todos los datos del parachoques a la variable 'bumpdata'
bumper = bumpdata.right || bumpdata.left || bumpdata.front% Crea una variable almacenada, 'bumper', para los diferentes bumpers
if bumpdata.right> 0% declaración If para hacer que sucedan diferentes funciones de roomba si se golpea Bumper
r.stop% Detiene Roomba
r.moveDistance (-0,3, 0,2)% Invierte Roomba 0,3 m
r.turnAngle (90, 0.5)% Gira Roomba 90 grados lo más rápido posible
fin
si bumpdata.front> 0
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (randi (270), 0.5)% Gira Roomba en un intervalo aleatorio entre 0 y 270 grados lo más rápido posible
fin
si bumpdata.left> 0
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (-90, 0.5)% Gira Roomba -90 grados lo más rápido posible
fin
fin
function lightbumper = lightcheck (r)% Crea la función 'lightcheck'
lightdata = r.getLightBumpers% Asigna todos los datos del sensor de golpe de luz a la variable 'lightdata'
lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter% Crea una variable almacenada, 'lightbumper', para los diferentes parachoques de luz
if lightbumper% If declaración para llamar a los datos de lightbumper desde arriba
if lightdata.left> 10% declaración de If para hacer que sucedan diferentes funciones del roomba si el parachoques de luz detecta más de 10 valores
r.setDriveVelocity (0.05, 0.05)% Ralentiza roomba para prepararse para golpes
end% termina la instrucción if inicial
si lightdata.rightCenter> 10
r.setDriveVelocity (0.05, 0.05)
fin
si lightdata.right> 10
r.setDriveVelocity (0.05, 0.05)
fin
si lightdata.leftCenter> 10
r.setDriveVelocity (0.05, 0.05)
fin
end% termina la declaración if de 'lightbumper'
end% finaliza la función lightcheck
function dontFall = cliffCheck (r)% Crea la función 'cliffCheck'
datos = r.getCliffSensors; % Asigna todos los datos del sensor de desnivel a la variable 'datos'
dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020% Crea una variable almacenada, 'dontFall', para los diferentes sensores de acantilado
if dontFall% If declaración para llamar a los datos del sensor de acantilado desde arriba
if data.left <1010% declaración de If para hacer que sucedan diferentes funciones del roomba si el sensor de desnivel detecta menos de 1010 valores
r.stop
r.moveDistance (-0,2, 0,2)% Invierte Roomba 0,2 m
r.turnAngle (-90, 0.5)% Gira Roomba -90 grados lo más rápido posible
elseif data.leftFront <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0.5)% Gira Roomba 90 grados lo más rápido posible
elseif data.rightFront <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0.5)% Gira Roomba 90 grados lo más rápido posible
elseif data.right <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0.5)% Gira Roomba 90 grados lo más rápido posible
fin
fin
fin
function liquids = LiquidCheck (r)% Crea la función 'LiquidCheck'
mientras que el% verdadero inicia un bucle infinito para calibrar
img = r.getImage; % lee la cámara fuera del robot
image (img)% muestra la imagen en una ventana de figura
red_mean = mean (mean (img (200, 150, 1)))% lee la cantidad media de píxeles rojos
blue_mean = mean (mean (img (200, 150, 3)))% lee la cantidad media de píxeles azules
liquids = red_mean || blue_mean% Crea una variable almacenada, 'líquidos', para las diferentes variables de color
si líquidos% If declaración para llamar a los datos de la imagen desde arriba
if red_mean> 170% If declaración para hacer que sucedan diferentes funciones del roomba si la cámara ve un color rojo medio superior a 170
r.stop% detiene roomba
r.setLEDCenterColor (255)% establece el círculo en color rojo
r.setLEDDigits (); % borrar la pantalla
f = barra de espera (0, '* MENSAJE ENTRANTE *'); % crea una barra de espera para un mensaje de carga
r.setLEDDigits ('CALIENTE'); % establece la pantalla LED para emitir 'HOT'
pausa (0.5)% Pausa breve para leer la información mostrada
r.setLEDDigits ('LAVA'); % establece la pantalla LED para emitir 'LAVA'
pausa (0,5)
barra de espera (.33, f, '* MENSAJE ENTRANTE *'); % crea un aumento en la barra de espera
r.setLEDDigits ('CALIENTE');
pausa (0,5)
r.setLEDDigits ('LAVA');
pausa (0,5)
barra de espera (.67, f, '* MENSAJE ENTRANTE *'); % crea un aumento en la barra de espera
r.setLEDDigits ('CALIENTE');
pausa (0,5)
r.setLEDDigits ('LAVA');
barra de espera (1, f, '* MENSAJE ENTRANTE *'); % completa la barra de espera
pausa (1)
close (f)% cierra la barra de espera
r.setLEDDigits (); % borra la pantalla LED
cerrar todo% Cierra todas las ventanas anteriores
axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none')% Borra la ventana de trazado de los ejes y el gráfico
y = 0,5; % establece la posición y del texto en la ventana de trazado
x = 0,06; % establece la posición x del texto en la ventana de trazado
title ('FROM MARS ROOMBA', 'fontsize', 32)% Agrega un título a la ventana de trazado
quadeqtxt = 'PELIGRO LAVA'; % Establece la variable 'quadeqtxt' en la salida 0
texto (x, y, quadeqtxt, 'intérprete', 'látex', 'tamaño de fuente', 36); % muestra el texto quadeq en la ventana de trazado
r.moveDistance (-0.2, 0.2)% invierte el roomba 0.2m
r.turnAngle (180, 0.5)% gira el roomba 180 grados lo más rápido posible
r.setLEDCenterColor (128, 128); % establece el LED central de Roomba en naranja
cerrar todo% cierra las ventanas abiertas restantes
elseif blue_mean> 175% If declaración para hacer que sucedan diferentes funciones de roomba si la cámara ve un color azul medio superior a 175
r.stop% detiene roomba
r.setLEDCenterColor (255)% establece el círculo en color rojo
r.setLEDDigits (); % borrar la pantalla
f = barra de espera (0, '* MENSAJE ENTRANTE *'); % crea una barra de espera para un mensaje de carga
r.setLEDDigits ('MIRAR'); % configura la pantalla LED para que emita 'LOOK'
pausa (0.5)% Pausa breve para leer la información mostrada
r.setLEDDigits ('WATR'); % establece la pantalla LED para emitir 'WATR'
pausa (0,5)
barra de espera (.33, f, '* MENSAJE ENTRANTE *'); % crea un aumento en la barra de espera
r.setLEDDigits ('MIRAR');
pausa (0,5)
r.setLEDDigits ('WATR');
pausa (0,5)
barra de espera (.67, f, '* MENSAJE ENTRANTE *'); % crea un aumento en la barra de espera
r.setLEDDigits ('MIRAR');
pausa (0,5)
r.setLEDDigits ('WATR');
barra de espera (1, f, '* MENSAJE ENTRANTE *'); % completa la barra de espera
pausa (1)
close (f)% cierra la barra de espera
r.setLEDDigits (); % borra la pantalla LED
cerrar todo% Cierra todas las ventanas anteriores
axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none')% Borra la ventana de trazado de los ejes y el gráfico
y = 0,5; % establece la posición y del texto en la ventana de trazado
x = 0,06; % establece la posición x del texto en la ventana de trazado
title ('FROM MARS ROOMBA', 'fontsize', 32)% Agrega un título a la ventana de trazado
quadeqtxt = 'AGUA ENCONTRADA'; % Establece la variable 'quadeqtxt' en la salida 0
texto (x, y, quadeqtxt, 'intérprete', 'látex', 'tamaño de fuente', 36); % muestra el texto quadeq en la ventana de trazado
r.moveDistance (-0.2, 0.2)% invierte el roomba 0.2m
r.turnAngle (180, 0.5)% gira el roomba 180 grados lo más rápido posible
r.setLEDCenterColor (128, 128); % establece el LED central de Roomba en naranja
cerrar todo% cierra las ventanas abiertas restantes
end% termina 'red_mean' declaración if
end% termina la declaración if de 'líquidos'
end% cierra infinito while loop
end% finaliza la función 'LiquidCheck'
Paso 4: Ejecutar el código
Una vez que haya copiado y pegado el código en MATLAB, debe conectarse a Roomba. Una vez que el Roomba está conectado, debe nombrar la variable r. Las funciones usan la variable r cuando se refieren al Roomba, por lo que el Roomba debe definirse como la variable r. Después de ejecutar el código, Roomba debería ejecutarse según las instrucciones.
Recomendado:
Convirtiendo su Roomba en un Mars Rover: 5 pasos
Convirtiendo su Roomba en un Mars Rover:
Robot Project UTK 2017: 3 pasos
Robot Project UTK 2017: Misión: Nuestro equipo de ingenieros ha sido contratado por Froogle, una fundación sin fines de lucro para el desarrollo de tecnología de código abierto, para desarrollar un innovador Mars Rover de asistencia humana. es un roomba que codificamos para ejecutar una serie de
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
Mars Roomba: 6 pasos
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
Proyecto UTK EF 230 MarsRoomba Otoño 2018: 5 pasos
Proyecto UTK EF 230 MarsRoomba Otoño de 2018: Actualmente, los rovers de Marte se utilizan para recopilar datos sobre la superficie de Marte a través de varios métodos, con el fin de aprender más sobre el potencial del planeta para la vida microbiana. Los rovers utilizan principalmente fotografías y herramientas de análisis de suelos para obtener datos c