Cámara

8. Cámara

Los rover llevan más de una cámara:

The Cameras on the Mars 2020 Perseverance Rover Nasa.gov

Nosotros.... una 🎥 😁 la standard de la Raspberry:

8.1 ¿Qué vamos a hacer?

Manejar la cámara web es fácil si queremos que salga por la salida HDMI de la Raspberry, simplemente ejecutando el siguiente código Python, sale la imagen por el puerto HDMI, en este caso durante 10 segundos Pero no sale por VNC ni por SSH:

from picamera import PiCamera
from time import sleep
camera = PiCamera()
camera.start_preview()
sleep(10)
camera.stop_preview()

Pero nosotros necesitamos que retransmita = streaming las imágenes, pues el robot se mueve, y no tiene instalado un monitor, luego lo tiene que hacer vía red.

Encontrarás en Internet varias formas de hacerlo:

  1. Utilizando un programa en Python
  2. Utilizando MJPG STREAMER bajo un programa servidor WEBIOPI
  3. Utilizando Motion (recomendamos)

La primera opción video o este tutorial dependes de tener todas las librerías intaladas, por ejemplo limmal ...

La segunda opción WEBIOPI (https://webiopi.trouch.com/) siguen con la versión 0.7.1 sin actualizar luego no lo recomendamos

Vamos a usar Motion, un programa diseñado para manejar la cámara en estos contextos y sí que está actualizado (actualmente por la 4.3.1) y muy extendido en el uso de cámaras web, lo que nos da unas garantías de no tener problemas, su página web oficial es https://motion-project.github.io/index.html .

8.2 Configuracion

Lo primero que tienes que hacer es activar la cámara y Remote GPIO

¿Recuerdas? En el capítulo 8.1 de Raspberry básico ya activamos VNC Server y SSH, ahí también están la opciones de activar la cámara y Remote GPIO.

Si estás utilizando la Raspberry pero no de forma gráfica con VNC sino textual con SSH el comando a utilizar es

sudo raspi-config

entra en la opción 5

Y activas la cámara y Remote SSH en las opciones P1 y P8 :

8.3 Motion

Vamos a ver lo que sale por la cámara de forma remota :

image-1648026812597.gif

Imagen de Gifer

MOTION

Esta librería open-source muy utilizado en sistemas de alarma con la Raspberry

(🤔🤔🤔🤔 hacer un sistema de videovigilancia📹 de mi casa 🏠a distancia 📡 y monitorizar 📺 por muy bajo coste... 🤔 que envíe una foto a mi email cuando detecte un movimiento) puedes verlo aquí cómo se hace: https://sites.google.com/view/javierquintana/raspberry/alarma?authuser=0

image-1648026877485.png

Parent detector

Pero nosotros NO nos interesa que detecte movimiento, sino que simplemente haga streaming.

Para esto, simplemente modificaremos el fichero de configuración de la librería motion.conf. Es muy típico modificar ficheros de configuración tipo texto en los softwares abiertos, lo que muestra su versatilidad y potencialidad. Puedes ver las diferentes posibilidades de configuración de Motion aquí

Cómo hacerlo

Abrimos una ventana de comandos, en SSH, ya sabes cómo o en el mismo VNC de forma gráfica abre la ventana de comandos, y ejecutamos estas órdenes:

Instalamos MOTION :

sudo apt-get install motion

Editamos el fichero de configuración motion.conf con el editor nano

sudo nano /etc/motion/motion.conf

Buscamos estas líneas y las modificamos :

Si estuvieran estas líneas webcam_localhost on y webcam_port 8080 las borramos, o mejor las dejamos como comentarios poniendo delante un hastag # así #webcam_localhost on #webcam_port 8080.

En esta página podemos ver otra configuración de motion.conf para el mismo propósito de streaming.

Grabamos el fichero: pulsando Ctrl+X se sale pero preguntará si queremos grabar el fichero con el mismo nombre, le decimos que sí

Finalmente ejecutamos motion con esta orden

sudo motion

Si queremos que se ejecute de forma automática cuando arranque la raspberrypi editamos el fichero /etc/rc.local y al final le ponemos esa instrucción. Es decir

sudo nano /etc/rc.local y añadimos sudo motion al final (he puesto un comentario mi script optativo)

image-1648026975944.jpg

¿Cómo se ve desde la red local?

Pues abrimos un navegador y ponemos la dirección a través del puerto que le hemos dicho en stream_port o sea 8081

http://---LA-DIRECCION-DE-LA-RASPBERRY--:8081

es decir si la dirección es 192.168.1.25 entonces tecleamos http://192.168.1.25:8081

Si queremos un protocolo seguro https mirar esta página

¿Y desde Internet?

Opción instalar un nuevo servicio

No se puede hacer gráficamente en la página Remote.it no sabemos por qué. Hay que hacerlo con comandos con SSH.

sudo remoteit add -h

Nos sale una lista de servicios que podemos añadir, tecleamos el ID del servicio que queremos añadir en este caso vemos en la figura que el 7 es HTTP.

Nos pide el puerto, ponemos 8081 el mismo que en Motion

Un nombre para el servicio, le hemos puesto webcam, y hecho lo que tienes que hacer en la Raspberry.

image-1648027047268.jpg

Entramos ahora en un ordenador a remote.it en nuestros "Devices" y pinchamos en el servicio que hemos creado:

image-1648027054061.jpg

Y automáticamente nos abre el navegador con la webcam funcionando

image-1648027070952.jpg

image-1648027074434.gif

Imagen de Gifer

Vale, pero .. ¿y cómo se quita un servicio de Remoteit?

Entramos en al página web en el device en cuestión

image-1648027096098.jpg

Y copiamos el ID del servicio que queremos borrar:

image-1648027112867.jpg

Y ejecutamos la orden sudo remoteit remove --id y la ID que queremos borrar es decir en mi caso :

sudo remoteit remove --id 80:00:00:00:01:0A:18:DF

image-1648027124853.jpg

Opción cutre con VNC

Si lo anterior por alguna razón fallara o remote.it quita el servicio HTTP, puedes ver la cámara por VNC.

Tienes que acceder a la Raspberry desde Internet con VNC mira estos apuntes

Una vez accedido por VNC remotamente podemos abrir el navegador de la misma Raspberry y la IP de él mismo es 127.0.0.1 luego abrir

http://127.0.0.1:8081

ojo en el navegador de la Raspberry no en tu ordenador.