IEEE LATIN AMERICA TRANSACTIONS, VOL. 11, NO. 1, FEB. 2013 149 Detection of Human-Robot Collision Using Kinetic L. Mathé, Member, IEEE, A. Caverzasi, Member, IEEE, F. Saravia, Member, IEEE, G. Gomez, Member, IEEE, J. P. Pedroni, Member, IEEE 1 Abstract— In this work, a system capable of detecting humanrobot potential collisions is presented. It is intended to assist a robotic arm on its movement around the working area. By detecting risk zones, it prevents the robot from interfering with the surgeons work. To accomplish this, it is necessary to place both the robot and the surgeon on a coordinate system. The tracking of the robot is achieved by detecting color labels that were placed on the robot’s joints. On the other hand, the physician’s position is obtained using Kinect’s depth stream. The output of the system will be used by the robot to define risk zones and to avoid them by modifying its trajectory. Keywords— Human-Robot potential collisions, Tracking with Kinect, Detecting color labels. L I. INTRODUCCIÓN OPERACIONES quirúrgicas mínimamente invasivas, necesitan de un brazo robótico que sostenga al endoscopio, el cual debe interferir lo menos posible en los movimientos que realice el cirujano. El objetivo del proyecto es desarrollar un brazo robótico llamado LAPABOT, capaz de asistir al médico durante una cirugía mínimamente invasiva. El sistema tiene como destinatario el Hospital de Niños de la provincia de Córdoba. Se abordó la investigación utilizando el sensor Kinect de Microsoft, el cual provee a la computadora streams de imagen, profundidad y audio. A partir de estos datos, es posible determinar la localización física de objetos contenidos en el campo de visión de las cámaras, y hacer un seguimiento de sus movimientos. El objetivo consiste en el desarrollo de un sistema capaz de detectar situaciones, en las que puedan ocurrir colisiones entre el brazo robótico y los brazos del médico cirujano quien esté realizando la operación. El sensor Kinect (Microsoft) posee los siguientes componentes de hardware [1]: o Cámara VGA 640X480 a color. o Cámara infrarroja 640x480. AS 1 L. Mathé, Universidad Nacional de Córdoba, Córdoba, [email protected] A. Caverzasi, Universidad Nacional de Córdoba, Córdoba, [email protected] F. S. Rajal, Universidad Nacional de Córdoba, Córdoba, [email protected] G. Gomez, Universidad Nacional de Córdoba, Córdoba, [email protected] J. P. Pedroni, Universidad Nacional de Córdoba, Córdoba, [email protected] Argentina, Argentina, Argentina, Argentina, Argentina o Proyector infrarrojo. o Arreglo de micrófonos. o Motor para controlar la inclinación. La Figura 1 muestra la interacción entre la aplicación y el sensor. Figura 1. Interacción entre el hardware y la aplicación [5]. Durante el desarrollo se utilizaron los streams de imagen y profundidad. El primero para la detección del brazo robótico y el segundo para el seguimiento del médico. La aplicación ha sido escrita en el lenguaje C# utilizando la herramienta Microsoft Visual Studio 2010 10.0.40219.1 SP1rel [2]. Para la comunicación con Kinect, se utilizó el SDK oficial de Microsoft [3]. II. DETECCIÓN DE LA UBICACIÓN DE LAS ARTICULACIONES DEL MÉDICO En general, el stream de datos de profundidad que provee el sensor está compuesto de 20 puntos (Figura 2), los cuales son identificados cuando una persona entra en su campo de visión. Esto permite seguimiento en tiempo real de todos los movimientos. Para evitar una colisión entre el brazo del médico y el brazo del robot es necesario realizar el seguimiento de los movimientos de los brazos del médico para disponer de la información necesaria que permita programar la trayectoria del brazo del robot. Para lograr esto, se deben identificar las articulaciones del médico. Esto se puede lograr seleccionando sólo los 11 puntos superiores del médico (ver el rectángulo en la Figura 2) desde el torso hacia la cabeza, incluyendo los brazos. La posición de cada uno de esos puntos se actualizan 30 veces por segundo, ya que ésta es la frecuencia de refresco del sensor Kinect. A continuación se muestra una simplificación del esqueleto del cirujano obtenida a partir de estos 11 puntos (Figura 3). 150 IEEE LATIN AMERICA TRANSACTIONS, VOL. 11, NO. 1, FEB. 2013 seleccionar el ángulo correcto para cada situación. IV. SEGUIMIENTO DEL BRAZO ROBÓTICO Para lograr el seguimiento del brazo roboótico, se pegaron etiquetas de colores sobre cada una de las articulaciones del mismo (Figura 4). Detectando y siguiendo dichas etiquetas, es posible obtener el estado y la posición del robot. Se diseñaron distintas técnicas de detección y seguimiento de colores parar lograrlo, a continuación se describen algunas. Figura 2. Posiciones de las articulaciones del esqueleto (20 puntos). Sólo se utilizan los 11 puntos superiores encerrados en el rectángulo horizontal, desde la espina dorsal hasta la cabeza incluyendo los brazos, para llevar a cabo la detección y el seguimiento del médico. Figura 4. Etiquetas de color ubicadas sobre cada articulación del robot. Figura 3. Esqueleto del médico obtenido a partir de 11 puntos proveídos por el sensor, desde la espina dorsal hacia arriba. Inicialmente se encaró el problema utilizando una implementación que provee el SDK (Kit de desarrollo de Software Kinect que provee Microsoft [6]) para dibujar el esqueleto humano. Para lograr visualizar el estado de los sistemas de seguimiento, el médico y el robot debían ser dibujados sobre el mismo Canvas. Pero dado que la implementación de Microsoft hace un borrado completo de la pantalla en cada refresco, el robot nunca era visible. Para resolver este problema, se construyó un nuevo esqueleto usando figuras básicas (círculos y líneas). Las líneas, que representan los huesos, conectan cada una de las 11 articulaciones (representadas por círculos). En lugar de borrar el canvas completamente en cada refresco, sólo se actualiza la posición de las figuras, y esto hace posible tener muchas figuras en el mismo canvas, sin tener que borrar ninguna de ellas cuando llega un nuevo frame. Antes que nada, se hace una breve descripción de como Kinect se comunica con nuestra aplicación: los datos del stream de colores obtenidos a partir de la cámara RGB son recibidos como una matriz, es decir un arreglo bidimensional. Cada pixel de color está representado por 4 bytes: componentes rojo, verde, azul. El cuarto byte indica la transparencia. Es decir, cada cuatro bytes, se define el color de un pixel (Figura 5). Figura 5. Representación del stream de colores. Como se muestra en la Figura 4, cada etiqueta abarca más de un pixel. Pruebas manuales y observaciones mostraron que incluso dentro del perímetro de las etiquetas, las componentes de color de los pixeles varían mucho. A partir de esto se puede decir que un color RGB no define a una etiqueta. En cambio, se necesitan rangos de valores para cada componente. El inconveniente es que, mientras más largo sea el rango elegido, habrá más posibilidades de detectar objetos de colores similares, que podrían estar en la zona de trabajo. III. AJUSTE DEL CAMPO DE VISIÓN DEL SENSOR Se agregó al sistema una función de control de inclinación, usando el motor de Kinect, que permite modificar el campo de visión del mismo, lo cual le da una versatilidad a la aplicación de tal manera de que se pueda ubicar fácilmente al médico y al robot en la sala de operación. El propósito del mismo es centrar al médico en el medio de la ventana de la aplicación. El ángulo de control tiene un rango de ajuste vertical del campo de visión de 54°, desde los -27° hasta los +27°. La interfaz de la aplicación posee un menu desplegable para Figura 6. Etiquetas de dos colores. El primer enfoque —trivial— para seguimiento de colores consistió en configurar manualmente los rangos de valores para cada etiqueta para tratar de encontrarlos en la matriz. Este método no solo encontraba las etiquetas, sino también otros objetos de colores similares del lugar. Se necesitaban más restricciones. MATHÉ et al.: DETECTION OF HUMAN-ROBOT COLLISION Un enfoque distinto está basado en la detección de patrones de colores. Por ejemplo, dos etiquetas de color para cada articulación, una al lado de la otra (Figura 6). En este caso, para cada etiqueta se necesitan 6 rangos RGB (tres para cada color). El algoritmo, además de buscar los colores, debe verificar que estos dos se encuentran uno al lado del otro, respetando el orden en el que aparecen. Esto hace que sea dificil detectar etiquetas que estuviesen rotadas. El algorítmo más exitoso contaba el número de pixels que satisfacían los rangos dentro de una pequeña linea de pixeles contiguos (Figura 7). Si el número era aceptable, el proceso se repetía para la línea siguiente. Si ambas líneas pasaban la prueba, se consideraba encontrada una de las etiquetas del robot. Esto está basado en probabilidad: dada una zona de la imagen, a más pixeles que satisfacen las restricciones, más alta es la probabilidad de que éstos pertenezcan a una etiqueta. 151 Figura 9. Efectos de profundidad. A: (izquierda) la etiqueta está cerca de la cámara; B: (derecha) etiqueta l j El siguiente es el pseudocódigo del algoritmo de 2 líneas: /* * Algorithm */ pixelNumber = 0 while ( (noMatch) && (pixelNumber < frame.length)) : for each label in labels : / /checkthe current pixels and 2 nearby pixels to see if it’s a matching zone / /checkMatchreturns true if the currentPixel matches the label’s color values. pixel1match ← checkMatch ( pixelNumber,label.red,label.blue,label.green) pixel2match ← checkMatch ( pixelNumber + offset,label.red,label.blue,label.green) pixel3match ← checkMatch ( pixelNumber + 2*offset,label.red,label.blue,label.green ) if ( pixel1match ANDpixel2match AND pixel3match) : linecount 1 ← 0 / /try to match the first line for each pixel inline1: if ( checkMatch ( pixel,label.red,label.blue,label.green ) ) : linecount1 + + if ( linecount1 > 0.6*label.width ) : / / at least 60% pixel matches linecount2 < − 0 for each pixel inline2 : if ( checkMatch ( pixel,label.red,label.blue,label.green) ) : linecount2 + + Figura 7 Representación de el algoritmo de dos líneas. Este método fué capaz de detectar todas las etiquetas, y su velocidad permitió el seguimiento en tiempo real. A su vez, era menos sensible a otros objetos de color similar que pudiesen estar en la misma escena. Dado que las etiquetas son cuadrados (Figura 8A), no varían con rotaciones de 90 grados. Para que el sistema funcione con cualquier rotación posible, las líneas escaneadas deben ser lo suficientemente pequeñas para que entren horizontalmente en la ventana en el peor caso (Figura 8B). if ( linecount2 > 0.6*label.width ) : labelDetected + + saveLabelPosition if ( labelDetected == 3) : noMatch = false A. Entrenamiento de colores y profundidad Para establecer el seguidor de colores, se alimenta el algoritmo con siete valores para cada etiqueta: profunidad, y mínimos y máximos para cada componente de color (rojo,verde y azul). Primero se deben colocar las etiquetas sobre las articulaciones del robot. Como se muestra en la Figura 10, la imagen de color posee una mira negra capaz de desplazarse sobre la imagen. Figura 8. A: (izquierda) contexto simple; B: (derecha) contexto complejo. Otro obstáculo que se presentó fue la escala. A medida que las etiquetas se alejan de la cámara, se ven más pequeñas (Figura 9). Para superar este problema, el algoritmo debe adaptar la longitud de la línea a escanear según la profundidad de las etiquetas. Más adelante se explicará el proceso de configuración de la profundidad, junto con el aprendizaje de los colores. Figura 10. La mira se muestra en la esquina superior derecha. La mira debe ser movida hasta que se ubica sobre una etiqueta. La interfaz gráfica de la aplicación posee botones para controlar el desplazamiento de la misma. También hay botones (uno para cada articulación del robot: hombre, codo y muñeca) para capturar el color que se encuentra bajo la mira. Por ejemplo, para capturar el color de la articulación del codo, el botón “codo” debe ser presionado. La mira debe ser llevada dentro de la etiqueta y se debe presionar el botón de captura 152 IEEE LATIN AMERICA TRANSACTIONS, VOL. 11, NO. 1, FEB. 2013 más de una vez, para garantizar que se incluyan variaciones de color dentro de una misma etiqueta. Para establecer la profundidad, lo que no es siempre necesario, se deben realizar las siguientes acciones antes de entrenar el seguidor de colores: 1) Ubicar la mira sobre el borde izquierdo de la etiqueta y presionar el botón de captura; 2) Mover la mira hasta el borde derecho y presionar el botón de profundidad (Fig.11). Este proceso cuenta el número de pixeles necesarios para cubrir la longitud de la etiqueta, y guarda ese valor que será utilizado por el algorítmo de 2 líneas. Este número disminuye a medida que la profundidad aumenta. pequeño, el sistema detectará posibles colisiones cuando ocurran. En cambio, si son grandes, detectarán posibles colisiones antes de que ocurran, permitiendo evitarlas antes de que ocurran. Por otro lado, se definieron cinco puntos en el brazo robótico, uno por cada articulación (3), y un punto medio en cada línea que une dos articulaciones (2). Esto se muestra en la Figura 14. Figura 14. Puntos de interés del brazo robótico, utilizados para el algoritmo de detección. Figura 11. Izquierda: paso 1, borde izquierdo. Derecha: paso 2, borde derecho Luego de configurar correctamente el sistema acorde a la descripción anterior, éste debería ser capaz de hacer el seguimiento del brazo robótico (Figura. 12). B. Algoritmo de detección Para cada uno de los puntos de interés del médico, se calcula la distancia a cada uno de los puntos de interés del robot. Por ejemplo, se toma el punto elbow_left (codo izquierdo del médico) y se calcula la distancia a cada uno de los puntos del robot, trazando rectas, tal como muestra la Figura 15. Figura 12. Izquierda: lo que la cámara ve. Derecha : Lo que la aplicación ve. V. DETECCIÓN DE POSIBLES COLISIONES Como se puede ver en la Figura 13, hay círculos centrados en las articulaciones con mayor riesgo de colisión del esqueleto. Dichos círculos, representan el espacio que ocupa el cuerpo, más un espacio adicional extra. La cabeza y la espina dorsal, tienen menos probabilidad de estar involucrados en una colisión. Por otro lado, la Figura 14 muestra los puntos de interés definidos en las articulaciones del robot. Cada uno de estos círculos son usados en el algoritmo de detección de colisiones. Figura 15. Rectas imaginarias dibujadas por el algoritmo de detección. Luego, a partir de cada una de esas rectas, se generan cinco círculos, y se obtienen sus perímetros. Después de eso, se usa una sentencia condicional para comparar cada uno de los perímetros calculados recientemente, con el perímetro del circulo que tiene como punto central el codo del médico. Si el perímetro del codo (elbow_left) es mayor a alguno de los otros perímetros, se asume que hay riesgo de colisión, y el sistema lanzará una excepción “Riesgo de colisión”. El siguiente pseudocódigo muestra a grandes rasgos la implementación de dicho algoritmo: /* * Variables and vectors definition */ int physicianJoints Figura 13. Círculos definidos sobre los brazos del médico, usados para el algoritmo de detección. A. Definición de puntos de interés Las articulaciones, que son el centro de los círculos, son llamadas puntos de interés. Cada círculo denota una zona de peligro de colisión. Los radios pueden ser ajustados manualmente por quien maneje la aplicación. Si el radio es [] ← { hand _ right, wrist _ right, elbow _ right, shoulder _ right, head, shoulder _ center, spine, shoulder _ left, elbow _ left, wrist _ left, hand _ left } [] int radiusRobot [ ] ← { shoulder, shoulder _ elbow, elbow, wrist _ elbow, wrist } int robotJoints int radiusPhysician ← { 0, 0, 0, 0, 0 } [] ← { hand _ rightRadius, wrist _ rightRadius, elbow _ rightRadius, shoulder _ rightRadius, headRadius, shoulder _ centerRadius, spineRadius, shoulder _ leftRadius, elbow _ leftRadius, wrist _ leftRadius, hand _ leftRadius } int perimeterRobot [] ← { 0, 0, 0, 0, 0 } int perimeterPhysician ← 0 MATHÉ et al.: DETECTION OF HUMAN-ROBOT COLLISION /* * Algorithm */ for each i in physicianJoints[ ] { for each j in robotJoints[ ] { radiusRobot[ j ] ← distance( physicianJoints[ i ] , robotJoints[ j ] ) perimeterRobot[ j ] ← perimeter( radiusRobot[ j ] ) perimeterPhysician ← perimeter( radiusPhysician[ i ] ) if (perimeterRobot[ j ] < perimeterPhysician) throw warning "Risk of collision" } } /* * The function distance, calculates the distance between two integers that it recives, and returns * another interger: the distance between the two points. And the function perimeter calculates * the expresion 2 × π × Radius and returns an integer */ Finalmente, es importante destacar que las líneas dibujadas en el Canvas no representan a escala el grosor del cuerpo humano y esa es una de las razones de por qué es más conveniente utilizar diámetros mayores para los círculos. La Figura 16 muestra una situación donde puede ocurrir una colisión. Ésta fue detectada por el sistema durante una prueba. 153 posición del brazo según los cambios en el entorno del robot. La Figura 18 muestra un diagrama de lazo cerrado del control de movimiento del robot Lapabot. El cirujano utilizará el Joystick para posicionar el punto central del instrumento de acuerdo a sus necesidades. La salida del detector de colisiones es la entrada del bloque generador de trayectorias, el cual determina la configuración cinemática de las articulaciones que el robot debe adoptar, para cumplir los requisitos del operador, y genera las correspondientes curvas de posición y velocidad articular Los valores instantáneos de las curvas son comparados con la configuración actual de las articulaciones de robot, por el compensador de movimientos, el cual luego determina el comando de acción inyectado en cada uno de los motores de las articulaciones, de acuerdo con la ley de control programada. Figura 18. Diagrama de lazo cerrado del control de movimiento del robot Lapabot. VI. FUTURAS MEJORAS Figura 16. La aplicación lanza una excepción de advertencia sobre una posible colisión, durante una prueba del sistema. C. Salida del sistema Como salida de la aplicación se obtiene un archivo de texto, que registra la posición donde una posible colisión fue detectada. Ésta es representada en pares de coordenadas x, y. El tamaño del Canvas es de 300x400 pixeles, por lo tanto el resultado obtenido estará contenido en esos valores. El archivo de texto luego será leído por el controlador del robot, para la planificación de su trayectoria. A continuación, la Figura 17 muestra otra prueba, y el archivo de salida que muestra que la última posible colisión fue detectada en la posición x=207 e y=182 del canvas. Figura 17. Archivo de texto que registra las coordenadas de cada una de las posibles colisiones. La salida del detector de colisiones tiene dos funciones principales: a) Restringir el espacio de trabajo del robot durante la generación de trayectoria, con el fin de evitar invadir el espacio del cirujano; y b) una vez alcanzado el equilibrio, determinar si se necesita hacer una corrección de la En la fase de prueba del proyecto, se encontraron algunas dificultades: 1) Profundidad: Actualmente, el algoritmo de detección de colisiones sólo detecta posibles intersecciones en el plano visible de la cámara del sensor, y no tiene en cuenta la profundidad. Por ejemplo, si observa las manos de la persona por delante y por detrás del robot, el sistema detectará colisiones cuando la mano tape la visión del robot, incluso en el caso de que la mano esté muy por delante del mismo. Solución propuesta: mapear los pixeles de la imagen de color a los pixeles en el frame de profundidad. De esta forma, es posible conocer la profundidad a la que se encuentran las etiquetas de color, para compararlas con la profundidad de las articulaciones del cuerpo. El equipo oficial de Kinect de Microsoft declaran que están trabajando en una función similar a ésta. Por el momento, se puede investigar el método inverso: GetColorPixelCoordinatesFromDepthPixel. 2) Variaciones de iluminación: Dependiendo de la iluminación del entorno, un mismo color puede parecer otro. Para disminuir este efecto se agregó la función de “entrenar” el detector de colores. Propuesta de perfeccionamiento: en el sistema actual, se define un color según el modelo RGB (rojo, verde, azul) ya que es el que utiliza Kinect. Pero con una simple rutina de transformación esos valores pueden ser convertidos al modelo HSV (matiz, saturación, valor) que es independiente de la iluminación. 3) La sensibilidad: Se han detectado situaciones en las que las que las coordenadas de las articulaciones del médico 154 IEEE LATIN AMERICA TRANSACTIONS, VOL. 11, NO. 1, FEB. 2013 provistas por el sensor no son totalmente precisas. Esto se debe a que Kinect fue diseñado principalmente para videojuegos, y su principal objetivo está relacionado con la detección de la forma del esqueleto. Además, el detector de esqueleto no tiene en cuenta los dedos de las personas. Propuesta: Con el fin de tener en cuenta el espacio ocupado por los dedos, los radios de los círculos del médico no deben ser demasiado pequeños. VII. CONCLUSIÓN El sistema es capaz de detectar situaciones peligrosas, pero no se encuentra totalmente preparado para ser utilizado en una cirugía. Todavía hay muchos aspectos a probar y mejorar. Para garantizar la continuidad y el mantenimiento del proyecto, cada etapa de la implementación ha sido documentada, y se ha escrito una propuesta de posibles mejoras. Respecto del sensor Kinect, es un dispositivo que abre camino hacia una gran cantidad de nuevas aplicaciones que no han sido descubiertas aún. El desarrollo sobre esta plataforma se encuentra en una etapa sumamente temprana. Desde que se lanzó el SDK oficial, todos los días se crean nuevas aplicaciones [4]. Es una excelente herramienta para el desarrollo sobre imágenes 3D y procesamiento de muchos tipos de imágenes. AGRADECIMIENTOS Se agradece el apoyo brindado por el Ministerio de Ciencia y Tecnología de Córdoba y de la Secretaría de Ciencia y Tecnología – SeCyT de la Universidad Nacional de Córdoba, Argentina REFERENCIAS [1] [2] [3] [4] [5] [6] (SlideShare) Juan Pablo Arbeláez (2011, March). Kinect, Como Funciona. Disponible: http://www.slideshare.net/ArbelaezGroup/kinectcomo-funciona-7228721 (Visual Studio Developer Center) Microsoft. Get started with Visual Studio. Disponible: http://msdn.microsoft.com/en-us/vstudio/ff431702 (Kinect for Windows) Microsoft. Kinect SDK. Disponible: http://www.microsoft.com/en-us/kinectforwindows/develop/ (Coding4Fun) Microsoft. Project Gallery. Disponible: http://channel9.msdn.com/coding4fun/kinect/ (Microsoft Research, Kinect for Windows) Microsoft (2011, July). Programming guide, SDK beta. (Microsoft Research, Kinect for Windows) Microsoft (2011, July). SkeletalViewer Walktrough C++ and C#, SDK beta. Ladislao Mathé (M’92) nació en Argentina en 1951. Se graduó como Ingeniero Electricista Electrónico en la Universidad Nacional de Córdoba, Córdoba, Argentina en 1976. En 1977, se unió al Departamento de Ingeniería Electrónica de la Universidad Nacional de Córdoba, como Profesor de Control. Sus áreas de interés incluyen mecatrónica, sensores inteligentes y transductores, robótica y aviónica. Ha estado involucrado desde 1971 en diferentes proyectos R&D en el área aeroespacial y de sistemas electrónicos, y robótica. Desde 2003 es Director del Grupo de Investigación GRSI (Grupo Robótica y Sistemas Integrados) de la Universidad Nacional de Córdoba. Fue presidente de la subsección Córdoba IEEE-Sección 9 durante los años 2003-2004. En el presente, es presidente del Capítulo Argentino de la Sociedad de Sistemas Aeroespaciales y Electrónicos de la IEEE (IEEEAESS). (email: [email protected]) Caverzasi Agustín (M’11) 1989, nacido en la ciudad de Las Varillas, Córdoba, Argentina. Terminó sus estudios primarios y secundarios en la Escuela Normal Superior Dalmasio Vélez Sarsfield, de la misma ciudad, con especialidad en Economía y Gestión de las Organizaciones, en el año 2007. En 2008 ingresó a la carrera Ingeniería en Computación en la Facultad de Ciencias Exactas Físicas y Naturales de la Universidad Nacional de Córdoba, Argentina. Actualmente se encuentra cursando el último año de dicha carrera, comenzando a desarrollar el trabajo final en el Grupo de Robótica y Sistemas Integrados (GRSI). Saravia Rajal Fernando (M’11) 1990, nacido en Salta, Argentina donde completo sus estudios primarios. Luego se mudó a Davis, California durante su primer año de secundaria en la Emerson Junior High. En 2004, regresó a Salta, donde finalizó sus estudios de secundaria. En 2008 ingresó a la carrera Ingeniería en Computación en la Facultad de Ciencias Exactas Físicas y Naturales de la Universidad Nacional de Córdoba, Argentina. Actualmente se encuentra cursando el último año de dicha carrera, comenzando a desarrollar el trabajo final en el Grupo de Robótica y Sistemas Integrados (GRSI). Gómez Gabriel (M’96) nació en Córdoba, Argentina, en 1974. Se recibió de Ingeniero Electrónico en la Universidad Nacional de Córdoba, Córdoba, Argentina, en 2000. En 2002, se unió al Departamento de Ingeniería Electrónica de la Universidad Nacional de Córdoba, como Profesor de “Control de procesos Industriales” (Ingeniería Electrónica) y desde 2009 es Profesor de “Robótica en Medicina” (Ingeniería Biomédica). Sus áreas de interés incluyen sensores inteligentes, redes industriales, sistemas instrumentados de seguridad y robótica. Desde 2010, es Subdirector del Grupo de Investigación GRSI (Grupo de Robótica y Sistemas Integrados). Es miembro Senior de ISA desde 2010. Juan Pablo Pedroni (M’10), nació en Córdoba, Argentina, in 1977. Es graduado en Ingeniería Electrónica de la Universidad Nacional de Córdoba. En 2007, recibió el título de Especialista en Ingeniería en Control Automático de la Universidad Tecnológica Nacional Regional Córdoba, donde está estudiando por un título de Maestría en la misma especialización. Desde 2003 es Profesor Auxiliar en las Cátedras de Sistemas de Control y Teoría de Redes y Control en el Departamento de Ingeniería Electrónica, Ingeniería Biomédica, e Ingeniería en Computación de la Universidad Nacional de Córdoba. Es miembro del Grupo de Investigación GRSI (Grupo de Robótica y Sistemas Integrados), donde ha participado de manera activa en el desarrollo del brazo robótico para laparoscopía. Es miembro de la IEEE desde 2010. ([email protected]).