Extracción Visual de Puntos de Referencia para el Control de un Robot Manipulador

Texto completo

(1)

Extracción Visual de Puntos de Referencia para el Control de un Robot

Manipulador

Oscar A. PAREDES GARDUÑO

Ingeniería en Software, Universidad Politécnica de Pachuca Zempoala, Hidalgo, 42083, México

y

Jazmín RODRÍGUEZ FLORES, Marco A. GARCÍA MÁRQUEZ Dirección de Ingeniería de Software,

CA – Cibernética y Cómputo Aplicado, Universidad Politécnica de Pachuca Zempoala, Hidalgo, 42083, México

y

Josue R. MARTÍNEZ MIRELES, Juan M. XICOTÉNCATL PÉREZ Dirección de Ingeniería Mecatrónica,

CA – Cibernética y Cómputo Aplicado, Universidad Politécnica de Pachuca Zempoala, Hidalgo, 42083, México

RESUMEN

En el presente artículo se presenta el desarrollo de un sistema de extracción visual de puntos de referencia para su implementación en el control de un robot manipulador de tres grados de libertad antropomórfico, los puntos de referencia se generan a partir de la posición del brazo derecho del operador, para ello se utiliza la lectura de un sensor de profundidad que determina las posiciones de las articulaciones para determinar los desplazamientos angulares que deben alcanzar la cintura, el hombro y el codo. Toda vez que se obtienen dichos ángulos, se envían las señales de control para modificar la posición del robot.

Palabras Clave: Extracción visual, Puntos de referencia, Sistemas Robóticos, Reconocimiento de Patrones, Desplazamientos Angulares.

1.- INTRODUCCIÓN

La Robótica es una rama de la tecnología que se centra en el diseño, construcción, operación, y aplicación de los robots (manipuladores, móviles, de servicio). Una de las mayores dificultades que enfrentan los sistemas robóticos al ser implementados en el mundo real es la interacción con un ambiente dinámico no controlado, razón por la cual, en la actualidad se encuentran en desarrollo investigaciones que se basan en la retroalimentación visual del entorno para extraer la información que permita al controlador tomar las decisiones pertinentes para una operación autónoma de los sistemas robotizados.

Al contar con una retroalimentación visual, se entrelaza la robótica con el área de reconocimiento de patrones, la cual se encarga de analizar objetos físicos o abstractos, con el fin de extraer información útil de esos objetos y así brindar la información requerida sobre el comportamiento del entorno que rodea al robot. Sin embargo, existe un problema respecto al reconocimiento de objetos en tres dimensiones, determinar la profundidad o las distancias entre objetos que se posicionan en un tercer plano no es una actividad trivial. Para el análisis y objetos con información de profundidad existen dos estrategias principales: la implementación de un arreglo estéreo de cámaras o un arreglo de una cámara y sensor de profundidad, el factor importante que determina la aplicación de uno u otro elemento radica en el detalle de la

información requerida puesto que hasta el momento la mayoría de los sensores de profundidad que dominan el mercado cuentan con una resolución de 640 x 480 pixeles, a diferencia de un arreglo estéreo de cámaras de alta definición.

En la actualidad se han desarrollado algunos trabajos donde se extrae la información del ambiente a través de sensores de profundidad, específicamente el Kinect, a continuación se mencionan algunos de ellos.

En [1] se aplica el sensor Kinect para la extracción de información de ambientes cerrados para su categorización a través de la captura de la profundidad de los elementos que lo componen.

En [2] se realiza el análisis de la información que proporciona el sensor de profundidad para integrarla con la información proveniente de la cámara RGB para la extracción de parámetros de objetos para su reconocimiento dentro de un ambiente tridimensional.

En el trabajo [3] se utiliza al sensor Kinect como una herramienta para la interacción hombre máquina, integrando su funcionalidad a un conjunto de juego permitiendo un mayor dinamismo de su operación.

En el artículo [4] se desarrolló un sistema de seguimiento para detectar la ubicación de trabajadores de la construcción. Utilizaron para ello procesamiento de imágenes, MATLAB. El seguimiento de los esqueletos se realizó con la cámara del Kinect.

En el trabajo [5] se presenta un análisis de la aplicación del Kinect en robots móviles marcando las ventajas y desventajas que presenta al extraer la información del ambiente para promover la interacción con el ambiente que rodea al robot.

2.- ARQUITECTURA PROPUESTA Robot Manipulador

El robot manipulador que se seleccionó fue desarrollado con la colaboración de los alumnos del programa de Ingeniería Mecatrónica y los miembros del Cuerpo Académico Cibernética y Cómputo aplicado de la Universidad

(2)

Politécnica de Pachuca, su función principal radica en fungir como una plataforma de análisis en las transformaciones espaciales de una cadena cinemática abierta y para el desarrollo de aplicaciones de interfaces hombre máquina. En la figura 1 se presenta el robot manipulador que se va a controlar, cuenta con cuatro articulaciones (cintura, hombro, codo, efector final) todas ellas son rotacionales. Su construcción es de aluminio y para su movimiento se hace uso de servomotores analógicos que se conectan directamente con cada articulación.

Figura 1. Robot manipulador a controlar.

Sistema de Comunicación

Para la comunicación de la computadora con el robot manipulador se seleccionó el sistema de desarrollo Arduino, en específico la versión Mega 2560. Este sistema de desarrollo es de código abierto con opción a acceso a librerías y software de programación libre, adicionalmente permite la comunicación a través del puerto USB de la computadora, en la figura 2 se presenta el sistema de desarrollo, cuenta con 54 pines de entrada y salida, 14 módulos PWM independientes, 16 entradas analógica, comunicación SPI, I2C, UART.

Figura 2. Sistema de Desarrollo Arduino Mega 2560[7].

Sensor de Profundidad

Existen diferentes elementos comerciales que cuentan con una cámara de video y un sensor de profundidad, entre los cuales destacan Carmine (1.08 y 1.09) de la empresa Primesense, Xtion de Asus y Kinect de Microsoft, todos ellos cuentan con la capacidad de captura de video y profundidad a una resolución de 640 x 480 pixeles. Para el presente trabajo se seleccionó el sensor Kinect de la empresa Microsoft dado su gran penetración del mercado lo que da pie a desarrollos que se basen en esta tecnología, cuenta con una cámara RGB VGA con capacidad QVGA con menos FPS, adicionalmente cuenta con un arreglo de micrófonos para el procesamiento de audio y eliminación de elementos acústicos en interiores, como se observa en la figura 3.

Figura 3. Componentes del Sensor Kinect.

Entorno de Desarrollo

Para la programación de la aplicación, como un primer paso se seleccionó el entorno de desarrollo Processing que es un ambiente de desarrollo de código abierto ampliamente utilizado por estudiantes e investigadores ya que proporciona las herramientas para el desarrollo de aplicaciones desde el prototipado hasta la producción, con un manejo ágil de elementos visuales, además de contar con una amplia variedad de librerías [6].

Para poder interactuar con el sensor Kinect se cuenta con un conjunto de drivers que proporciona la empresa Microsoft, considerando que el sensor Kinect fue desarrollado principalmente para entretenimiento y juegos, el Kinect SDK de Microsoft se encuentra limitado y que no permite explotar al máximo el poder del sensor.

Como una alternativa, se han desarrollado software de terceros que permiten la interacción con el dispositivo y que nos proporciona librerías para utilizar con mayor libertad el Kinect permitiendo extraer mayor información de su funcionamiento.

OpenNI es un framework de código abierto para realizar aplicaciones utilizando sensores 3D entre los cuales se encuentra el Kinect. Como se observa en la figura 4, OpenNI se consolida como un “puente” entre el dispositivo y la aplicación, pudiendo o no utilizar librerías extras (middleware).

Figura 4. Arquitectura de OpenNI[8]. Arquitectura

En la figura 5 se puede observar la arquitectura que se planteó para el presente desarrollo, como elemento central se encuentra la computadora que realiza el procesamiento de la información proveniente del Kinect a través del framework OpenNI, el procesamiento se realiza en el entorno Processing donde se generan las señales que son enviadas al sistema de desarrollo Arduino que es el encargado de generar las señales de control del robot manipulador.

(3)

Figura 5. Arquitectura propuesta.

Cabe mencionar que la computadora en la que se desarrolló el sistema cuenta con: 2GB RAM, procesador AMD Dual Core a 1.9 GHz operando con el sistema operativo Windows 7.

3.- CÁLCULO DE POSICIONES ANGULARES A continuación se presenta el desarrollo de los cálculos para la extracción de los desplazamientos angulares a partir de la información que proporciona el Kinect. Como un primer punto se destaca que el framework de OpenNI proporciona a través de las librerías los métodos para la extracción de la posición espacial de las articulaciones de un jugador (persona que sirve como referencia al robot). En la figura 6, se puede observar el diagrama desde la vista superior donde se especifican los puntos para el cálculo del giro de la cintura, donde HD es el punto del hombro derecho, HI es el punto del hombro izquierdo.

Como un primer paso se trazan las líneas auxiliares A y B para la determinación del ángulo de la cintura, como se ve en la figura, ambos segmentos se pueden determinar a partir de una diferencia de coordenadas para posteriormente realizar el cálculo del ángulo, ecuaciones (1) y (2)

HI

HD

A

B

qci

Figura 6. Vista Superior de las Coordenadas.

1 tan z ci x A A

q

       (1) 1 tan z z ci x z HD HI HD HI

q

        (2)

A continuación se detalla la extracción de los ángulos relativos a la rotación del hombro y del codo. Como se mencionó anteriormente, el Kinect proporciona la ubicación de cada articulación (hombro izquierdo – HI, hombro derecho – HD, codo – C y muñeca –M), con dicha información se pueden extraer los vectores referentes a las líneas del hombro – LH, del brazo – LB y del antebrazo – LA, con dicha información y partiendo de la definición del producto escalar se derivan las ecuaciones (3) y (4)

arccos h LH LB LH LB

q

     (3) arccos co LB LA LB LA

q

     (4) C M qh qco HD HI LH LB LA

Figura 7. Vista Frontal de las Coordenadas. Con las ecuaciones (2), (3) y (4) se pueden obtener los desplazamientos angulares que realizan cada una de las articulaciones para generar los valores de referencia para las señales de control que se envían hacia el robot manipulador.

4.- RESULTADOS

A continuación se presentan diferentes fragmentos del programa para la extracción de las referencias visuales y generación de las señales de control.

public void setup(){

k = new SimpleOpenNI(this); k.setMirror(true);

k.enableDepth();

k.enableUser(SimpleOpenNI.SKEL_PROFILE_ALL); size(k.depthWidth(), k.depthHeight());

String portName = Serial.list()[0]; myPort = new Serial(this,"COM6",9600); println(portName);

}

El método setup(), se encarga de inicializar el Kinect y el puerto de comunicación con el sistema de desarrollo Arduino, del Kinect se habilita la toma de profundidad puesto que solamente se requiere la ubicación de las articulaciones y no una representación visual de la cámara RGB y para la comunicación con el sistema Arduino se seleccionó la velocidad de 9600 baudios por no requerir de un muestreo más elevado.

(4)

pushStyle(); stroke(255,0,0); strokeWeight(4); k.drawLimb(userId,SimpleOpenNI.SKEL_NECK , SimpleOpenNI.SKEL_LEFT_SHOULDER); k.drawLimb(userId,SimpleOpenNI.SKEL_NECK , SimpleOpenNI.SKEL_RIGHT_SHOULDER); k.drawLimb(userId,SimpleOpenNI.SKEL_RIGHT_SH OULDER,SimpleOpenNI.SKEL_RIGHT_ELBOW); k.drawLimb(userId,SimpleOpenNI.SKEL_RIGHT_ELB OW , SimpleOpenNI.SKEL_RIGHT_HAND); }

Cada vez que se actualiza la posición de la persona (cada 50 ms), con la función drawSkeleton(int userId) se realiza el trazado del esqueleto en color rojo a partir de la información que se obtiene de la función getJointPositionSkeleton. Como un primer punto para el funcionamiento del programa, se debe reconocer al usuario, para lo cual se habilita el seguimiento de esqueleto a través de la activan de manejadores de eventos para permitir la calibración del cuerpo a seguir, el primero de ellos se lanza al detectar una nueva persona:

public void onNewUser(int userId){ k.startPoseDetection ("Psi", userId); }

Toda vez que se detecta al usuario, se inicia el proceso de detección de la pose inicial de calibración, que se muestra en la figura 8.

Figura 8. Posición inicial de calibración.

El sensor detecta la posición y lanza una función dentro de la cual se detiene la detección de pose y comienza la calibración del cuerpo.

public void onStartPose (String pose, int userId) { k.stopPoseDetection (userId);

k.requestCalibrationSkeleton (userId, true); }

Por último, en un lapso no mayor a 5 segundos el seguimiento de esqueleto queda calibrado. A partir de este momento y siempre que el usuario no salga de la zona de visión del sensor, el programa sabrá en todo momento la posición de usuario.

La figura 9 presenta la imagen inicial que se obtiene del sensor de profundidad antes de que aparezca la persona que fungirá como referencia para la extracción de los puntos. Posteriormente, en la figura 10 se presenta el momento en que se reconoce al usuario, la indicación de que se reconoce al usuario se presenta en la consola del entorno Processing.

Figura 9. Toma Inicial de Profundidad-

Figura 10. Reconocimiento del usuario.

En la figura 11, se presenta la ventana cuando se ha calibrado al usuario y que sirve como punto de partida para la extracción de la posición de las articulaciones.

(5)

En las figuras 12, 13 y 14 se presentan las extracciones de dos diferentes valores de las articulaciones debido al cambio de pose de la persona que funge como referencia. En las figuras 12 y 13 no hubo cambio en el giro de la cintura y en la figura 14 si existió giro tal como se indica en los números que se presentan en la consola de Processing.

Figura 12. Extracción de desplazamientos angulares.

Figura 13. Cambio en desplazamientos angulares (hombro, codo).

5.- CONCLUSIONES

En el presente documento se desarrolló un sistema para la extracción de referencias para el control de un robot manipulador a través de un sensado visual en tres dimensiones, permitiendo integrar elementos de profundidad para la ubicación de los puntos de referencia.

El contar con elementos sensores de profundidad facilita la extracción de información en un ambiente tridimensional, sacrificando un poco la resolución, sin embargo para aplicaciones donde no se requiera una gran precisión se presenta como una gran alternativa al arreglo estéreo de cámaras de video.

El integrar el sensor Kinect da la apertura a que en trabajos futuros se pueda aplicar el arreglo de micrófonos para el

reconocimiento de comandos de voz, gracias al procesamiento de audio con el que cuenta.

Figura 14. Extracción de desplazamientos angulares con giro de cintura.

6.- REFERENCIAS

[1] Oscar Martinez Mozos, Hitoshi Mizutani, Ryo Kurazume and Tsutomu Hasegawa. Categorization of Indoor Places Using the Kinect Sensor. Sensors. Pp 6695 – 6711. 2012. ISSN. 1424-8220.

[2] David Devereux, Bhargav Mitra, Owen Holland and Alan Diamond. Using the microsoft kinect to model the environment of an anthropomimetic robot. Proceeding of IASTED International Conference on Robotics (Robo 2011). USA, 2011

[3] Bruno Campagnolo de Paula, Adaptando e desenvolvendo jogos para uso com o Microsoft Kinect, Proceedings of SBGames 2011, Tutorials Track – Computing, Salvador - BA, Noviembre, 2011

[4] I.P. Tharindu WEERASINGHE et al. Application of Microsoft Kinect sensor for tracking construction workers. Construction Research Congress 21-23 de mayo de 2012 West Lafayette, IN, USA. Pp. 858- 867. Consultado en http://rebar.ecn.purdue.edu/crc2012/papers/pdfs/-170.pdf Febrero 2013

[5] Mikkel Viager, Analysis of Kinect for mobile robots. Reporte Técnico, Departamento de Ingeniería Electríca, Universidad Técnica de Dinamárca, Marzo 2011.

[6] Sitio web Processing. http://processing.org/. Consultada en Febrero 2013.

[7] Sitio web de Arduino http://arduino.cc/. Consultado en Enero 2013.

[8] Sitio web SimpleOpenNi. http://code.google.com/p/ simple-openni/. Consultado en Enero 2013.

Figure

Actualización...