Tabla de contenido:

Mars Roomba Project UTK: 4 pasos
Mars Roomba Project UTK: 4 pasos

Video: Mars Roomba Project UTK: 4 pasos

Video: Mars Roomba Project UTK: 4 pasos
Video: How to Make a Mars Rover / Rocker bogie Robot - Stair climbing 2024, Mes de julio
Anonim
Proyecto Mars Roomba UTK
Proyecto Mars Roomba UTK
Proyecto Mars Roomba UTK
Proyecto Mars Roomba UTK

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: