StereoPi: nuestra pieza de hardware para estudiar visión artificial, drones y robots

Hola a todos!

Hoy me gustaría contarles acerca de nuestra nueva pieza de hardware basada en el módulo de cómputo Raspberry Pi, diseñado para estudiar la visión por computadora e instalar en robots y drones. De hecho, esta es una cámara estéreo "inteligente": admite trabajar con dos cámaras al mismo tiempo, tiene frambuesas reales como un "corazón" y, lo más importante, funciona con la versión estándar de Raspbian.
Así es como se ve la solución ensamblada, con dos cámaras instaladas y un módulo Pi Compute.

imagen

El dispositivo funciona con la versión estándar de Raspbian. Solo necesita copiar nuestro archivo dtblob.bin para habilitar el soporte de doble cámara.

Esto significa que puede usar las habituales raspivid, raspistill y otras utilidades para trabajar con imágenes y videos.

Como referencia, el soporte para el modo estéreo apareció en Raspbian ya en 2014, simultáneamente con el lanzamiento de la primera versión de Raspberry Pi Compute. Puede ver la historia del desarrollo de soporte estéreo en el foro Raspberry.

Antes de describir los detalles técnicos, permítame mostrarle algunos ejemplos reales del funcionamiento del dispositivo.

1. Captura de imagen


Código:

raspistill -3d sbs -w 1280 -h 480 -o 1.jpg 

y obtienes lo siguiente:

imagen

Puede descargar la imagen original capturada aquí .

2. Captura de video


Código:

 raspivid -3d sbs -w 1280 -h 480 -o 1.h264 

y obtienes lo siguiente:

imagen

Puede descargar el archivo de video original (convertido a mp4) desde este enlace .

3. Usando Python y OpenCV para construir un mapa de profundidad


imagen

En este caso, utilicé un código ligeramente modificado de un proyecto 3Dberry anterior ( https://github.com/realizator/3dberry-turorial ).

Para obtener estas fotos y videos, utilizamos este par de cámaras:

imagen

Para la instalación en drones, a menudo utilizamos gran angular (160 grados), estos son:

imagen

Ahora un poco más sobre la pieza de hierro en sí




Detalles técnicos


Vista frontal:

imagen

Vista superior:

imagen

Características clave
Dimensiones: 90x40 mm.
Cámaras: 2 x cable CSI de 15 carriles
GPIO: 40 clásicos Raspberry PI GPIO
USB: 2 x USB tipo A, 1 USB en un pin
Ethernet: RJ45
Memoria: Micro SD (para CM3 Lite), para el resto NAND (flash)
Monitor: salida HDMI
Fuente de alimentación: 5V DC
Frambuesas compatibles: Módulo de cómputo Raspberry Pi 3, Raspberry Pi CM 3 Lite, Raspberry Pi CM 1
Tipos de cámaras compatibles: cámara Raspberry Pi OV5647, cámara Raspberry Pi Sony IMX 219, entrada HDMI (modo único)
Para firmware NAND: conector MicroUSB
Interruptor de encendido: sí, sí, eso es todo. ¡No más enchufes MicroUSB para reiniciar la alimentación!

Un poco de historia


En general, la idea en sí apareció en 2015. La primera versión nació a finales de 2015. Algunas personas saben que nuestro equipo tiene una "moda" en el control remoto de varios artilugios mecánicos, por lo que en la primera versión se instaló un chip adicional a bordo, que nos dio 16 salidas PWM, para dirección, motores y otras cosas útiles.

imagen

En ese momento, solo había la primera versión del módulo Compute en el mercado, a bordo, que era un procesador antiguo de la primera frambuesa. La pieza de hierro hizo un gran trabajo al capturar, comprimir y transmitir video, pero al final nos encontramos con el procesador. Por ejemplo, ya no era suficiente para una transmisión h264 a un piloto y una transmisión RTMP a un servidor al mismo tiempo. Y para los constructores de robots, el deseo principal era construir un mapa espacial usando un mapa de profundidad y SLAM, aquí el procesador carecía por completo.

imagen

Aquí tiene la versión de Compute Module 3. Salieron inmediatamente de la primera versión a la tercera, colocando el procesador de la tercera Raspberry. Ahora su poder ya era suficiente para calcular algo sobre la marcha.

Sin embargo, resultó que las generaciones parecen ser compatibles, pero parece que no son muy compatibles. El hecho de que Compute Module 3 fuera un milímetro más ancho no nos molestó. Pero los requerimientos nutricionales han cambiado seriamente.

Además, ya hemos acumulado comentarios sobre los resultados de trabajar con la primera versión, y decidimos lanzar una nueva, en la que hicimos todos los cambios acumulados.

Lo que se arregla en la segunda generación


Soporte agregado para Compute Module 3

Tenemos un esquema de energía conmutable, por lo que si lo desea, puede trabajar con la primera frambuesa. La elección aquí es simple: si solo necesita transmitir el video, la primera frambuesa es perfectamente suficiente. Como beneficio adicional, viene con casi tres veces menos consumo de energía y disipación de calor. Y necesita calcular algo más serio (unos pocos videos o visión por computadora) - ponga el tercero.

Módulo desplegado "chips de la placa"

En la primera versión, el tipo de conector SoDIMM en la placa se mezcló, como resultado, el módulo de la computadora se levantó con chips "a la madre". En el Módulo de cómputo 1, esto no causó problemas: el porcentaje se estaba calentando ligeramente y tenía suficiente cuello de botella entre las placas para un enfriamiento normal. Con un tercero, tal truco no hubiera rodado, por lo que "giramos" el conector, lo que implicaba volver a cablear toda la placa desde cero.

Soporte nativo de microSD

El primer módulo de computadora por defecto tenía un FLASH incorporado a bordo y no podía funcionar con microsd. Intentamos agregar MicroSD allí como una segunda unidad, pero nos topamos con un gran golpe para admitirlo. La comunicación con los trabajadores del kernel en un foro de frambuesa mostró que el problema no es fácil (al cargar, el módulo eligió aleatoriamente NAND o MicroSD para el arranque). Como resultado, en la revisión actual realizamos el cableado como en el devboard de frambuesa de referencia. Si Compute Module Lite , sin NAND incorporado, trabajamos con microsd como en las frambuesas comunes. Si la versión no es Lite o el primer módulo, el microsd no está disponible.

Mueva los conectores de la cámara hacia arriba y espaciados 65 mm

En la primera versión, los conectores se dirigían a lo largo del plano de la placa. Un poco, pero después de muchas instalaciones en el caso, varios problemas quedaron claros.

  • Un bucle de una cámara sobresale de los conectores, lo que es aconsejable no doblar (especialmente la parte azul reforzada). Esto estúpidamente tomó espacio innecesario en el caso y evitó la instalación.
  • Los conectores estaban muy cerca, esto impedía trabajar con cables.
  • Las cámaras en el estuche generalmente se encuentran en una base estéreo de 65 mm, y los cables en el tablero estaban cerca. Resulta que cada bucle tenía que estar doblado de forma antinatural: roturas, rasgaduras, saltos de los conectores.

Se eliminó el chip y 16 PWM adicionales

Después de analizar muchos proyectos recientes, nos dimos cuenta de que esta característica es irrelevante. Muy a menudo, el software Raspberries PWM es suficiente.

Interruptor de encendido agregado

Aquellos que al menos trabajaron un poco con las frambuesas entienden de qué se trata :-)

Se agregó un tercer USB en los pines en el costado

En nuestros proyectos de frambuesa, a menudo necesitamos dongles USB a bordo. Si están atascados en los conectores de la placa, tenemos un módulo pegado hacia afuera. Intentar usar un cable de extensión USB agrava el problema. Solo había una opción: soldar el cableado directamente a las frambuesas. Los pines laterales que agregamos nos permiten hacer un cable de extensión simple y colocar un dongle USB (generalmente WiFi o 4G) directamente a lo largo de la placa, y toda esta economía cabe perfectamente en un estuche compacto.

Aquí hay una historia que quería contarte hoy. Gracias por su atención y estoy listo para responder preguntas.

Source: https://habr.com/ru/post/es415587/


All Articles