m5stack-unit-v2-un-mini-pc-con-camara-para-aplicaciones-de-ia

M5Stack Unit V2, un mini PC con cámara para aplicaciones de IA

El M5Stack Unit V2 es un dispositivo que combina un mini ordenador con Linux y una cámara full HD, diseñado para realizar aplicaciones de visión artificial y machine learning.

Ya hemos visto varios dispositivos de la familiaM5Stack en el blog. La mayoría de miembros del fabricante están basados en nuestro conocido SoC ESP32, incluida laTimer X Camera.

Sin embargo, el M5Stack Unit V2 es algo diferente a la mayoría de productos de M5Stack. En este caso estamos ante un mini ordenador completo con funcionando Linux.

El núcleo del M5Stack Unit V2 es un Sigmstar SSD202D, un procesador de doble núcleo Cortex A7 a 1.2Ghz. A esto le acompaña una memoria de 128MB DDR3 y una memoria Flash NAND de 512MB.

m5stack-unit-v2-schematic

El dispositivo incluye una cámara con una resolución de 2mpx (Full HD 1920×1080), con un FOV de 68º y un DOF de 60cm - infinito. La designación es GC2145, pero no hay mucha más información disponible sobre la cámara o su fabricante.

Además de esto, la Unit V2 cuenta con WiFI 2.4 Ghz, USB Tipo C, micrófono integrado, lector de tarjeta SD y un conector tipo groove para UART. Además, cuenta con interface LAN a través del USB Tipo C. Hasta tiene su propio ventilador de refrigeración.

m5stack-unit-v2-open

Todo ello en un impresionante tamaño de sólo 48*18.5*24mm y un peso de 62g. De verdad, no os imagináis lo pequeño que es, sólo un poco más grueso que un M5Stick.

El M5Stack Unit v2 cuenta con una carcasa de plástico, que incorporan un Led y un botón. El conjunto se completa con dos soportes, al igual que ya pasaba en la Timer Camera X. Uno con una rosca, por ejemplo, para usar en un trípode, y uno para usar con piezas de Lego.

2021-07-28-21_10_50-window

Por último, la alimentación del módulo se realiza a 5V. El consumo máximo es tan bajo como 500mA, nuevamente bastante impresionante para un mini PC.

Lógicamente, no podemos esperar un mini PC especialmente potente. Su procesador ARM de doble núcleo a 1.2Ghz obtiene un buen rendimiento, pero “sólo” dispone de 128MB de RAM.

En comparación una Raspberry Pi Zero W tiene un procesador ARM11 single core a 1Ghz, muchísimo más modesto. Por el contrario, cuenta con 512MB de RAM, compartida con la GPU.

En cuanto al precio, podemos adquirirlo por 70-80€ (con la situación actual de chip-shortage, no puedo especificar mucho más). Algo elevado, si lo comparamos con una Raspberry Pi Zero W 2 por ejemplo. Pero, es el precio de tener un mini-pc + cámara Full HD en un dispositivo tan pequeño.

Probando el M5Stack Unit V2

Actualizar el M5Stack Unit V2

Lo primero al usar el M5Stack Unit V2 es actualizar su firmware. Esto es debido a que las primeras versiones tenían un bug en el funcionamiento del WiFi. Versiones posteriores corrigieron este error.

Por tanto, lo mejor es actualizar a la última versión, que podemos descargar de aquí. A continuación, copiamos el fichero ‘M5UnitV2UpdPackage.img’ que acabamos de descargar en la tarjeta SD.

Con el Unit V2 apagado, introducimos la tarjeta SD. Pulsamos el botón del Unit V2 y lo conectamos a alimentación (al USB). El LED debería parpadear, y entonces soltamos el botón y esperamos a que se apague el botón.

En mi caso, el LED no parpadeó. Así que crucé los dedos, y esperé unos minutos a que el LED se apagara. Y funcionó correctamente.

Aplicaciones buit-in

El M5Stack Unit V2, al igual que todos los productos de la familia, viene de fábrica con una demo preinstalada. Vamos a revisar estas funcionalidades built-in.

Acceder al stream de video

En primer lugar, podemos acceder directamente al stream de la cámara a través de un navegador web. Para ello conectamos el Unit V2 a un ordenador, y reconocerá el dispositivo con una red LAN.

Ahora, podemos acceder usando la siguiente URL

http://10.254.239.1/video_feed

En el caso de que hayamos configurado el WiFi (lo veremos más adelante), deberemos acceder sin necesidad de tenerla conectada a un ordenador (sólo alimentada, con un cargador USB por ejemplo), sustituyendo la IP por la que le haya asignado el Router.

Factory demo

El Unit V2 viene con una Factory Demo preinstalada, con objeto de ilustrar distintas funcionalidades del dispositivo.

Esta aplicación es bastante impresionante y completa. Está desarrollada en C++, y su código está disponible https://github.com/m5stack/UnitV2Framework.

Para acceder a ella, simplemente nos conectamos desde un navegador web a la IP del dispositivo.

http://10.254.239.1

Nuevamente, si ya hemos configurado el Wifi, habrá que sustituir la IP por defecto por la que haya asignado el router.

La factory demo incluye aplicaciones totalmente funcionales para Audio FFT, detección o reconocimiento de caras, tracking de líneas, detección de movimiento, clasificador de formas, o reconocimiento de objetos, entre otros.

m5stack-unit-v2-builtin

Todos los ejemplos proporcionan una salida por UART de un fichero JSON, indicando los eventos relevantes del mismo. Por ejemplo, la detección del movimiento, o reconocer un objeto. La información detallada de cada ejemplo en esta dirección.

Esto significa que pueden conectarse con otro dispositivo, como por ejemplo un Arduino o un ESP32. Esto permite que podemos integrar incluso estos ejemplos del factory demo en proyectos reales.

Además, M5Stack proporciona un servicio web en este enlace, que nos permite entrenar los modelos de aprendizaje y que luego introduciremos en el Unit V2. Es una plataforma sencilla, aunque no especialmente práctica (requiere demasiado trabajo manual de etiquetado).

En cuanto al rendimiento de estas aplicaciones de visión por ordenador y Machine Learning, debo decir que es bastante bueno. Se nota el procesador dual core Cortex A7, y las aplicaciones van bastante fluidas incluso en FullHD.

Jupyter notebook

La otra funcionalidad built-in incorporada en el M5Stack Unit V2 es el cuaderno Jupyter. Para lo que nos lo conozcáis, Jupyter es una aplicación que está adquiriendo cierta fama, centrada en la formación de Python.

Jupyter permite crear “cuadernos”, entendidos como un fichero que contienen texto y bloques de código. Los bloques de código pueden ejecutarse independientemente, o todos a la vez secuencialmente.

m5stack-unit-v2-jupyter

Por tanto, resulta una herramienta interesante para elaborar instrucciones, o tutoriales, donde el estudiante puede comprobar los resultados a medida que avanza en el texto.

En el caso de la Unit V2, incluye unos pocos ejemplos que incluyen el control del LED, del micrófono, del UART y de la cámara, disponibles en https://docs.m5stack.com/en/quick_start/unitv2/jupyter_notebook

Acceder al sistema Linux

Las aplicaciones built-in y de demo del Unit V2 son bastante llamativas. Pero, conociéndonos, nosotros vamos a querer acceder al Linux, para poder sacar todo el potencial del dispositivo.

Sin embargo, hay que tener en cuenta que la distro de Linux que emplea el M5Stack es, en realidad, una función muy limitada y capada. No estamos hablando un Debian, o Lubuntu, o ni siquiera un ArchLinux.

Aquí no tenemos gestor de paquetes, ni apenas posibilidad de instalar software, ni siquiera un compilador de C++ (algo inexplicable, cuando su propio factory demo está realizado en C++.

Esta es, en mi opinión, el mayor defecto del dispositivo. Por si fuera poco, la documentación tampoco ayuda especialmente en este sentido.

No obstante, si existen ciertas operaciones que podemos realizar. Vamos a ver algunas de ellas.

Conectar por SSH

En primer lugar, podemos conectarnos por SSH al M5Stack Unit V2. Para ello, podemos emplear una consola de terminal (Linux o WSL en Windows).

ssh m5stack@10.254.239.1 

Aunque yo os recomiendo usar mRemotenG que vimos en esta entrada, y WinSCP para gestionar ficheros como vimos en esta entrada.

Los usuarios y contraseñas del dispositivo son los siguientes.

user: m5stack
pwd: 12345678

user: root
pwd: 7d219bec161177ba75689e71edc1835422b87be17bf92c3ff527b35052bf7d1f

Configurar el WiFi

Para configurar el WiFi del M5Stack Unit V2, en primer lugar debemos generar una contraseña para el ssid y password de nuestra red. Para ello ejecutamos el siguiente comando, sustituyendo los datos por nuestra red

sudo wpa_passphrase ssid password

Nos dará un resultado como el siguiente,

network={
        ssid="ssid"
        #psk="password"
        psk=44116ea881531996d8a23af58b376d70f196057429c258f529577a26e727ec1b
}

Tras esto, editamos el fichero wpa_supplicant.conf

sudo nano /etc/wpa_supplicant.conf

Aquí copiamos los datos por los que hayamos obtenido en el paso anterior, quedando el fichero de la siguiente forma,

network={
    ssid="ssid"
    psk=44116ea881531996d8a23af58b376d70f196057429c258f529577a26e727ec1b
}

Listo, ya tenemos el dispositivo conectado a nuestra red WiFi.

Ejecutar aplicaciones en C++

Por supuesto, podemos ejecutar aplicaciones compiladas en C++ en el M5Stack Unit V2. Lamentablemente, como hemos comentado, no incorpora ningún compilador por defecto.

Sin embargo, podemos compilar una aplicación desde otro ordenador, como vimos en Cómo cross compilar para ARM desde x86/x65. Después, movemos el fichero al dispositivo, cambiamos los permisos para permitir la ejecución, y ya podremos ejecutar nuestro programa.

Ejecutar aplicaciones en Python

La distro del M5Stack Unit V2 viene con el intérprete de Python preinstalado, así como con la librería de OpenCV. De hecho, es necesario para que funcione Jupyter, que hemos visto anteriormente.

Por tanto, es posible ejecutar scripts de Python directamente en el Unit V2. Aprovecho para recordaros la entrada Nuestro primer programa en Arduino y Cómo usar Arduino y la librería PySerial.

Conclusión

El M5Stick Unit V2 es una auténtica sacada por parte de M5Stack. Es alucinante tener un ordenador completo con Linux en un dispositivo de ese tamaño, y además con una cámara Full HD y salida UART.

Suele decirse de algo “es tan pequeño que cabe en el bolsillo”. Pero en este caso es que caben dos o tres, depende del bolsillo. Es impresionante lo que han conseguido a nivel hardware.

El propósito principal del Unit V2 es la visión artificial y el machine learning. No obstante, incluso sin estos dos componentes, seguiría siendo un producto interesante por si mismo.

El único “pero” es que, y me apena decirlo, esta vez el software y la documentación no están al nivel al que nos tiene acostumbrados M5Stack.

Una auténtica pena, porque con una distro mejor, o pudiendo si el bootloader permitiera arrancar un SO desde la tarjeta, estaríamos ante una de máquinas más interesantes del momento.

Pese a ello, el Unit V2 es una máquina muy interesante para funciones de formación en visión por ordenador y machine learning, o en proyectos domésticos o #maker.

Por ejemplo, podemos pensar en incorporarlo en un robot para seguir lineas o reconocer marcadores, en un brazo robótico para coger una pelota, y otros muchos proyectos que requieren una cámara.