Tabla de contenido:

Roomba Explorer: 4 pasos
Roomba Explorer: 4 pasos

Video: Roomba Explorer: 4 pasos

Video: Roomba Explorer: 4 pasos
Video: Roomba® 700 series: Getting started 2024, Mes de julio
Anonim
Roomba Explorer
Roomba Explorer

Al utilizar MATLAB y el robot Create2 de iRobot, este proyecto explorará distintas áreas de una ubicación desconocida. Empleamos los sensores del robot para ayudar a maniobrar en un terreno peligroso. Al obtener fotografías y videos de una Raspberry Pi que está conectada, pudimos determinar los obstáculos que enfrentará el robot y se clasificarán.

Partes y materiales

Para este proyecto, necesitará

-un ordenador

-Versión más nueva de MATLAB (se utilizó MATLAB R2018b para este proyecto)

- roombaInstall caja de herramientas

-Robot Create2 de iRobot

-Raspberry Pi con cámara

Paso 1: inicialización y sensores

Inicialización y sensores
Inicialización y sensores

Antes de iniciar cualquier programación, descargamos la caja de herramientas roombaInstall, que permitía acceder a diferentes componentes del Robot.

Inicialmente, creamos una GUI para inicializar cualquier robot. Para hacer esto, debe ingresar el número del Robot como entrada. Esto permitirá el acceso para ejecutar nuestro programa en el Robot. Trabajamos para que el Robot maniobrara a través de los muchos terrenos que encontraría. Implementamos los sensores de desnivel, los sensores de golpes de luz y los sensores de golpes físicos, utilizando sus salidas para disparar el robot y cambiar su velocidad o dirección. Cuando cualquiera de los seis sensores de golpes de luz detecta un objeto, el valor que emiten disminuirá, lo que hará que la velocidad del robot disminuya para evitar una colisión a máxima velocidad. Cuando el robot finalmente choca con un obstáculo, los sensores de golpes físicos informarán un valor mayor que cero; Debido a esto, el Robot se detendrá, por lo que no habrá más colisiones y se pueden poner en acción más funciones. Para los sensores de acantilado, leerán el brillo del área que los rodea. Si el valor es mayor que 2800, determinamos que el Robot estaría en un terreno estable y seguro. Pero, si el valor es inferior a 800, los sensores de acantilado detectarán un acantilado y se detendrán inmediatamente para no caer. Se determinó que cualquier valor intermedio representa el agua y hará que el robot detenga su acción. Al usar los sensores anteriores, la velocidad del Robot cambia, lo que nos permite determinar mejor si hay algún peligro.

A continuación se muestra el código (de MATLAB R2018b)

%% inicialización

dlgPrompts = {'Número de Roomba'};

dlgTitle = 'Seleccione su Roomba';

dlgDefaults = {''};

opts. Resize = 'encendido';

dlgout = inputdlg (dlgPrompts, dlgTitle, 1, dlgDefaults, opts)% Crea una ventana que solicita al usuario que ingrese su número de roomba

n = str2double (dlgout {1});

r = roomba (n); % Inicializa la determinación de velocidad de Roomba %% especificada por el usuario de los sensores de impacto de luz mientras que true s = r.getLightBumpers; % obtener sensores de golpes ligeros

lbumpout_1 = extractfield (s, 'izquierda'); % toma los valores numéricos de los sensores y los hace más utilizables lbumpout_2 = extractfield (s, 'leftFront');

lbumpout_3 = extractfield (s, 'leftCenter');

lbumpout_4 = extractfield (s, 'rightCenter');

lbumpout_5 = extractfield (s, 'rightFront');

lbumpout_6 = extractfield (s, 'derecha');

lbout = [lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6]% convierte los valores en una matriz

sLbump = sort (lbout); % ordena la matriz al valor más bajo se puede extraer

lowLbump = sLbump (1); velocidad =.05 + (lowLbump) *. 005% usando el valor más bajo, que representa obstáculos cercanos, para determinar la velocidad, velocidad más alta cuando no se detecta nada

r.setDriveVelocity (velocidad, velocidad)

fin

% Parachoques físicos

b = r.getBumpers; % Salida verdadero, falso

bsen_1 = extractfield (b, 'izquierda')

bsen_2 = extractfield (b, 'derecha')

bsen_3 = extractfield (b, 'frente')

bsen_4 = extractfield (b, 'leftWheelDrop')

bsen_5 = extractfield (b, 'rightWheelDrop')

golpes = [bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump = suma (vagabundos)

si tbump> 0 r.setDriveVelocity (0, 0)

fin

% Sensores de acantilado

c = r.getCliffSensors %% 2800 seguro, de lo contrario agua

csen_1 = extractfield (c, 'izquierda')

csen_2 = extractfield (c, 'derecha')

csen_3 = extractfield (c, 'leftFront')

csen_4 = extractfield (c, 'rightFront')

acantilados = [csen_1, csen_2, csen_3, csen_4]

ordcliff = sort (acantilados)

si ordcliff (1) <2750

r.setDriveVelocity (0, 0)

si acantilado <800

disp 'acantilado'

demás

disp 'agua'

fin

r. TurnAngle (45)

fin

Paso 2: obtener datos

Después de que se activen los sensores de golpes físicos, el robot implementará su Raspberry Pi a bordo para tomar una fotografía del obstáculo. Después de tomar una fotografía, usando el reconocimiento de texto si hay texto en la imagen, el Robot determinará cuál es el obstáculo y qué dice el obstáculo.

img = r.getImage; imshow (img);

imwrite (img, 'imgfromcamera.jpg')

foto = imread ('imgfromcamera.jpg')

ocrResults = ocr (foto)

RecognizedText = ocrResults. Text;

figura;

imshow (foto) texto (220, 0, RecognizedText, 'BackgroundColor', [1 1 1]);

Paso 3: Finalización de la misión

Cuando el Robot determina que el obstáculo está EN CASA, completará su misión y se quedará en casa. Una vez completada la misión, el Robot enviará una alerta por correo electrónico de que ha regresado a casa y enviará las imágenes que tomó durante su viaje.

% De envío de correo electrónico

setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com');

setpref ('Internet', 'Correo electrónico', '[email protected]'); % cuenta de correo para enviar desde setpref ('Internet', 'SMTP_Username', 'ingrese el correo electrónico del remitente'); % senders username setpref ('Internet', 'SMTP_Password', 'ingrese la contraseña del remitente'); % Contraseña de remitentes

props = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'verdadero'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465');

sendmail ('Ingrese el correo electrónico de recepción', 'Roomba', 'Roomba ha regresado a casa !!', 'imgfromcamera.jpg')% cuenta de correo a la que enviar

Entonces el robot está terminado.

Paso 4: Conclusión

Conclusión
Conclusión

El programa MATLAB incluido está separado de todo el script que se utilizó con el Robot. En el borrador final, asegúrese de poner todo el código, excepto el paso de inicialización, en un ciclo while para asegurarse de que los parachoques se estén ejecutando constantemente. Este programa se puede editar para adaptarse a las necesidades del usuario. Se muestra la configuración de nuestro Robot.

* Recordatorio: no olvide que la caja de herramientas roombaInstall es necesaria para que MATLAB interactúe con el robot y la Raspberry Pi integrada.

Recomendado: