Tabla de contenido:

Roomba controlado por MATLAB: 5 pasos
Roomba controlado por MATLAB: 5 pasos

Video: Roomba controlado por MATLAB: 5 pasos

Video: Roomba controlado por MATLAB: 5 pasos
Video: Control de un robot pionner de coppelia por medio de matlab 2024, Noviembre
Anonim
Roomba controlado por MATLAB
Roomba controlado por MATLAB
Roomba controlado por MATLAB
Roomba controlado por MATLAB

El objetivo de este proyecto es utilizar MATLAB y un robot programable iRobot modificado. Nuestro grupo combinó nuestras habilidades de codificación para crear un script MATLAB que utiliza muchas funciones del iRobot, incluidos los sensores de desnivel, los sensores de parachoques, los sensores de luz y la cámara. Usamos estas lecturas de sensores y cámaras como entradas, lo que nos permite crear ciertas salidas que queremos usando funciones de código MATLAB y bucles. También usamos el dispositivo móvil MATLAB y el giroscopio como una forma de conectarnos al iRobot y controlarlo.

Paso 1: Piezas y materiales

Partes y materiales
Partes y materiales
Partes y materiales
Partes y materiales
Partes y materiales
Partes y materiales
Partes y materiales
Partes y materiales

MATLAB 2018a

-La versión 2018 de MATLAB es la versión más preferida, principalmente porque funciona mejor con el código que se conecta al dispositivo móvil. Sin embargo, la mayor parte de nuestro código se puede interpretar en la mayoría de las versiones de MATLAB.

Dispositivo iRobot Create

-Este dispositivo es un dispositivo de fabricación especial cuyo único propósito es la programación y la codificación. (No es un vacío real)

Raspberry Pi (con cámara)

- Esta es una placa de computadora económica que funciona como el cerebro del iRobot. Puede ser pequeño, pero es capaz de muchas cosas. La cámara es un complemento adicional. También utiliza la raspberry pi para obtener todas sus funciones y comandos. La cámara que se muestra arriba está montada en un soporte impreso en 3D, creado por los departamentos de Fundamentos de Ingeniería de la Universidad de Tennessee.

Paso 2: Archivo de base de datos de Roomba

Archivo de base de datos de Roomba
Archivo de base de datos de Roomba

Hay un archivo principal que necesitará para utilizar las funciones y los comandos adecuados para su roomba. Este archivo es el lugar de donde escribió el código y extrae las funciones para que el funcionamiento de su roomba sea más manejable.

Puede descargar el archivo en este enlace o el archivo descargable a continuación

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

Paso 3: Conexión a Roomba

Primero, debe asegurarse de que su robot esté conectado a su placa raspberry pi mediante un conector micro USB. Luego, debe conectar correctamente su computadora y robot al mismo WiFi. Una vez hecho esto, puede encender su robot y conectarse a él usando el comando dado en el archivo de la base de datos del robot. (Siempre reinicie su robot antes y después de usarlo). Por ejemplo, usamos el comando "r.roomba (19)" para conectarnos a nuestro robot, asignando la variable r a nuestro dispositivo. Esto se refiere al archivo de la base de datos, que configura nuestra variable como una estructura a la que podemos hacer referencia en cualquier momento.

Paso 4: el código

El código
El código
El código
El código

Hemos adjuntado el código completo a continuación, pero aquí hay una breve descripción general que destaca los elementos importantes de nuestro script. Utilizamos todos los sensores, así como la cámara, para maximizar al máximo el potencial de nuestro robot. También incluimos un código que nos permitió conectar un dispositivo móvil a nuestro robot y usar su grioscopio para controlarlo manualmente.

Comenzamos con el comando simple "r.setDriveVelocity (.06)" que establece la velocidad de avance del robot en.06 m / s. Esto es solo para que el robot se mueva de antemano

Luego, nuestro script principal comienza con un bucle while que recupera los datos del robot dado mediante la creación de estructuras que podemos hacer referencia y usar en las declaraciones condicionales a continuación, lo que nos permite decirle al robot que ejecute un comando determinado basado en los datos de la estructura. el robot lee con sus sensores. Lo configuramos para que el robot lea sus sensores de acantilado y siga un camino negro

