sábado, 25 de enero de 2014

Sistema de visión para vehículo robótico:



(Conectado a la RPi desde escritorio remoto, de ahí que vaya tan lento y a saltos)

Este proyecto forma parte del vehículo robótico desarrollado tambien por Igor.

Mediante una cámara y un sensor de ultrasonidos, controlado por una Raspberry Pi y un Arduino, se intentará dotar al vehículo de capacidad para detectar y seguir objetos/personas de forma autónoma.




Usando las librerias OpenCV, la RPi analizará en tiempo real el video capturado por la cámara. Al detectar el objeto deseado se envían sus coordenadas al Arduino, que se encargará de mover los dos servos que controlan la dirección a la que mira la cámara para mantener dicho objeto centrado en su campo de visión. Midiendo también la distancia a la que se encuentra el objeto mediante el sensor de ultrasonidos, el robot podrá conocer la posicion del objeto respecto a él y seguirlo de forma autónoma.

A continuación las primeras pruebas de detección de objetos y una pequeña explicación de su funcionamiento.



Básicamente, la imagen original se pasa a HSV, y se ajustan los rangos de tono, saturación, y valor de forma que abarque justamente el color del objeto a detectar. En saturación y valor es deseable dejar un rango más amplio para compensar los cambios de luz en el objeto.

Filtrando la imagen con esos valores tendremos una imagen binaria (cada pixel estará dentro de esos valores o no lo estará), de forma que podemos detectar fácilmente objetos y su posición dentro del campo de visión de la cámara.

He seguido principalmente dos tutoriales:

- Real-Time Object Tracking Using OpenCV: Explica la forma más básica de seguir objetos con OpenCV, e incluye un código de ejemplo.

- OpenCV and Pi Camera Board: Explica cómo acceder al vídeo de la cámara de la RPi con OpenCV y cómo conseguir detección y reconocimiento de caras.

Este último me ha resultado especialmente útil, ya que a diferencia de una webcam usb donde con una simple función podemos capturar el vídeo, OpenCV no puede acceder directamente a la cámara de la RPi. De modo que, modificando el programa para grabar video con la cámara en la RPi (raspivid), se consigue que OpenCV acceda al buffer de video de la cámara y pueda procesar la imagen.

Por último, aquí se puede ver el tiempo aproximado de desarrollo del proyecto, y las tareas a realizar:

3 comentarios:

  1. ¿Qué arduino vas a utilizar? ¿Qué función va a realizar y por qué no la hace la Raspberry PI?

    ResponderEliminar
    Respuestas
    1. Arduino uno (mas bien una pcb hecha expresamente para el proyecto, con un atmega328).

      Se va a encargar de controlar los servos segun la posición del objeto que le envíe la RPi, y de controlar el sensor de ultrasonidos para medir la distancia al objeto. A parte de que los pines de la RPi van a 3.3v, lo que limita el uso, por ejemplo, de los tipicos sensores de ultrasonido para arduino, me parece más sencillo controlar servos y sensor con el arduino.


      PD: Que gracioso esto de eliminar mensajes sin eliminarlos...

      Eliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar