scieee AI-readable full text Open interactive document viewer

Repositorio Institucional de Documentos

Abstract

En este proyecto se ha realizado todo el proceso para construir, controlar e integrar un brazo robotizado sobre un robot móvil estándar, en particular la plataforma TurtleBot,construido sobre la aspiradora autónoma Roomba. Así, el robot adquiere la capacidad para apartar o recoger objetos que pudieran molestarle en el cumplimiento de su tarea de limpieza. La detección e identificación se ha realizado mediante un sensor RGB-d (visión y profundidad), en particular el sensor Kinect de Microsoft. En resumen, se ha realizado un completo desarrollo, tanto software como hardware, de un brazo-robot y los elementos de percepción y control necesarios para su integración en la plataforma robótica móvil existente. El brazo robotizado a construir es de tipo RRR (es decir, con 3 articulaciones de rotación), con una muñeca de un grado de libertad y terminado en una pinza. La detección de objetos y guiado sencillo del brazo se realiza mediante el procesado de información capturada por el sensor RGB-d utilizado (Kinect). A partir de la nube de puntos en 3D que se obtiene de este sensor, se detectan objetos que aparezcan a lo largo de la trayectoria del robot y se calcula el punto de agarre donde sedirigirá el brazo. En más detalle, las tareas realizadas en este proyecto han sido las siguientes: A. Diseño y construcción del brazo robotizado: - Estudio de alternativas para su construcción, realización de planos 3D, solicitud depresupuestos para las piezas necesarias para construirlo. - Cálculo del modelo cinemático para el brazo robotizado. - Estudio, y puesta en marcha de un microcontrolador (Arduino Uno). - Montaje y programación del control del brazo robotizado desde Arduino. B. Estudio, instalación y familiarización con el entorno ROS (pseudo-sistema operativo utilizado para gestión de plataformas robóticas) y sensores relacionados, incluyendo:drivers OpenNI para comunicación con sensores Kinect; librerías PCL y OpenCV para facilitar las operaciones con imágenes 3D y 2D respectivamente; librerías para interacción entre ROS y Arduino C. Estudio e implementación del módulo de visión por computador con el sensor Kinect. Se han trabajado técnicas de segmentación de planos y agrupación en clusters para una detección sencilla de objetos/obstáculos sobre el suelo. D. Integración del control del brazo y el módulo de visión sobre el robot móvil: - Estudio del funcionamiento del robot-aspiradora y realización de un programa básico de control de movimiento del robot. - Implementación del programa principal que transmite la información obtenida por el sistema de visión al robot-aspiradora y al brazo-robot. Herman, Pierre; Murillo Arnal, Ana Cristina; Mosteo Chagoyen, Alejandro Rafael

Full text

Proyecto Fin de Carrera Ingeniería Industrial Autor: Pierre Herman Directores: Ana Cristina Murillo Arnal Alejandro Rafael Mosteo Chagoyen Escuela de Ingeniería y Arquitectura, Universidad de Zaragoza Febrero 2013 Brazo robotizado controlado mediante sensores de visión integrado sobre un robot móvil 1 BRAZO ROBOTIZADO CONTROLADO MEDIANTE SENSORES DE VISIÓN INTEGRADO SOBRE UN ROBOT MÓVIL Resumen En este proyecto se ha realizado todo el proceso para construir, controlar e integrar un brazo robotizado sobre un robot móvil estándar, en particular la plataforma TurtleBot, construido sobre la aspiradora autónoma Roomba. Así, el robot adquiere la capacidad para apartar o recoger objetos que pudieran molestarle en el cumplimiento de su tarea de limpieza. La detección e identificación se ha realizado mediante un sensor RGB-d (visión y profundidad), en particular el sensor Kinect de Microsoft. En resumen, se ha realizado un completo desarrollo, tanto software como hardware, de un brazo-robot y los elementos de percepción y control necesarios para su integración en la plataforma robótica móvil existente. El brazo robotizado a construir es de tipo RRR (es decir, con 3 articulaciones de rotación), con una muñeca de un grado de libertad y terminado en una pinza. La detección de objetos y guiado sencillo del brazo se realiza mediante el procesado de información capturada por el sensor RGB-d utilizado (Kinect). A partir de la nube de puntos en 3D que se obtiene de este sensor, se detectan objetos que aparezcan a lo largo de la trayectoria del robot y se calcula el punto de agarre donde se dirigirá el brazo. En más detalle, las tareas realizadas en este proyecto han sido las siguientes: A. Diseño y construcción del brazo robotizado: - Estudio de alternativas para su construcción, realización de planos 3D, solicitud de presupuestos para las piezas necesarias para construirlo. - Cálculo del modelo cinemático para el brazo robotizado. - Estudio, y puesta en marcha de un microcontrolador (Arduino Uno). - Montaje y programación del control del brazo robotizado desde Arduino. B. Estudio, instalación y familiarización con el entorno ROS (pseudo-sistema operativo utilizado para gestión de plataformas robóticas) y sensores relacionados, incluyendo: drivers OpenNI para comunicación con sensores Kinect; librerías PCL y OpenCV para facilitar las operaciones con imágenes 3D y 2D respectivamente; librerías para interacción entre ROS y Arduino C. Estudio e implementación del módulo de visión por computador con el sensor Kinect. Se han trabajado técnicas de segmentación de planos y agrupación en clusters para una detección sencilla de objetos/obstáculos sobre el suelo. D. Integración del control del brazo y el módulo de visión sobre el robot móvil: - Estudio del funcionamiento del robot-aspiradora y realización de un programa básico de control de movimiento del robot. - Implementación del programa principal que transmite la información obtenida por el sistema de visión al robot-aspiradora y al brazo-robot. 2 Índice Resumen ............................................................................................................................. 1 Índice .................................................................................................................................. 2 1. Introducción ................................................................................................................ 4 1.1. Objetivos y Entorno de Trabajo ............................................................................ 4 1.2. Distribución temporal .......................................................................................... 5 1.3. Contenido de la memoria ..................................................................................... 6 2. El brazo robotizado ...................................................................................................... 7 2.1. Concepción del robot ........................................................................................... 7 2.1.1. Fabricación a partir de chapas de aluminio .................................................. 7 2.1.2. Uso de Kit ..................................................................................................... 8 2.1.3. Elección de la alternativa ............................................................................ 10 2.2. Parte eléctrica .................................................................................................... 10 2.3. Parte de control ................................................................................................. 12 2.3.1. Plaqueta de micro-controlador ................................................................... 12 2.3.2. La interfaz de programación ....................................................................... 13 2.3.3. Cálculo del modelo inverso ......................................................................... 13 2.4. Diferencias entre modelo y realidad ................................................................... 14 2.4.1. Calibración de los servos ............................................................................ 14 2.4.2. Calibración del brazo .................................................................................. 16 2.5. Código de control ............................................................................................... 16 3. Sistema de visión ....................................................................................................... 17 3.1. Sensor ................................................................................................................ 17 3.2. Interfaz de mando .............................................................................................. 19 3.2.1. Conexión de la Kinect ................................................................................. 19 3.2.2. Visualización ............................................................................................... 19 3.3. Algoritmos de segmentación .............................................................................. 20 3.3.1. Reducción del tamaño de la nube de puntos .............................................. 20 3.3.2. Detección del plano del suelo ..................................................................... 21 3.3.3. Detección de los objetos............................................................................. 22 3.3.4. Determinación del objeto de interés........................................................... 22 3.3.5. Transferencia de coordenadas .................................................................... 23 3 4. Prototipo completo ................................................................................................... 25 4.1. El robot móvil TurtleBot ..................................................................................... 25 4.2. ROS (Robot Operating System) ........................................................................... 25 4.3. Funcionamiento del conjunto ............................................................................. 25 4.4. Resultados ......................................................................................................... 26 4.4.1. Prueba del error del brazo .......................................................................... 27 4.4.2. Prueba del error del sistema de visión ........................................................ 29 4.4.3. Límites de alcance ...................................................................................... 31 5. Conclusión ................................................................................................................. 32 5.1. Conclusiones del trabajo y trabajo futuro ........................................................... 32 5.2. Conclusión personal ........................................................................................... 33 Bibliografía ........................................................................................................................ 34 Tabla de las ilustraciones ................................................................................................... 36 Anexos .............................................................................................................................. 37 Anexo I: Calculo del modelo inverso ............................................................................. I Anexo II: El antiguo brazo robotizado .......................................................................... V Anexo III: Presupuestos .............................................................................................. VI Anexo IV: Planos de las piezas .................................................................................... XI Anexo V: Renderizados del brazo robotizado ......................................................... XXIII Anexo VI: Resultados de la calibración ................................................................... XXVI Anexo VII: Especificaciones técnicas de la Kinect .................................................... XXIX Anexo VIII: Fabricación de piezas “artesanales” ....................................................... XXX Anexo IX: Manual de Usuario del sistema ............................................................. XXXIII 4 1. Introducción Desde pequeño sueño con los robots. Probablemente los dibujos animados, Hollywood y los legos tienen algo que ver. Pero este sueño se ha quedado grabado en mi mente y, mientras los años pasaban, orientaba mi carrera en consecuencia. Es el motivo de mi presencia en esta doble titulación en el CPS, con la especialidad “Automatización y Robótica”. Mi proyecto de fin de carrera está en continuidad directa con la orientación de mi carrera. La presencia de la tecnología ha aumentado considerablemente en nuestras vidas durante las últimas décadas. La evolución de la robótica de servicio es también notable. Hoy en día, es bastante común encontrar robots de servicio en entornos interiores. Por ejemplo, desde la aparición del Roomba [1], el uso de robots-aspiradora autónomos ha aumentado considerablemente. La aparición de elementos programables low cost y open-source, como la plataforma Arduino [2] [3] o la Kinect [4], favorece las aplicaciones en sistemas autónomos personalizados [5]. Permiten la elaboración de robots caseros [6] guiados por sensores que captan información para reconocer elementos del entorno [7]. El Robot Operating System (ROS) [8], un meta-operating system para robots, permite la interacción y la comunicación entre los diferentes elementos programables de un robot, favoreciendo el desarrollo de robots de servicio completos. 1.1. Objetivos y Entorno de Trabajo El objetivo final de este proyecto es construir y controlar un brazo robotizado e integrarlo en un robot-aspiradora del laboratorio de robótica. Se basa en la anterior construcción de un brazo hecho como hobby en mi tiempo libre, a partir de chapas de madera reciclada, servo-motores y una plaqueta de microcontrolador Arduino Uno. El trabajo se ha realizado en el laboratorio de robótica del grupo RoPeRT, en las instalaciones del I3A. Los requisitos del sistema final son: • El robot tiene que detectar e identificar los objetos que pudieran molestarle en el cumplimiento de su tarea de limpieza mediante un sensor RGB-d (sensores de visión y de profundidad) como por ejemplo el sensor Kinect de Microsoft. • Una vez detectado el objeto, y si corresponde a un objeto que se puede recoger y que está situado en la zona de alcanzabilidad del brazo robotizado, el robot deberá actuar para recogerlo permitiéndole continuar el cumplimiento de su tarea de limpieza. Las tareas más importantes a realizar han sido las siguientes: 5 • La construcción del brazo robotizado. Esto necesita un estudio de las posibles alternativas, a saber: o construir totalmente el brazo a partir de chapas de aluminio, o usar un kit de montaje que permite un ensamblaje sencillo. Dado el caso de la fabricación completa del brazo robotizado, necesitamos pedir presupuesto a diversas empresas y planos de dicho brazo, que será modelado con CatiaV5 (programa de CAD). El brazo robotizado es de tipo RRR (es decir con 3 articulaciones de rotación) con una muñeca de un grado de libertad y terminado en una garra. La estructura externa está construida con piezas de aluminio, los actuadores son servo-motores y el conjunto está controlado mediante una plaqueta de micro-controlador, la plaqueta Arduino Uno [9]. • El cálculo del modelo cinemático inverso del brazo [10] permite obtener todas las configuraciones posibles de nuestro robot (en este caso solo son dos configuraciones porque la muñeca no tiene suficientes grados de libertad para permitir más). Así, con el modelo inverso, dada una posición (las coordenadas x, y, z) y el ángulo entre la garra y el suelo, obtenemos la configuración necesaria del robot para alcanzar dicha posición, es decir los ángulos donde debemos colocar cada eslabón. • Diseño e implementación del sistema de visión. Este proceso utilizará las nubes de puntos captadas por el sensor RGB-d de la Kinect, que contienen la información específica de cada punto captado, como las coordenadas o el color. A partir de esta información, mediante la biblioteca de PCL (point-cloud library) [11] y ROS [8], vamos a segmentar los puntos con diferentes modelos para permitir la detección del objeto de interés y su centroide. Finalmente el sistema debe elegir el objeto más cercano al robot, para recogerlo. • Implementar un módulo sencillo de movimiento, para realizar desplazamiento del robot de base (Roomba) y probar el funcionamiento del sistema completo. • Integrar y coordinar todos los módulos (control del brazo, sistema de visión, módulo de desplazamiento). Para ello se utilizara ROS, mediante el sistema de publish & subscribe. Es decir, cada programa envía o recibe mensajes de otros programas. Además, ROS tiene la ventaja de poseer varios drivers como los drivers de la Kinect y del Roomba, pero también dispone de un programa de visualización que es muy útil para verificar el funcionamiento del código de visión. 1.2. Distribución temporal En la ilustración siguiente (Ilustración 1), se descomponen los tiempos por semana de cada actividad. 6 Ilustración 1: Diagrama temporal del trabajo NB: en rojo vemos los trabajos propios del brazo. En amarillo, los trabajos de visión. En naranja, los de visión y del brazo integrados. En Violeta, las actividades que conciernen al conjunto, es decir el sistema final. En azul, la redacción de la documentación. 1.3. Contenido de la memoria El primer capítulo trata del desarrollo del brazo robotizado, desde su concepción hasta su control. Se explican las diferentes alternativas posibles para el montaje de la estructura externa, así como la alternativa elegida. Además, hablaremos del funcionamiento, de su control y de los aspectos propios de la concepción de un modelo real. A continuación, el segundo capítulo desarrolla la parte “visión” del trabajo. Empieza por una breve explicación del funcionamiento del sensor RGB-d utilizado, es decir la cámara Kinect de Microsoft. Hablaremos de las interfaces de este sensor, para acabar con los diferentes algoritmos de segmentación que permiten la detección de objetos. Después, el capítulo siguiente trata del prototipo completo. Empieza describiendo el robot móvil Roomba, para después desarrollar el funcionamiento del conjunto (brazo robotizado con el sistema de visión y el robot móvil Roomba). Terminaremos con un análisis breve de los resultados obtenidos. Para acabar, concluiremos sobre el proyecto y las maneras de mejorarlo. Planos de CAD Presupuestos Cálculo del modelo inverso Código de control del brazo Recepción y montaje Investigación de vision Código de vision Prueba brazo& vision Investigación de Linux y Ros Ensamblaje Roomba& Brazo& Kinect Investigación robot móvil Roomba Código general Prueba del conjunto Redaction de la memoria Septiembre Octubre Noviembre Diciembre Enero Febrero 7 2. El brazo robotizado Esta parte del proyecto se basa en un brazo robotizado que hice anteriormente, en mi tiempo libre, a partir de chapas de madera reciclada, servo-motores y una placa de microcontrolador Arduino Uno (ver Anexo II: El antiguo brazo robotizado). Su poca precisión y su falta de actuador para el agarre de objetos implican una reforma total de la estructura. El aluminio parece el material más adaptado a este caso por sus propiedades. Además, la parte de programación del antiguo brazo solo implementaba un modelo geométrico sencillo para el cálculo de los ángulos mientras que ahora queremos utilizar el modelo geométrico inverso que permite obtener todas las posiciones alcanzables (ver Anexo I: Calculo del modelo inverso). 2.1. Concepción del robot Las dos alternativas posibles estudiadas para la realización de la estructura externa del brazo robotizado son: - La fabricación de las distintas piezas a partir de chapas de aluminio, que permite construir un brazo más adecuado al uso deseado. - El uso de un kit que permite estabilizar los servomotores y asegurar la rotación entre ellos. Además el kit es compatible con los servomotores estándares. En ambos casos queremos un robot con cuatro grados de libertad y una garra. Los actuadores serán servomotores y el control será efectuado por una plaqueta de microcontrolador Arduino. 2.1.1. Fabricación a partir de chapas de aluminio La idea de esta alternativa es realizar la estructura externa a partir de chapa de aluminio, limitando las operaciones de fabricación como el corte y el pliegue. Las ventajas siguientes hacen del aluminio el componente ideal para la realización de nuestro brazo robotizado: - Material ligero. - Resistente. - Fácil de cortar y plegar. - Relativamente barato. Para reducir las fases de fabricación, utilizamos piezas estándares como los tirantes (de 25mm y 50mm) y los tornillos (M3). La estructura está hecha para pesar el mínimo posible, guardando una buena rigidez y también para funcionar con los servomotores ya poseídos (3 Hitec HS-311, un Hitec HS-645MG y un mini-servo estándar). El programa de CAD CatiaV5 no solamente permite diseñar los planos 3D (ver Anexo V: Renderizados del brazo robotizado) del brazo robotizado, sino también calcular los centros 8 de gravedad (implementando los parámetros de masa por volumen de cada elemento) y las masas equivalentes. Así, podemos verificar que los pares de fuerza en las articulaciones son inferiores a los pares de los servomotores. Otro aspecto interesante de los programas de CAD es la posibilidad de diseñar automáticamente los planos 2D a partir de las piezas 3D. Una modificación en la concepción 3D se actualiza en los planos 2D (ver Anexo IV: Planos de las piezas y Anexo V: Renderizados del brazo robotizado). Con estos planos contactamos varias empresas para obtener presupuestos. 2.1.2. Uso de Kit La segunda alternativa es el uso de un kit de montaje adaptable a los servomotores. El kit está compuesto por bricks (piezas modulares) que se pueden ensamblar entre ellos de manera muy sencilla [12]. Cada brick permite reforzar el eje de rotación gracias a una barra de carga fijada en una jaula de aluminio, alineada con el eje del servomotor. Así, la horquilla y la jaula están en rotación entre ellos de manera rígida, lo que limita los movimientos indeseados en las otras direcciones (ver Ilustración 3). Las ventajas del uso de un kit son: - Adaptabilidad a los servomotores. - Sencillez de montaje. Ilustración 2 : Rende r izado de la vista 3D de CatiaV5 15 • Parte programación Para calibrar los servos se necesita una aplicación que permita comunicar directamente el ordenador con la plaqueta. Así, se puede definir un impulso tecleándola, en una terminal de órdenes, y recoger el valor angular correspondiente. • Resultados Con el programa de calibración anterior, dibujamos con un tabulador, las curvas de conversión entre la impulsión de entrada y el valor angular de salida, y así obtenemos las ecuaciones de paso. El servomotor Futaba S3003 sirve solo para cerrar o abrir la garra, por lo que no necesitamos conocer la función de conversión entre las impulsiones y los grados. Ilustración 10: Curva de conversión de grados a impulsión Notamos que estas curvas son lineales (Ilustración 10), como lo precisa la documentación técnica de los servos. Sin embargo, las curvas son suficientemente diferentes como para justificar la implementación de tres funciones de conversión (y no una única para todos los servos). Más detalles en Anexo VI: Resultados de la calibración. y = 9,397x + 554,4 y = 10,32x + 551,5 y = 10,44x + 455,9 500 1000 1500 2000 2500 0 50 100 150 200 Impulso Grados Hitec HS311 Hitec HS645MG 9kg HbKing 16 2.4.2. Calibración del brazo Otra diferencia con la teoría es que cada servo tiene una gama angular entre 0 y 180 grados. Por lo tanto tenemos que montar el robot para aprovechar al máximo esta gama angular. Además, nuestros cálculos del modelo inverso están hechos para una posición inicial. Entonces, tenemos que considerar el 0 angular de cada servo a partir de la posición inicial del cálculo. Como los servomotores que usamos no proporcionan vuelta de información, vamos a calcular estos desfases angulares de forma aproximada: modificamos poco a poco los ángulos impuestos a cada servo, hasta llegar a la posición inicial utilizada para el cálculo del modelo inverso. 2.5. Código de control Una vez implementadas las ecuaciones de paso entre coordenadas y ángulo, añadimos varias funciones para controlar el brazo. Las más importantes son las siguientes: • Init, inicializa la posición del robot. • Calculate, calcula los ángulos para una posición deseada. • Pose, desplazamiento articular absoluto. • Move, desplazamiento articular con control de velocidad. • Moves, desplazamiento lineal con control de velocidad. • Open, abre la garra. • Close, cierra la garra. 17 3. Sistema de visión Para detectar los objetos a manipular por el brazo robotizado, se implementó un módulo de percepción basado en visión descrito a continuación. 3.1. Sensor El sensor utilizado es un sensor RGB-d, es decir de visión y profundidad, que permite capturar nubes de puntos tridimensionales. Estas nubes contienen la información específica de cada punto captado, como las coordenadas o el color. A partir de esta información vamos a segmentar los puntos con diferentes modelos para permitir la detección del centroide de nuestro objeto, lo que permitirá al robot actuar en consecuencia. En nuestro caso, disponemos en el laboratorio de la cámara Kinect de Microsoft (ver Ilustración 11) que es famosa por su innovación en el mundo de los videojuegos, porque permite jugar sin mando, gracias a su sistema de reconocimiento de los jugadores. La cámara RGB captura las imágenes de color RGB como una cámara clásica. El sensor de profundidad utiliza un captor CMOS y un emisor de infrarrojos (para más detalles técnicos, ver Anexo VII: Especificaciones técnicas de la Kinect). El sensor CMOS de infrarrojos permite obtener una imagen que representa la radiación térmica emitida por el objeto observado. Entonces, las informaciones captadas representan un mapeo de las emisiones térmicas, emitidas por el objeto que miramos (pero no nos transmite ninguna información sobre la profundidad ver Ilustración 12). Sensor de profundidad Cámara RGB Emisor IR Captor CMOS (IR) Ilustración 11 : Descripción de la Kinect 18 El emisor de infrarrojos bombardea su entorno con rayos infrarrojos (ver Ilustración 13). Una parte de estos rayos va a ser reflejada por el conjunto de las superficies tocadas. Así, cuanto más cercano esté un objeto, mayor será la cantidad de radiación reflejada. Por lo tanto, la cámara infrarroja, gracias a estos datos de cantidad de radiación recibida, puede medir la distancia entre la cámara y el objeto. Con este sensor recuperamos un mapa de profundidad de la escena captada. Cada punto contiene los datos de distancia a la cámara (Ilustración 14), que se guardan de manera más cómoda como coordenadas (x,y,z) en el sistema de coordenadas centrado en el receptor CMOS (Ilustración 20). Estos datos más los datos de la cámara RGB forman las nubes de puntos (point-cloud en inglés). (a) (b) Kinect Emisor IR Objeto Rayos emitidos Rayos reflejados Receptor IR Ilustración 13 : Esquema del funcionamiento del detecto r de profundidad Ilustración 12 : imagen RGB (a) e imagen de infrarrojos (b) 19 3.2. Interfaz de mando 3.2.1. Conexión de la Kinect Físicamente la Kinect necesita una alimentación externa y una conexión USB 2.0 para transmitir las nubes de puntos. La parte software necesita varios drivers que están incluidos en la biblioteca de ROS. Para ponerla en funcionamiento utilizamos la siguiente orden en la terminal: >> roslaunch openni_launch openni.launch 3.2.2. Visualización Para entender mejor el funcionamiento de nuestros algoritmos y también para verificar su buen funcionamiento, vamos a utilizar un programa de visualización 3D que está incluido en la biblioteca de ROS, el programa RVIZ (Ilustración 15). Lo abrimos directamente en el terminal de Ubuntu con la orden siguiente: >> rosrun rviz rviz (a) (b) Ilustración 14 : imagen RGB (a) e imagen de profundidad (b) 20 Ilustración 15: Visualizador Rviz 3.3. Algoritmos de segmentación El objetivo del sistema de visión es detectar los objetos que pueden obstaculizar el funcionamiento de un robot móvil aspiradora en el cumplimiento de su tarea de limpieza, como por ejemplo la ropa desafortunadamente dejada por el suelo. Además, nos limitamos a los objetos que puede levantar el brazo, es decir ropa de pequeño tamaño como trapos, calcetines, etc. 3.3.1. Reducción del tamaño de la nube de puntos Las nubes de puntos pueden contener muchos datos, y cuantos más datos tenemos, más largos serán los tiempos de cómputo. Por eso vamos a empezar por una reducción del tamaño de la nube emitida por la Kinect usando el Voxel-grid [11]. El Voxel-grid cuadricula el espacio en pequeñas cajas del tamaño deseado (para las 3 dimensiones del espacio), y cada punto englobado en una caja va a representar un único punto. El proceso es análogo a la pixelización en 2D, pero en lugar de representar un “super-pixel” del tamaño de la caja, todos los puntos están aproximados por el centroide. 21 Ilustración 16: (a) Nube de puntos y (b) nube de puntos después del voxel-grid. La Ilustración 16 muestra el resultado de una nube procesada por el filtro voxel-grid. 3.3.2. Detección del plano del suelo En nuestro caso, el robot móvil aspiradora Roomba trabajará únicamente en un entorno interior. Es decir, que solo se desplazará en suelos planos o casi planos. Por lo tanto, podemos usar esta hipótesis para nuestro algoritmo. Es decir, vamos a calcular el plano del suelo para utilizarlo después. Utilizamos la función “SACSegmentation” [11] con el método RANSAC [15], que permite obtener una segmentación plana de manera robusta y por lo tanto destacar el plano del suelo de nuestra nube de puntos (Ilustración 17). Ilustración 17: (a) Superposición de la detección con la imagen RGB, (b) reconstrucción en 3D. En azul, el plano del suelo detectado; en rosa, los otros puntos captados sobrantes. (a) (b) (a) (b) 22 3.3.3. Detección de los objetos Para detectar los objetos, vamos a utilizar la segmentación por agrupación, utilizando la librería estándar de PCL Euclidean Cluster Extraction [11], que implementa el método del K- mean Clustering [16] asociada a una estructura Kd-tree [17]. La idea principal es considerar que si dos puntos no superan una cierta distancia entre ellos, entonces pertenecen al mismo objeto (Ilustración 18). A este parámetro de distancia podemos añadir parámetros como el número mínimo y máximo de puntos para que la agrupación sea considerada como un objeto. Ilustración 18: (a) Superposición de la detección de objetos con la imagen RGB, (b) reconstrucción en 3D. En verde, los objetos detectados por la agrupación. En azul, el plano del suelo detectado. En rosa, los otros puntos captados sobrantes. 3.3.4. Determinación del objeto de interés Para determinar el objeto que nos interesa procesar en primer lugar, calculamos el centroide de cada objeto detectado y buscamos cuál de estos objetos tiene el centroide más cercano al robot (Ilustración 19). Tomamos sus coordenadas para enviarlas al programa principal de control del sistema. (a) (b) 23 Ilustración 19: (a) Superposición de la detección con la imagen RGB, (b) reconstrucción en 3D. En amarillo, el objeto de interés. En verde, los objetos detectados por la agrupación. En azul, el plano del suelo detectado. En rosa, los otros puntos captados sobrantes. 3.3.5. Transferencia de coordenadas Ahora que tenemos las coordenadas del centroide de nuestro objeto, tenemos que transformarlas al sistema de la base del brazo robotizado. Entonces, como la cámara esta inclinada hacia el suelo, tenemos que primero hacer una rotación de coordenadas de la base de la cámara (Ilustración 20), para orientarla en la referencia de la base del brazo, es decir en paralelo con el suelo. Para hacerlo, utilizamos los coeficientes del plano calculado con el algoritmo de segmentación plana para calcular el ángulo entre la cámara y el suelo (suponemos que tenemos la cámara alineada para que el eje transversal sea paralelo al suelo). Con este ángulo ya podemos estimar la rotación de la base. Ilustración 20: Ejes de la Kinect Después, con las dimensiones propias del robot podemos calcular una traslación de la base rotada a la base del brazo (Ilustración 21). (a) (b) Z Y X 24 Ilustración 21: Esquema de la transferencia de coordenadas, R k sistema de coordenadas de la Kinect, y R br de coordenadas del brazo robotizado. Z X X Z Z X β dZ dx Y Y Y Rk R br 31 4.4.3. Límites de alcance Medimos también los parámetros de alcance de nuestro robot. Los resultados están consignados en la tabla siguiente (Tabla 3): Elementos Medida Min Max Sistema de visión Límite en X en B br (mm) 0 1200 Límite en Y en B br (mm) -350 350 Límite en Z en B br (mm) -170 200 Zona de detección Límite en X en B br (mm) 10 220 Límite en Y en B br (mm) -170 170 Límite en Z en B br (mm) -170 0 Brazo robotizado Distancia d (mm) 10 300 Límite en X en B br (mm) 0 300 Límite en Y en B br (mm) -300 300 Límite en Z en B br (mm) -170 300 Objeto Tamaño (puntos) 90 2000 Tamaño (cm²) 15 350 Tabla 3: Parámetros del prototipo Nota: B br , base del brazo robotizado. 32 5. Conclusión 5.1. Conclusiones del trabajo y trabajo futuro Para concluir, podemos decir que el robot responde correctamente a los objetivos iniciales del proyecto: - El prototipo detecta e identifica los objetos que le molestan en el cumplimiento de su tarea de limpieza mediante un sensor RGB-d (sensores de visión y de profundidad) como por ejemplo el sensor Kinect de Microsoft. - Una vez detectado el objeto, y si corresponde a un objeto que se puede recoger y que está situado en la zona de alcanzabilidad del brazo robotizado, el robot lo recoge permitiéndole continuar el cumplimiento de su tarea de limpieza. El prototipo final no solo efectúa las tareas impuestas sino que las hace con una buena precisión, tanto desde el punto de vista del sistema de visión como del brazo robotizado, lo que le permite recuperar objetos de pequeño tamaño como un rollo de cinta adhesiva transparente. Sin embargo, aunque el robot coge perfectamente objetos “flexibles” y manejables (como los pañuelos u objetos de tela), tiene más dificultades con los objetos rígidos. Esto es debido a dos cosas: la primera es que el robot solo se fija en un punto para recoger los objetos, dirigiéndose hacia su centroide. Entonces, si el objeto rígido no está posicionado adecuadamente, la pinza no consigue agarrar el objeto, lo que implica que no puede moverlo. Otra limitación está en el propio funcionamiento de la garra, que se cierra de manera angular y no paralelamente. Por consecuencia, la parte que podemos mejorar es este aspecto del funcionamiento del robot añadiendo módulos de grasping más avanzados, que permiten determinar la mejor manera de recoger el objeto y los puntos de agarre óptimos a los que dirigir la pinza. Para poder incluir un módulo grasping más avanzado tenemos que modificar también la muñeca del brazo robotizado para dotarla de grados de libertad suplementarios. Otras mejoras se podrían hacer en trabajos futuros, como la implementación o integración de un módulo de reconocimiento de objetos en el algoritmo de visión, que permitiría ordenar los objetos recogidos, o el cambio de los actuadores para que sean más potentes y que puedan devolver las informaciones de posición. De aspecto general, vemos que el robot no está dimensionado para una aplicación concreta. Su altura lo hace demasiado voluminoso para que pueda ser utilizado como aspiradora en una casa y la estructura del brazo es demasiado débil. Además, el brazo tiene poco alcance por sus dimensiones y su posición actuales. No obstante, si modificamos estos elementos tenemos que modificar los componentes del robot en su conjunto. Si deseamos reducir la altura del robot, tenemos que pensar que este 33 parámetro depende de la Kinect y del brazo robotizado. De la Kinect, porque esta cámara RGB-d tiene un campo mínimo de visión de 1,2 metros. Deberíamos entonces reemplazar este componente por otro que requiera un campo mínimo inferior (como los utilizados en otras cámaras de tipo RGB-d). 5.2. Conclusión personal Por un lado, este proyecto me ha permitido tratar con las problemáticas de la robótica actual como los sistemas de visión y el control de miembros robotizados, mejorando así mis conocimientos en este campo. La libertad de maniobra y de decisión acordada por mis tutores no solo me permitió orientar el proyecto como me gustaba más, sino también implicarme totalmente en él y adquirir una cierta autonomía en mí trabajo. La experiencia ganada me servirá para mi futuro laboral en este dominio. Por otro lado, una observación sobre el funcionamiento de la escuela, es que me parece demasiado rígida la organización de los talleres, y que no sean agrupados en un “súpertaller”, que ofrecería más oportunidades en lo que se refiere a la fabricación y al uso de las máquinas de fabricación. Lo veo como una oportunidad a explorar porque la situación actual limita las posibilidades de creación y de desarrollo en los proyectos de los estudiantes. 34 Bibliografía [1] J. Jones, «Robots at the tipping point: the road to irobot Roomba,» IEEE Robotics & Automation Magazine, nº 13, p. 76–78, 2006. [2] P. Teikari, R. P. Najjar, H. Malkki, K. Knoblaucha, D. Dumortierd, C. Gronfiera y H. M. Coopera, «An inexpensive Arduinobased LED stimulator system for vision research,» Journal of Neuroscience Methods, p. 227–236, 15 November 2012. [3] J. A. Kornuta, M. E. Nipper y J. B. Dixon, «Lowcost microcontroller platform for studying lymphatic biomechanics in vitro,» Journal of Biomechanics, vol. 46, nº 1, p. 183–186, 2012. [4] P. Henry, M. Krainin, E. Herbst, X. Ren y D. Fox, «RGB-D mapping: Using Kinectstyle depth cameras for dense 3D modeling of indoor environments,» INTERNATIONAL JOURNAL OF ROBOTICS RESEARCH, pp. 305-313, April 2012. [5] B. T. M. Leong, S. M. Low y M. P.-L. Ooi, «Low-Cost Microcontrollerbased Hover Control Design of a Quadcopter,» Procedia Engineering, vol. 41, p. 458–464, 2012. [6] M. A. K. Yusoff, R. E. Samin y B. S. K. Ibrahim, «Wireless Mobile Robotic Arm,» Procedia Engineering, vol. 41, p. 1072–1078, 2012. [7] J.-J. Hernández-López, A.-L. Quintanilla-Olvera, J.-L. López-Ramírez, F.-J. Rangel- Butanda, M.-A. Ibarra-Manzano y D.-L. Almanza- Ojeda, «Detecting objects using color and depth segmentation with Kinect sensor,» Procedia Technology, vol. 3, p. 196– 204, 2012. [8] M. Quigley, B. Gerkey, K. Conley, J. Faust, T. Foote, J. Leibs, E. Berger y R. Wheeler, «ROS: an open source robot operating system,» de Proceedings of the 2009 International Conference on Robotics and Automation, Open- Source Software Workshop, 2009. [9] R. Guido, S. Fitzgerald y D. Cuartielles, «Arduino Uno,» Arduino, November 2011. [En línea]. Available: http://arduino.cc/en/Main/arduinoBoardUno. [10] Y. NAKAMURA y H. HANAFUSA, «Inverse kinematic solutions with singularity robustness for robot manipulator control,» Journal of dynamic systems, measurement, and control, vol. 108, nº 3, pp. 163-171, 1986. [11] R.B Rusu, Willow Garage, «3D is here: Point Cloud Library (PCL),» de Robotics and Automation (ICRA), 2011 IEEE International Conference on, 2011. 35 [12] EasyRobotic, «EasyRobotic,» A. Viklund, 2006. [En línea]. Available: http://www.easyrobotics.fr/. [Último acceso: 20 01 2013]. [13] R. Firoozian, Servo Motors and Industrial Control Theory, 1 ed., Springer, 2008. [14] A. KASINSKI, «TRAJECTORY PLANNING AND COMPUTERANALYSIS OF KINEMATIC PROBLEMS FOR MANIPULATORS,» SYSTEMS ANALYSIS MODELLING SIMULATION, vol. 8, nº 9, pp. 715-719, 1991. [15] A. F. Martin y C. B. Robert, «Random sample consensus: a paradigm for model fitting with applications to image analysis and automated cartography,» Communications of the ACM, vol. 24, nº 6, pp. 381 - 395, 1981. [16] J. A. Hartigan, Clustering Algorithms, New York: John Wiley & Sons, 1975. [17] J. L. Bentley, «Multidimensional binary search trees used for associative searching,» Communications of the ACM, vol. 18, nº 9, pp. 509 - 517 , 1975. [18] W. Garage, «Willow Garage,» 2011. [En línea]. Available: http://www.willowgarage.com/turtlebot. [Último acceso: November 2012]. 36 Tabla de las ilustraciones Ilustración 1: Diagrama temporal del trabajo ....................................................................... 6 Ilustración 2: Renderizado de la vista 3D de CatiaV5 ............................................................ 8 Ilustración 3: Descomposición de brick EasyRobotic ............................................................ 9 Ilustración 4: Ejemplo de robot construido con kits EasyRobotic .......................................... 9 Ilustración 5: Brazo robotizado construido con la alternativa elegida ................................. 10 Ilustración 6: Servomotor Hitec HS-311 ............................................................................. 11 Ilustración 7: Vista del interior del servo-motor ................................................................. 11 Ilustración 8: Plaqueta de microcontrolador Arduino Uno ................................................. 13 Ilustración 9 : Descripción del calibrador........................................................................... 14 Ilustración 10: Curva de conversión de grados a impulsión ................................................ 15 Ilustración 11 : Descripción de la Kinect ............................................................................. 17 Ilustración 12: imagen RGB (a) e imagen de infrarrojos (b)................................................. 18 Ilustración 13: Esquema del funcionamiento del detector de profundidad ......................... 18 Ilustración 14 : imagen RGB (a) e imagen de profundidad (b) ............................................. 19 Ilustración 15: Visualizador Rviz ......................................................................................... 20 Ilustración 16: (a) Nube de puntos y (b) nube de puntos después del voxel-grid. ............... 21 Ilustración 17: (a) Superposición de la detección con la imagen RGB, (b) reconstrucción en 3D. En azul, el plano del suelo detectado; en rosa, los otros puntos captados sobrantes. .. 21 Ilustración 18: (a) Superposición de la detección de objetos con la imagen RGB, (b) reconstrucción en 3D. En verde, los objetos detectados por la agrupación. En azul, el plano del suelo detectado. En rosa, los otros puntos captados sobrantes. ................................... 22 Ilustración 19: (a) Superposición de la detección con la imagen RGB, (b) reconstrucción en 3D. En amarillo, el objeto de interés. En verde, los objetos detectados por la agrupación. En azul, el plano del suelo detectado. En rosa, los otros puntos captados sobrantes. ............. 23 Ilustración 20: Ejes de la Kinect .......................................................................................... 23 Ilustración 21: Esquema de la transferencia de coordenadas, R k sistema de coordenadas de la Kinect, y R br de coordenadas del brazo robotizado. ........................................................ 24 Ilustración 22: Esquema del funcionamiento del conjunto ................................................. 26 Ilustración 23: Prototipo completo, brazo en posición inicial (a); brazo extendido (b) ........ 26 Ilustración 24: Robot en la cuadricula, prueba del brazo .................................................... 27 Ilustración 25: Diferencia entre la consigna (en azul) y la posición medida del brazo (en rojo). Vista de planta (a); en el plano X-Z (frente) (b); en perspectiva (c) ............................ 28 Ilustración 26: Robot en la cuadricula, prueba de visión..................................................... 29 Ilustración 27: Diferencia entre la posición del centroide (en azul) y su posición calculada por el algoritmo de visión (en rojo). Vista de planta, plano X-Y (a); de frente, plano Y-Z (b); en perspectiva (c) .............................................................................................................. 30 37 Anexos Anexo I: Calculo del modelo inverso .................................................................................... I Anexo II: El antiguo brazo robotizado.................................................................................. V Anexo III: Presupuestos ..................................................................................................... VI Anexo IV: Planos de las piezas............................................................................................ XI Anexo V: Renderizados del brazo robotizado ................................................................. XXIII Anexo VI: Resultados de la calibración ........................................................................... XXVI Anexo VII: Especificaciones técnicas de la Kinect............................................................ XXIX Anexo VIII: Fabricación de piezas “artesanales” .............................................................. XXX Anexo IX: Manual de Usuario del sistema .................................................................... XXXIII I Anexo I:Calculo del modelo inverso Nb: La imagen no corresponde al robot que hemos usado en nuestro caso. Esta imagen permite ilustrar los parámetros del DH. Sin embargo la posición inicial es la misma. Conociendo los parámetros del modelo geométrico de nuestro robot, podemos deducir los parámetros DH (Denavit–Hartenberg) siguientes: a i (mm) α i (rad) di (mm) ϴ i (rad) 1 0 π /2 0 0 2 1 10 0 0 0 3 1 10 0 0 0 4 105 0 0 0 Lo que nos da la matriz de DH de matlab:        20 0 0 0 0 110 0 0 0 0 110 0 0 0 0 105 0 0 0      nono=( αi, ai, ϴi, di,σi) con σi=0 por un eje de rotación y 1 por un eje de translación Buscamos el modelo geométrico inverso (Inverso Kinematic o ikine) de nuestro robot. Para eso, utilizamos las matrices U y V. a2 a3 a4 y0 z0 x0 x1 z1 y1 x2 z2 y2 x3 z3 y3 x4 z4 y4 II En nuestro caso, la matriz U1 bale: 1=(2+3+4)∗(1) −(2+3+4)∗(1) (1) 214∗(1) (2+3+4)∗(1) −(2+3+4)∗(1) −(1) 214∗(1) (2+3+4) (2+3+4) 0 224 0 0 0 1  Con 214=3∗(2+3)+2∗(2)+4∗(2+3+4) y 224=3∗(2+3)+2∗(2)+4∗(2+3+4) 1=0=  !  !  ! " !  #  #  # " #  $  $  $ " $ 0 0 0 1% Así, tenemos 1=2( ! ,− # ) o 1=2( ' ( 214 , ' ) 214 )=2(" # ," ! ) o 1=2*−" # ,−" ! + Vemos también que, ahora que conocemos t1, tenemos un sistema resoluble: ,(2+3+4)= $ (2+3+4)= $ 2+3+4=2( $ , $ ) Z4 si X0 Y0 px py Z4 si P III ,3∗2+3)+2∗(2)+4∗(2+3+4))∗(1)=" ! 3∗(2+3)+2∗(2)+4∗(2+3+4)=" $ -3∗(2+3)+2∗(2)=" ! (1)−4∗ $ =" . 3∗(2+3)+2∗(2)=" $ −4∗ $ =" / -*3∗(2+3)+ / =(" . −2∗(2))² *3∗(2+3)+ / =(" / −2∗(2))² ,3²∗²(2+3)="1²+2²∗²(2)−2∗2∗" . ∗(2) 3²∗²(2+3)=" / ²+2²∗²(2)−2∗2∗" / ∗(2) " . ∗(2)+" / ∗(2)=" . ²+" / ²+2²−3² 2∗2 = Lo que nos da: 2=2(" / ," . )±2( 3 4' 5 ²6' 77 ) Ahora que tenemos t2, con el sistema de ecuaciones precedente podemos determinar t2+t3 ,3∗(2+3)=" . −2∗(2) 3∗(2+3)=" / −2∗(2) Lo que nos da: 3=2*" / −2∗(2)," . −2∗(2)+−2 2+3+4=2(8,8) 4=2( $ , $ )−3−2 Resultado final: Z0 Y4 X4 nz oz oz nz X XI Anexo IV: Planos de las piezas XII XIII XIV XV XVI XVII XVIII XIX XXVI Anexo VI:Resultados de la calibración Grados Impulsion Hitec HS311 Hitec HS645MG 9kg HbKing 650 10 10 14 750 20 19 28 850 30 29 39 950 41 39 49 1050 52 49 58 1150 64 58 68 1250 76 67 77 1350 86 77 86 1450 97 86 95 1550 107 97 105 1650 117 106 114 1750 127 116 124 1850 138 126 133 1950 148 136 143 2050 159 145 152 2150 169 155 162 2250 179 165 171 XXVII y = 9,397x + 554,4 y = 10,32x + 551,5 y = 10,44x + 455,9 500 700 900 1100 1300 1500 1700 1900 2100 2300 2500 0 20 40 60 80 100 120 140 160 180 200 Impulso Grados Hitec HS311 Hitec HS645MG 9kg HbKing XXVIII y = 0,106x - 58,94 y = 0,096x - 53,42 y = 0,095x - 43,53 0 20 40 60 80 100 120 140 160 180 200 500 700 900 1100 1300 1500 1700 1900 2100 2300 2500 Grados Impulso Hitec HS311 Hitec HS645MG 9kg HbKing XXIX Anexo VII:Especificaciones técnicas de la Kinect Sensor - Lentes con sensor de color y profundidad. - Micrófono con voz. - Motor de inclinación para ajuste del sensor. Campo de visión - Campo de visión horizontal: 57 grados. - Campo de visión vertical: 43 grados. - Rango físico de inclinación: + - 27 grados - Rango del sensor de profundidad: 1.2m - 3.5m. Transmisión de datos - 320x240 16-bit de profundidad @ 30 fotogramas/seg. - 640x480 32-bit de color @ 30 fotogramas/seg. - 16-bit audio @ 16 kHz. Sistema de rastreo de esqueletos - Rastrea hasta seis personas, incluyendo a dos jugadores activos. - Rastrea 20 articulaciones por jugador activo. - Habilidad para rastrear a jugadores activos, hacia los Avatares de Xbox LIVE. Sistema de audio - Charla de grupo y con voz dentro de los juegos (requiere membresía Gold de Xbox LIVE). - Sistema de cancelación de eco para la recepción de voz. - Reconocimiento de voz en varios lenguajes. XXX Anexo VIII: Fabricación de piezas “artesanales” Algunas piezas necesitaron ser fabricadas de manera “artesanal”, como el soporte de la Kinect, el cable de transmisión de alimentación de los servos o el soporte de las piezas. El soporte de la Kinect fue construido con restos de chapa de madera, escuadras, tornillos, tuercas y chapas de aluminio (mini-barbacoa de las fuerza armadas españolas). Está construido de tal manera que: - Permite una inclinación modificable de la Kinect. - Utiliza solamente piezas recicladas. - Permite instalar y quitar la Kinect de manera sencilla Placas de aluminio (barbacoa militar de supervivencia) Madera reciclada Peones de sujeción para la Kinect XXXI El cable de alimentación está hecho a partir de un cable USB estropeado y lleva un interruptor (de una vieja lámpara), así podemos cortar la alimentación de los servos sin desenchufar el conector USB. El soporte del brazo permite acoplar el brazo robotizado al robot móvil. Interruptor Cable USB Machos de alimentación Plaqueta Arduino Soporte Palanca para encender el Roomba XXXII El calibrado permite calibrar los servos. Se reutiliza la base del robot precedente para mantener el servo. Añadimos un transportador y un peón de medida (hecho con un clip para hoja). Tornillos de mantenimiento Peón de medida Tirante Chapa Transportador Servo XXXIII Anexo IX:Manual de Usuario del sistema Manual de instalaciones: • Instalación de Linux Para empezar, tenemos que instalar Linux en el portátil que servirá para dirigir el robot aspiradora equipado de un brazo robotizado. Para eso, descargar el Linux Ubuntu de la red e instalarlo. Para más detalle en la instalación de Linux, seguir el link siguiente: http://www.ubuntu.com/download • Instalación de ROS Una vez Linux instalado, se debe instalar ROS Fuerte. Seguir las instrucciones de la página internet siguiente: http://www.ros.org/wiki/fuerte/Installation/Ubuntu • Instalación de ARDUINO Descargar el programa e instalarlo. El programa se puede descargar a partir de la página oficial de Arduino: http://arduino.cc/en/Main/Software • Instalar la biblioteca de ROS para Arduino En el terminal de Linux, entrar instrucción siguiente: >> sudo apt-get install ros-fuerte-rosserial Ahora que la librería está instalada, se debe copiar el rosserial_arduino/libraries en el sketchbook de Arduino. Para eso, entrar las instrucciones siguientes en el terminal: >> mkdir ~/ sketchbook /sandbox/libraries/ros_lib >> roscd rosserial_arduino/libraries >> cp -r ros_lib <sketchbook>/libraries/ros_lib/ Para más informaciones: http://www.ros.org/wiki/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup Ahora copiar la carpeta control_brazo en el sketchbook. • Modificar el fichero ArduinoProgram.h Abrir el fichero ArduinoProgram.h en la carpeta sketchbook/libraries/ros_lib Cambiar la línea #include “WProgram.h” por: #if (ARDUINO >= 100) #include <Arduino.h> #else #include <WProgram.h> #endif XXXIV • Instalación del driver del Roomba Para instalar el driver del Roomba entrar en el terminal de Linux la instrucción siguiente: >> sudo apt-get install ros-fuerte-brown-drivers Para más informaciones: http://pharos.ece.utexas.edu/wiki/index.php/Writing_A_Simple_Node_that_Moves_the_iRobot_C reate_Robot • Instalar los driver de la cámara Kinect Entrar en el terminal de Linux la instrucción siguiente: >> sudo apt-get install ros-fuerte-openni-camera >> sudo apt-get install ros-fuerte-openni-launch Para más informaciones: http://www.ros.org/wiki/openni_camera • Crear una carpeta de trabajo Para empezar, entrar las instrucciones siguientes: >> sudo apt-get install python-rosinstall >> rosws init ~/fuerte_workspace /opt/ros/fuerte Continuar con la creación de un nuevo espacio para los futuros paquetes de instalación. >> mkdir ~/fuerte_workspace/sandbox >> source ~/fuerte_workspace/setup.bash >> rosws set ~/fuerte_workspace/sandbox • Crear un paquete con PCL para el robot Entrar la instrucción siguiente: >> source ~/fuerte_workspace/setup.bash >> roscd >> cd sandbox >> roscreate-pkg Nono_tutorial pcl pcl_ros roscpp sensor_msgs Ahora que tenemos la carpeta de tutorial de robot, copiar en Nono_tutorial/src los ficheros “vision.cpp” “general.cpp”. En el paquete Nono_tutorial, abrir CMakeList.txt y añadir las dos siguientes líneas al final del fichero: rosbuild_add_executable (vision src/vision.cpp) rosbuild_add_executable (general src/general.cpp) XXXV Manual de arranque del robot • Arrancar ROS En un terminal, arrancar ROS con la instrucción: >> roscore • Arrancar la Cámara Conectar el cable USB de la Kinect así que su cable de alimentacion: >> roslaunch openni_launch openni.launch • Arrancar el programa de Arduino: Abrir el software de Arduino. En file/Sketchbook, buscar el programa control_brazo. Conectar el cable USB de datos y el cable de alimentación. Enviar el programa en la plaqueta Arduino. Una vez hecho, en un terminal copiar la instrucción siguiente: >> rosrun rosserial_python serial_node.py /dev/ttyACM0 • Arrancar el nodo del Roomba: En un terminal: >> rosrun irobot_create_2_1 driver.py • Arrancar el robot: Compilar los programas en un terminal: >> source ~/fuerte_workspace/setup.bash >> roscd >> cd sandbox >> rosmake Nono_tutorial Lanzar el programa de visión: >> rosrun Nono_tutorial visión Lanzar el programa general en otro terminal: >> source ~/fuerte_workspace/setup.bash >> roscd >> cd sandbox >> rosrun Nono_tutorial general