while true% while ciclo continúa hasta que ocurre algo "falso" (en este caso continúa infinitamente) data = r.getCliffSensors; data2 = r.getBumpers;% recupera datos continuamente sobre los valores del sensor de desnivel y los asigna a una variable% img = r.getImage; % Toma una imagen de la cámara montada% imagen (img); % Muestra la imagen que se tomó% red_mean = mean (mean (img (:,:, 1)));% Toma el valor promedio del color verde si data.rightFront <2000 r.turnAngle (-2); % gira el Roomba aproximadamente.2 grados CW una vez que el valor de los sensores de desnivel delantero derecho cae por debajo de 2000 r.setDriveVelocity (.05); elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1); % le dice al Roomba que siga avanzando a aproximadamente 0,2 m / s si ambos valores de los sensores delantero derecho e izquierdo caen por debajo del 2000% r.turnAngle (0); % le dice al Roomba que no gire si se cumplen las condiciones mencionadas anteriormente

elseif data2.right == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05); elseif data2.left == 1 r.moveDistance (-. 2); r.turnAngle (5); r.setDriveVelocity (.05); elseif data2.front == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05);

Luego de este bucle while, ingresamos a otro bucle while que dispara los datos obtenidos a través de la cámara. Y usamos una declaración if dentro de este bucle while que reconoce una imagen usando un programa específico (alexnet), y una vez que identifica la imagen, inmediatamente activa el control remoto del dispositivo móvil

anet = alexnet; % Asigna el aprendizaje profundo de alexnet a una variable mientras es verdadero% Infinito while loop img = r.getImage; img = imresize (img, [227, 227]); etiqueta = clasificar (anet, img); if label == "toalla de papel" || label == "refrigerador" label = "water"; imagen final (img); título (char (etiqueta)); sacar ahora;

El bucle while que nos permite controlar el dispositivo con nuestro teléfono recupera esos datos del giroscopio del teléfono y lo conectamos a una matriz que transmite datos continuamente a MATLAB en la computadora. Usamos una declaración if que lee los datos de la matriz y da una salida que mueve el dispositivo en función de ciertos valores del giroscopio del teléfono. Es importante saber que utilizamos los sensores de Orientación del dispositivo móvil. La matriz de uno por tres mencionada anteriormente está categorizada por cada elemento de los sensores de orientación del teléfono, que es azimut, paso y lateral. Las declaraciones if crearon condiciones que indicaron que cuando el lado excede los valores 50 o cae por debajo de -50, entonces el robot se mueve una cierta distancia hacia adelante (50 positivo) o hacia atrás (50 negativo). Y lo mismo ocurre con el valor del tono. Si el valor de inclinación excede el valor de 25 o cae por debajo de -25, el robot gira en un ángulo de 1 grado (25 positivo) o 1 grado negativo (25 negativo)

while true pause (.1)% Pausa de.5 segundos antes de que se tome cada valor Controller = iphone. Orientation; % Asigna la matriz para los valores de la orientación del iPhone a una variable Azimutal = Controlador (1); % Asigna el primer valor de la matriz a una variable Pitch = Controller (2); % Asigna el segundo valor de la matriz a una variable (inclinar hacia adelante y hacia atrás cuando el iPhone se sostiene de lado) Lado = Controlador (3); % Asigna el tercer valor de la matriz a una variable (inclinar hacia la izquierda y hacia la derecha cuando el iPhone se sostiene de lado)% Provoca una salida basada en la orientación del teléfono si Side> 130 || Side 25 r.moveDistance (-. 1)% Mueve el Roomba hacia atrás aproximadamente 0,1 metros si el iPhone está inclinado hacia atrás al menos 25 grados si no Side 25 r.turnAngle (-1)% Gira el Roomba aproximadamente 1 grado en sentido antihorario si el iPhone está inclinado hacia la izquierda al menos 25 grados en caso contrario si Pitch <-25 r.turnAngle (1)% Gira el Roomba aproximadamente 1 grado en sentido horario si el iPhone está inclinado al menos 25 grados al final

Estos son solo los aspectos más destacados de las partes principales de nuestro código, que incluimos si necesita copiar y pegar rápidamente una sección para su beneficio. Sin embargo, nuestro código completo se adjunta a continuación si es necesario

Paso 5: Conclusión

Este código que escribimos está diseñado específicamente para nuestro robot, así como para nuestra visión general del proyecto. Nuestro objetivo era utilizar todas nuestras habilidades de codificación de MATLAB para crear un script de diseño de pozo que utiliza la mayoría de las funciones del robot. Usar el controlador del teléfono no es tan difícil como podría pensar, y esperamos que nuestro código pueda ayudarlo a comprender mejor el concepto detrás de la codificación de un iRobot.

Recomendado: