Table of Contents

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:

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:

Obteniendo ar_pose

   env_ros_fuerte
   rosws set ccny_vision --git https://github.com/srv/ccny_vision.git
   rosws update ccny_vision
    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

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:

  1. Los datos de calibración de la cámara
  2. Configuraciones de gscam
  3. Identificación del frame de la cámara

Webcam_transform (tf):

  1. 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:

    <launch>
       <!-- This launchfile should bring up a st -->
       <node name="webcam" pkg="gscam" type="gscam" output="screen">
       <param name="camera_parameters_file" value="$(find gscam)/examples/webcam_parameters.txt"/>
       <param name="gscam_config" value="v4l2src device=/dev/video0 ! video/x-raw-rgb,framerate=30/1 ! ffmpegcolorspace"/>
       <param name="frame_id" value="/webcam_frame"/>
       </node>
       <node name="webcam_transform" pkg="tf" type="static_transform_publisher" args="0 0 0.5 -1.57 0 -1.57 /world /webcam_frame 1$
   </launch>

Nota: El archivo anterior se guarda dentro de la carpeta gscam/examples

Seguidamente para detectar los marcadores con ar_pose y ar_single se creó single.launch en dicho archivo se tiene el remap de “usb_cam” a “gscam” y además se defininen los parámetros requeridos por ar_single, los cuales se definieron previamente.

El contenido de single.launch se observa a continuación:

    <launch>
       <remap from="/usb_cam/camera_info" to="/gscam/camera_info"/>
       <remap from="/usb_cam/image_raw" to="/gscam/image_raw"/>
          <node name="ar_pose" pkg="ar_pose" type="ar_single" respawn="false" output="screen">
              <param name="marker_pattern" type="string" value="$(find ar_pose)/data/patt.hiro"/>
              <param name="marker_width" type="double" value="80.0"/>
              <param name="marker_center_x" type="double" value="0.0"/>
              <param name="marker_center_y" type="double" value="0.0"/>
              <param name="threshold" type="int" value="120"/>
              <param name="use_history" type="bool" value="true"/>
              <param name="camera_frame_id" type="string" value="webcam_frame"/>
         </node>
    </launch>

Finalmente para correrlo se requieren tres terminales:

  env_ros_fuerte
  roslaunch gscam gscam.launch 
   env_ros_fuerte
   roslaunch ar_pose single.launch
   env_ros_fuerte
   rosrun rviz rviz

Para ver respecto a las configuraciones de rviz ir 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

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:

  <launch>
    <remap from="/usb_cam/camera_info" to="/gscam/camera_info"/>
    <remap from="/usb_cam/image_raw" to="/gscam/image_raw"/>
      <node name="ar_pose" pkg="ar_pose" type="ar_multi" respawn="false" output="screen">
              <param name="marker_pattern_list" type="string" value="$(find ar_pose)/data/object_data2_prueba"/>
              <param name="threshold" type="int" value="150"/>
              <param name="camera_frame_id" type="string" value="webcam_frame"/>
      </node>
  </launch>

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:

  env_ros_fuerte
  roslaunch gscam gscam.launch
   env_ros_fuerte
   roslaunch ar_pose multi.launch
   env_ros_fuerte
   rosrun rviz rviz    

Para ver respecto a las configuraciones de rviz ir 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 Rviz.

Regresar a ÍNDICE