Avance drones

Durante el semestre estuve trabajando con un ardrone parrot 2.0 en un proyecto que consiste en hacer que el dron siga un objeto rojo.

Al empezar utilice node.js con la biblioteca de node-ar-drone y node-opencv. En el camino encontré varios obstáculos. Primero cuando trataba de utilizar la función de getPngStream(); de ar-drone sólo obtenía una imagen en el navegador y tenía que recargar la página a cada rato para actualizar la imagen, para resolver esto instale ffmpeg, después ejecute las pruebas de compatibilidad que se incluyen con la biblioteca, cambie algunas cosas de la instalación de ffmpeg hasta obtener resultados positivos en las pruebas y obtener un stream de imágenes. Después para utilizar el módulo de opencv, decidí hacer un prototipo donde aprendería a utilizarlo, pero al tratar de instalar el módulo usando el manejador de dependencias de node siempre resultaba en error y tuve que buscar en varias página e instalar algunas cosas hasta poder instalarlo. Esos pasos están a continuación por si alguien quiere utilizar node-opencv en algún momento:

  • Instala opencv, asegúrate que sea una versión menor a la 3.0.0.
    • Para la instalación:
    • Descarga opencv de: http://opencv.org/downloads.html
    • Descomprímelo y guárdalo en c:\opencv
    • Crea una variable de Sistema: OPENCV_DIR – C:\opencv\build\x64\vc12
    • Añade el path: %OPENCV_DIR%\bin
  • Instala python version 2.7: http://www.python.org/download/releases/2.7/
  • Instala pkg-config:
    • Instala la versión complete desde http://www.gtk.org/download/win64.php
    • Si el paso anterior no funciona sigue los siguientes pasos:
      • Instala MinGW
      • Descarga pkg-config.exe
      • Descomprime el folder y pon el archivo pkg-config.exe en /MinGW/bin
      • Descarga GLib DLL
      • Descomptime y copia liglib-2.0.0.dll en la carpeta de /MinGW/bin
      • Abre la terminal y ejecuta los siguientes comandos:
      • $ cd c:/MinGW/bin
      • $ cp libintl-8.dll intl.dll
    • Verifica que estás obteniendo una ruta correcta a la carpeta de opencv usando el siguiente comando: $ pkg-config –cflags opencv
    • Si obtienes la ruta la instalación de opencv está completa, sino sigue estos pasos:
      • Crea un archivo llamado opencv.pc
      • El archivo deberá contener la siguiente información

prefix=C:/opencv

exec_prefix=${prefix}/bin

libdir=${prefix}/build/x64/vc12/lib

includedir_old=${prefix}/build/include/opencv

includedir_new=${prefix}/build/include

 

Name: OpenCV

Description: Open Source Computer Vision Library

Version: #versión que corresponda

Libs: ${libdir}/opencv_core2410 ${libdir}/opencv_imgproc2410 ${libdir}/opencv_highgui2410 ${libdir}/opencv_ml2410 ${libdir}/opencv_video2410 ${libdir}/opencv_features2d2410 ${libdir}/opencv_calib3d2410 ${libdir}/opencv_objdetect2410 ${libdir}/opencv_contrib2410 ${libdir}/opencv_legacy2410 ${libdir}/opencv_flann2410

Cflags: ${includedir_old} ${includedir_new}

  • Agrega una variable de Sistema llamada PKG_CONFIG_PATH que contenga la ruta donde hayas guardado el archivo de opencv.pc
  • Instala visual studio con sus components de c++
  • Ejecuta npm install opencv para instalar el módulo de opencv
  • Si después de ejecutar npm install opencv obtienes algún error que tenga que ver con la compilación de c++ puedes buscar el error en internet y hacer cambios pequeños en el código para que se instale. Si el error es de otra cosa revisa que el proceso de instalación explicado arriba este completo.

Después ya que sabía muy poco de opencv fui con un compañero de la carrera que está realizando su proyecto de tesina usando drones para que me orientara un poco. Me recomendó utilizar la librería de cvdrone (https://github.com/puku0x/cvdrone) para C++ porque utilizar node da un delay de 1 – 2 segundos, lo cual es demasiado tiempo en términos de visión computacional, luego me explico algunas cosas de opencv y la forma en que él estaba localizando un objeto; me paso un programa que él había hecho para usarlo de ejemplo y un tutorial para identificar un color. Estuve revisando la librería y ejecute varios de sus ejemplos para ver cómo funcionaba, dentro de esos ejemplos había uno que utilizaba el filtro de Kalman, el cual es un algoritmo recursivo que realiza estimaciones usando datos imprecisos de un sistema dinámico para predecir que va a hacer después. El filtro de Kalman es muy bueno para sistemas que están en cambio continuo y como sólo guarda el estado anterior del sistema, no necesita de mucha memoria, además es muy rápido, lo cual lo hace perfecto para sistemas en tiempo real, como este que trata de seguir un objeto. Usando esto con algunas modificaciones para realizar una muestra de color sin necesidad de mover manualmente los parámetros de HSV y añadiendo funciones para el movimiento del dron obtuve un resultado aceptable de seguimiento que será refinado en lo que resta de tiempo del semestre.

A continuación un vídeo de los resultados hasta el momento:

Drones

Hola soy Mariana, anteriormente en el blog había hecho una introducción acerca del proyecto en el que trabajaríamos con los drones haciendo un programa para que un ar-drone parrot buscara un color y lo siguiera, pero gracias a poca disponibilidad de tiempo y pésima planeación el proyecto no se terminó y en su lugar hicimos un controlador web en el que se puede ver la señal en vivo de la cámara del dron y enviarle instrucciones de vuelo como despegar, aterrizar, ir al frente, etc.

Para tener comunicación bidireccional con el dron utilizamos una librería en JavaScript para Node.js, llamada socket.io,  la cual nos permite controlar eventos en tiempo real a través de conexiones TCP. Y para el stream de vídeo  que se muestra en la página usamos node-dronestream que analiza cada frame que es enviado por el dron y divide la carga útil en unidades NAL que luego envía al navegador a través de sockets y ya en el navegador utiliza un decodificador de JavaScript para hacer el render del vídeo usando WebGL.

El proyecto lo puedes encontrar en esta liga: https://github.com/edudeespinosa/exploradorDron

Junta con una guía rápida para la programación de drones con Node.js y los pasos necesarios para instalar el proyecto.

Drones

Hola, mi nombre es Mariana. Estoy en 7° semestre de la carrera de Ingeniería en Sistemas Computacionales.

En este blog les estaré compartiendo los avances que vayamos teniendo en el proyecto de drones, en el que estaré trabajando con otros compañeros y el maestro Benjamín, el cual consiste en hacer un programa para que el drone busque y siga un color determinado.

Para el proyecto utilizaremos un ar-drone parrot, drone propulsado por cuatro motores eléctricos que cuenta con un microprocesador, sensores y una cámara. El ar-drone, además funciona como servidor lo cual permite que te conectes y puedas controlarlo por medio de dispositivos móviles, a través de una aplicación, o programarlo y así lograr hacer cosas más divertidas e interesantes.

Para la programación del drone utilizaré Node Js  y la librería del ar-drone (https://github.com/felixge/node-ar-drone) para poder usar comandos de alto nivel como ‘takeoff()’ para controlar el drone.

Por ahora eso es todo, visiten próximamente para ver nuevos avances del proyecto.

Aquí les dejo una imagen del drone: