====== AR_POSE ====== Este paquete es un empaquetado para ROS de ARToolkit, que es una librería de software para construir aplicaciones de Realidad Aumentada, lo que utiliza son algoritmos de visión por computadora para determinar el punto de visión de un usuario, fue iniciada por el Dr. Hirokazu Kato, y sigue siendo desarrollada por Human Interface Technology Laboratory y ARToolworks, Inc. Es importante saber como funciona ARToolKit, este inicialmente detecta los cuadrados en la imagen, la cual se umbraliza con cierto valor de umbral (threshold), de forma que los pixeles cuya intensidad supere el valor del umbral son transformadors en pixeles de color negro, el resto se transforman en pixeles blanos. Se buscan y encuentran todos los marcos negros como los de la plantilla existentes en la imagen (en realidad al umbralizar la imagen el marco aparece blanco y el cuadrado blanco aparece negro)y a cada uno de ellos le captura el patrón dentro del cuadrado y lo compara con los patrones pre-entrenados, si uno coincide, entonces encontró el marcador, seguidamente utiliza el tamaño y orientación del marcador para calcular la posición respecto a la cámara. Ar_pose consta de dos nodos que se pueden correr, el primer ar_single es capaz de dar una transformación entre la cámara y un marcador, mientras que ar_multi da una formación de trasformaciones para múltiples marcadores, Por definición utiliza por definición usb_cam (nodo que interfaza con cámaras web estándar) para obtener la imagen y la información de la cámara, pero con ROS es posible realizar un "remap" donde se puede definir otra interfaz para la cámara (usaremos gscam), esto se indica más adelante. Los dos nodos están subscritos a dos topics: * /usb_cam/image_raw : las imagenes de este topic son pasadas a ARToolKit para análisis * /usb_cam/camera_info: Contiene la información de calibración En esta aplicacion se hará un "remap" de dichos subscriptores, con el fin de que se subscriban a gscam y no a usb_cam. En el siguiente link se encuentra detalladamente la forma de hacer remap usando roslaunch: http://www.ros.org/wiki/roslaunch/XML/remap Y además publican dos topics: * ar_pose_marker: da la posición actual del marcador relativo a la cámara * visualization_marker : da un marcador de visualización para rviz (donde vamos a ver la detección) ==== Obteniendo ar_pose ==== * Utilizando roslocate obtenemos ar_pose, y lo unimos a nuestro espacio de trabajo utilizando rosws merge: env_ros_fuerte rosws set ccny_vision --git https://github.com/srv/ccny_vision.git rosws update ccny_vision * Verificar variables de entorno y compilamos env_ros_fuerte rosmake ar_pose **Nota:**Si se da un error en el rosmake, precisamente en el paquete de artoolkit por la falta del archivo: libv4l1-videodev.h, entonces instalar el siguiente paquete: sudo apt-get install libv4l-dev Los marcadores que se van a utilizar se encuentran: ~/local/src/ros-fuerte/ccny_vision/artoolkit/build/artoolkit/patterns, es importante que al imprimirlos no se tengan como partes borrosas, para garantizar una buena detección. ===== AR_SINGLE ===== Este nodo rastrea un único ar_marker en una imagen y despliega su posición relativa, para su funcionamiento tiene una serie de parámetros, los cuales son necesarios para poder encontrar los marcadores, los más relevantes se especifícan a continuación: __**Parámetros**__ * marker_pattern(string, default: data/patt.hiro)Se debe definir cual patrón de los dados por artoolkit se va a detectar. * marker_width (double, default: 80.0): Se define el ancho del patrón dado en mm * marker_center_x (double, default: 0.0): Define el offset del centro físico del marcador en x * marker_center_y (double, default: 0.0): Define el offset del centro físico del marcador en y * threshold (double, default: 100): Este parámetro es muy importante ya que es utilizado para la creación de la imágen binaria, puede ir de 0-255, se usará un valor intermedio, alrededor de 100 * marker_frame (string, default: "ar_marker"): Define el nombre del frame para el marcador Los otros parámetros están puestos como "true", y así es como los requerimos para la aplicación, por lo que no se mencionarán, para más información de ellos se puede recurrir a la página oficial de ar_pose de ros: http://www.ros.org/wiki/ar_pose Además las transformaciones tf van relativas de la cámara al marcador: "camera_frame_id → marker_frame" ==== Implementación ar_single ==== Para la implementación de ar_single primero se creó un archivo gscam.launch para correr dos nodos: **Webcam (gscam):** En este se define: - Los datos de calibración de la cámara - Configuraciones de gscam - Identificación del frame de la cámara **Webcam_transform (tf):** - Se encarga de publicar las transformaciones de "world" a "webcam_frame" donde webcam_frame es el frame_id de la cámara El contenido de gscam.launch se observa a continación: Finalmente para correrlo se requieren tres terminales: * En la primera se corre gscam env_ros_fuerte roslaunch gscam gscam.launch * En la segunda corremos ar_single env_ros_fuerte roslaunch ar_pose single.launch * En la tercera corremos el visualizador rviz env_ros_fuerte rosrun rviz rviz Para ver respecto a las configuraciones de rviz ir [[teaching:ie0117:proyectos:2012:i:rviz|aquí]] ===== AR_MULTI===== Este nodo rastrea múltiples marcadores en una imagen y despliega sus posiciones relativas, para su funcionamiento tiene una serie de parámetros, los cuales son necesarios para poder encontrar los marcadores, los más relevantes se especifícan a continuación: __**Parámetros**__ * marker_pattern_list (string, default: "data/object_4x4"): Define el archivo donde se dan las descripciones de cada patrón * threshold (double, default: 100): * publish_visual_markers (bool, default: true): Habilita la publicación visual de los marcadores para rviz, por default es verdadero * publish_tf (bool, default: true): Permite la transmisión de transformaciones Además las transformaciones tf van relativas de la cámara al marcador: "camera_frame_id → marker_frames" ==== Implementación ar_multi ==== Para la implementación de ar_multi al igual que con ar_single se requiere correr gscam y las transformaciones, por tanto se utiliza también el archivo gscam.launch que se mostró anteriormente. Seguidamente para detectar los marcadores con ar_pose y ar_multi se creó multi.launch en dicho archivo se tiene el remap de "usb_cam" a "gscam" y además se defininen los parámetros requeridos por ar_multi, los cuales se definieron previamente. El contenido de multi.launch se observa a continuación: Dentro del archivo anterior se llama al archivo "(find ar_pose)/data/object_data2_prueba", a diferencia del ar_single, se define una lista de marcadores, se creó una lista con los marcadores a detectar, el contenido de dicha lista se muestra a continuación: #the number of patterns to be recognized 4 #pattern 1 Hiro #El nombre se refiere al nombre del frame para el marcador data/patt.hiro #Ubicación del patrón dentro de ar_pose 80.0 #Tamaño del marcador en mm 0.0 0.0 #Offset del centro físico del marcador #pattern 2 Kanji data/patt.kanji 80.0 0.0 0.0 #pattern 3 Sample1 data/patt.sample1 80.0 0.0 0.0 #pattern 4 Sample2 data/patt.sample2 80.0 0.0 0.0 **Nota:**Como se pudo observar dicho archivo debe estar dentro de la carpeta data de ar_pose, ya que el launch file lo espera ahí. Finalmente para correrlo se requieren tres terminales: * En la primera se corre gscam env_ros_fuerte roslaunch gscam gscam.launch * En la segunda corremos ar_multi env_ros_fuerte roslaunch ar_pose multi.launch * En la tercera corremos el visualizador rviz env_ros_fuerte rosrun rviz rviz Para ver respecto a las configuraciones de rviz ir [[teaching:ie0117:proyectos:2012:i:rviz|aquí]] ===== Comunicación de los paquetes ===== Es importante conocer quién se comunica con quién y a través de que, y para ellos utilizamos rxgraph, esta herramienta nos permite ver gráficamente la comunicación entre los diferentes paquetes, en la siguiente imagen se observa la comunicación que se da al correr gscam.launch, single.launch o multi.launch y rviz una vez que le agregamos los displays mencionados en [[teaching:ie0117:proyectos:2012:i:rviz|Rviz]]. {{ :ie0117_proyectos:gscam_arpose_rviz2.png?700 |}} Regresar a [[teaching:ie0117:proyectos:2012:i:ros_webcam|ÍNDICE]]