🛠 Vision stéréo : deux caméras CSI sur un CM3
Objetivos
Aprovechar una de las ventajas del formato Compute Module: dos interfaces CSI simultáneas (una de 4 vías + una de 2 vías) para visión estereoscópica o multicámara en un solo módulo. El CM3 gestiona las dos cámaras mediante el firmware del Pi 3, con el comando raspistill -n <número>. Punto crítico documentado por el ingeniero de firmware de Raspberry Pi en el blog de lanzamiento: los módulos de cámara no exponen ninguna señal de genlock — la sincronización por hardware es imposible y la deriva entre los dos flujos se mide en milisegundos, no corregible por hardware.
Hardware
- CM3 sobre CMIO3 (ambos conectores CSI están presentes en la placa)
- 2 cámaras Raspberry Pi v1/v2 + 2 cintas planas CSI
- Fuente de alimentación sólida: dos sensores + GPU bajo carga, prever un margen sobre los 3,5 W de VBAT
Código completo
# config.txt : activer le support multi-caméras (firmware Pi 3)
sudo tee -a /boot/firmware/config.txt <<'EOF'
start_x=1
camera_auto_detect=1
EOF
sudo reboot
vcgencmd get_camera # attendu : supported=2 detected=2
# Capture sur les deux caméras (capteur 0 = CSI 4 voies, 1 = CSI 2 voies)
raspistill -n 0 -o gauche.jpg -t 500 -w 1280 -h 720 &
raspistill -n 1 -o droite.jpg -t 500 -w 1280 -h 720
wait
# Horodater chaque trame pour mesurer la dérive de synchronisation
python3 - <<'EOF'
import subprocess, time
for n in (0, 1):
t0 = time.time
subprocess.run(['raspistill', '-n', str(n), '-o', 'cam%d.jpg' % n, '-t', '1'])
print('cam%d capture finie a +%.0f ms' % (n, (time.time-t0)*1000))
EOF
Verificación esperada
vcgencmd get_camera devuelve supported=2 detected=2; se generan dos JPEG. El pequeño script de marca de tiempo revela desviaciones de unos pocos milisegundos entre las dos capturas: es la deriva esperada, sin genlock. Para una estereoscopia correcta, prever una escena estática o un algoritmo de recalibración por software mediante correlación de imágenes.
Errores frecuentes
- Creer en una sincronización exacta de fotogramas: sin genlock por hardware (ausencia documentada en el blog oficial), cualquier aplicación de tiempo real estricto (vehículos, medición 3D rápida) debe compensar por software.
- Conectar las dos cámaras al mismo conector mediante un adaptador: el CM3 no tiene un multiplexor CSI, cada cinta plana va a su propio conector.
- Sobrecargar el único bus USB 2.0 transfiriendo los dos flujos mediante un adaptador de red externo: el ancho de banda del puerto único es el cuello de botella, escribir en la eMMC o reducir la resolución.
detected=1en lugar de 2: una cinta plana mal insertada, o una cámara v2 en un firmware demasiado antiguo para este sensor — actualizar Raspberry Pi OS.- Olvidar el orden de los conectores: el sensor 0 corresponde al CSI de 4 vías; invertir izquierda/derecha rompe el recalibrado estereoscópico previo.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash