Visión Computarizada: Contando Gente con OpenCV, ROS, UP Board y una cámara Real Sense

En artículos anteriores hemos tocado el tema del kit de robótica de Intel con RealSense y UPBoard.

Como seguimiento a las instrucciones de inicio del Up Board les compartimos acá algunos comandos de ROS / LINUX para hacer uso de algunos de los ejemplos para aplicaciones de visión computarizada.


PASO 1 – Paquete OpenCV Apps

El primer paso sería la instalación de un paquete de ROS denominado “opencv_apps” mediante el siguiente procedimiento:

cd /opt
sudo apt-get install ros-kinetic-opencv-apps

PASO 2  – Ejemplo de la aplicación de detección de personas

El paquete OpenCV Apps de ROS contiene archivos de lanzamiento (.launch files) con ejemplos muy concretos sobre aplicaciones de visión computarizada.

Mediante el siguiente comando de ROS, la consola de LINUX se ubica en la ubicación del paquete OpenCV Apps:

roscd opencv_apps

Una vez en este directorio, echaremos un vistazo a la lista de archivos de lanzamiento:

cd launch
ls

El comando ls anterior lista en la consola todos los archivos .launch.

Uno de estos archivos es el denominado “people_detect.launch” el cual contiene las definiciones de ROS (en formato XML) que definen cómo tomar imágenes de una fuente (una cámara por ejemplo) y aplicar los métodos de detección de personas de OpenCV.

Para que este archivo funcione con las cámaras Real Sense, será necesario modificar este archivo “people_detect.launch” de la siguiente manera:

(!) Nota: Este procedimiento será necesario solamente una vez para una misma versión del paquete de ROS OpenCV Apps. Solo será necesario ejecutarlo nuevamente si se actualiza la versión del paquete de ROS OpenCV Apps.

Ejecute el comando gedit para editar el archivo:

sudo gedit people_detect.launch

Ubique las siguientes líneas en el archivo ver (estado inicial) y cámbielas para que luzcan como se especifica en (estado editado)

(estado inicial)

<arg name="image" default="image" doc="The image topic. Should be remapped to the name of the real image topic." />

<arg name="debug_view" default="true" doc="Specify whether the node displays a window to show edge image" />

(estado editado)

<arg name="image" default="camera/color/image_raw" doc="The image topic. Should be remapped to the name of the real image topic." /> 

<arg name="debug_view" default="false" doc="Specify whether the node displays a window to show edge image" />

PASO 3 –  Ejecución del ejemplo ROS para detección de personas

Ejecute los siguientes comandos de consola de manera individual, preferiblemente en una pestaña nueva de terminal (SHIFT CTRL  T)

1. Iniciar el nodo maestro de ROS

roscore &

2. Ubicarse en el directorio de ROS referente a la cámara Real Sense

roscd realsense_camera/

3. Lanzar (ejecutar) el procesador ROS de la cámara Real Sense

* Para una R200 use el siguiente comando: roslaunch realsense_camera r200_nodelet_default.launch &

* Para una SR300 use el siguiente comando: roslaunch realsense_camera sr300_nodelet_default.launch &

4. Ejecutar el procesador ROS para el proceso de detección de personas

roslaunch opencv_apps people_detect.launch

5. Carguemos ahora el visor de imágenes de ROS

rqt_image_view

* Este comando abre una ventana que tiene una caja de selección donde podemos elegir el canal que queremos visualizar.

 

Mi Ruta a la Visión Computarizada

Hola a todos,

En esta publicación dinámica, espero mantener una lista ordenada de cosas que he ido experimentando para aprender sobre visión computarizada.

Espero que les sea de utilidad:

  1. VIA RÁPIDA A LA VISIÓN COMPUTARIZADA CON SIMPLECV
  2. INICIEMOS CON SIMPLECV EN 5 MINUTOS EN LINUX MINT 18 (UBUNTU 16.04)
  3. SIMPLECV HELLO WORLD ++ EN OTROS 5 MINUTOS (LINUX MINT 18)
  4. INTEL REALSENSE ROBOTIC KIT CON UPBOARD + ROS
  5. INTEL UPBOARD Y EL KIT DE ROBÓTICA REAL SENSE
  6. CONTANDO GENTE CON OPENCV, ROS Y REAL SENSE
  7. PROCESANDO DATOS CON PYTHON

 

 

 

Tips para Impresión 3D con Printbot

Hace unos meses adquirimos unos Printbot Simplemetal de CRCibernetica.

El servicio que nos brindaron fue realmente excepcional. Parte de el servicio fueron unos tipos que nos enviaron por email, que me han resultado utiles al tratar de imprimir en 3D. Así que he decidido transcribirlos acá.

Aunque es probable que algunas instrucciones no apliquen para las versiones más recientes de Cura o de Printbot, espero que sea de utilidad a muchas otras personas.


Materiales requeridos:

  1. 3M Blue Masking Tape
  2. Alcohol de Fricción
  3. Algodón para aplicar el alcohol

Instrucciones Básicas

  1. Usar la version 15.04 de Cura (NO USAR LA ULTIMA VERSION):
    https://ultimaker.com/en/cura-software/list
  2. Seguir el setup Wizard seleccionando su impresora (Printrbot Metal Simple)
  3. Bajar el Profile “Getting Started.ini” de Printrbot:
    https://printrbot.zendesk.com/hc/en-us/articles/203814574-Getting-Started-Profile
  4. En Cura: File–>Open Profile y seleccionar el archivo “Getting Started.ini”
  5. En Preferences cambiar Printing Window type de “Basic” a “Pronterface UI”
  6. Cambiar Printing temperature(C) de 210 a 195. (Importante)

Cuando imprime, la impresora va a hacer los siguientes pasos:

  1. El “hot end” va a calentar al 195. (dura 1 minuto)
  2. Se va a mover a “Home” usando los switches de limite.
  3. Se va a iniciar el proceso de “Auto-Nivel” y mapear tres puntos en la cama.
  4. Va a empezar a imprimir.
  5. Cuando termina de imprimir se va a mover a “Home”.

Para crear sus propios modelos recomendamos tinkercad.com. Es gratuito y fácil de aprender. También sirve para “sanar” modelos de otras aplicaciones.

El sitio thingiverse.com tiene modelos 3D que se puede bajar.  Yo siempre busco alli antes de crear algo desde cero.

El spool holder que yo estoy utilizando es este:
https://www.youmagine.com/designs/printrbot-simple-filament-spool-holder-no-aluminum-handle

Impresión por SD Card

Si quiere imprimir directamente de un SD Card:

  1. Asegura que su impresora no esta conectada a su PC.
  2. Insierte un sd card en su PC
  3. En Cura, notar que el icono que normalmente apreta para imprimir ahora dice “SD”.
  4. Apreta este boton para copiar el GCode directamente al SD Card.
  5. Cambiar el nombre del archivo en el SD card a “auto0.g”. Asegura que NO tiene la extensión .gcode
  6. Con la impresora apagada insierte el SD Card.
  7. Prende la impresora.
  8. Tarda varios minutos en calentar y comenzar a imprimir. Puede tardar hasta 10 minutos.

El slot del SD Card no esta posicionado muy bien.  Para no tener que usar un alicate yo uso este holder que se puede imprimir usando la impresora: http://www.thingiverse.com/thing:416217

SimpleCV Hello World ++ en otros 5 minutos (Linux MINT 18)

Siguiendo nuestra serie sobre SimpleCV y como una motivación personal para aprender Python. Acá les presento un par de scripts basados en el ejemplo “Hello World” de SimpleCV.

El primero toma constantemente  una foto de una cámara y la “binariza”; es decir, la convierte cada pixel de la foto en negro o blanco dependiendo de su “posición estadística” respecto de los demás pixeles y muestra el resultado en pantalla.

El segundo toma la fotografía original, sin ser “binarizada” y la muestra en pantalla.

Al correr los scripts de manera simultánea podemos apreciar de mejor manera este filtro de binarización de la imagen.


PASO 1 – simplecv_helloworld.py

Usando un editor de texto como “xed” copiamos el siguiente programa y guardamos el archivo como “simplecv_helloworld.py”

from SimpleCV import Camera
# Initialize the camera
cam = Camera()
# Loop to continuously get images
while True:
    # Get Image from camera
    img = cam.getImage()
    img.save('/home/toruk-makto/imageport.jpg')
    # Make image black and white
    img = img.binarize()
    # Draw the text "Hello World" on image
    img.drawText("Hello World!")
    # Show the image
    img.show()

PASO 2 – simplecv_helloworld2.py

De nuevo, mediante el editor de texto copiamos el siguiente programa y guardamos el archivo como “simplecv_helloworld2.py”

from SimpleCV import Image

# Loop to continuously get images
while True:
    # Get Image from camera
    try:
        img = Image('/home/toruk-makto/imageport.jpg')
        # Draw the text "Hello World" on image
        img.drawText("Hello World!")
        # Show the image
        img.show()
    except:
        print "skip!"

PASO 3 – Ejecutar ambos scripts

En una terminal ejecutemos los siguientes dos commandos:



python simplecv_helloworld.py &

python simplecv_helloworld2.py &


Vemos como se muestran ambas imágenes “en tiempo real”

Para detener los scripts podemos digitar el comando fg(que trae el comando al “foreground de ejecución”) y luego usar las teclas CTRL C; o ejecutamos el comando sudo kill #### donde “####” corresponde al número del proceso que queremos detener; o simplemente cerramos la terminal.