En esta cuarta entrega del proyecto Construyendo un coche RC autónomo voy a detallar cómo configurar la cámara y sensores infrarrojos en la Raspberry Pi 3 para poder obtener vídeo que procesar. Trataré de poder enviar el vídeo en streaming con la menor latencia / delay posible al ordenador principal utilizando el adaptador WiFi que ya viene incluido en la Raspberry Pi

Raspberry Pi y la cámara

Accederemos a la Raspberry Pi mediante SSH (ver post Coche RC autónomo (III)). Tras conectar la cámara a la Raspberry Pi, tendremos que activar el módulo de la cámara en el menú correspondiente de la aplicación de configuración:

sudo raspi-config

# Y activamos la opción Enable Camera

Grabando vídeos

Para grabar vídeos de forma manual y ver que todo funciona, podemos ejecutar el siguiente comando:

raspivid -w 640 -h 480 -vf -b 10000000 -fps 30 -n -o testvideo.h264
  • -w: Width (en pixels)
  • -h: Height (en pixels)
  • -o: Nombre del fichero de salida (con extensión .h264)
  • -vf: Voltear verticalmente la imagen (si estamos tomando imágenes boca abajo)
  • -b: Bitrate en bits/segundo (25Mbps = 25000000)
  • -fps: Frames por segundo
  • -n: Desactivar modo de previsualización

Retransmitiendo en streaming

Al conectarnos por SSH, queremos visualizar en nuestro ordenador el vídeo en tiempo real. Hay varias formas para enviarlo.

Por ejemplo, podemos crear scripts (en Python, requiere cargar varias librerías como python-picamera) tanto en el servidor (nuestro ordenador que recibirá las imágenes) como en la Raspberry Pi (cliente con la cámara que enviará las imágenes). De esta forma podremos configurar en el cliente la IP y puerto (que tendrá que estar abierto en el cortafuegos de nuestro ordenador) para visualizar en streaming el vídeo obtenido por la cámara mediante una aplicación como VLC.

Pero como mi ordenador tiene GNU/Linux, bastará con ejecutar los siguientes comandos en nuestro ordenador (servidor) y en la Raspberry Pi (cliente). La idea es que el ordenador (que tiene la IP 192.168.1.100) escuche por el puerto 8000 lo que le vaya enviando la Raspberry Pi. Este método es muy sencillo pero puede producirse demasiado lag en la visualización de las imágenes en el ordenador de control de incluso varios segundos si se utiliza la aplicación vlc, por lo que habrá utilizar en su lugar mplayer con los siguientes parámetros de configuración:

# Comando para el servidor (nuestro 
# ordenador) a 6 frames por segundo para 
# que en cuanto lleguen imágenes de la 
# Raspberry Pi (que emite a 30fps) las muestre
nc -l 8000 | mplayer -fps 60 -cache 1024 -
# Comando para el cliente (Raspberry Pi 
# con la cámara, donde 192.168.1.100 es la 
# IP del ordenador, con -t 0 para duración ilimitada)
raspivid -w 640 -h 480 -t 0 -o - | nc 192.168.1.100 8000

El resultado será el siguiente: Un terminal donde hemos arrancado nuestro servidor de vídeo utilizando netcat (nc) para recibir las imágenes, un terminal conectado mediante SSH a la Raspberry Pi donde habremos arrancado el envío de vídeo al servidor (nuestro ordenador) y una pantalla de mplayer donde veremos en tiempo real lo que vaya viendo y enviando mediante la red WiFi el coche autónomo.

Martina programando la cámara

Si da error en el ordenador indicando Failed to open VDPAU backend libvdpau_va_gl.so: no se puede abrir el archivo del objeto compartido, se soluciona instalando los siguientes paquetes:

sudo apt-get install libvdpau-va-gl1

Asimismo, si no tenemos instalado mplayer, lo podemos instalar fácilmente:

sudo apt-get install mplayer

Podéis encontrar muchísima más información sobre el uso de la cámara y ejemplos prácticos en el ejemplar de la revista MagPi - Camera Module Essentials.

En los próximos posts del proyecto se detallará cómo acceder al streaming de la cámara usando Python para ser analizado con OpenCV. ¡Os espero!

Videocámara en acción

Más información sobre el proyecto