🛠 Vision stéréo : deux caméras CSI sur un CM3
Objectifs
Exploiter l'un des atouts du format Compute Module : deux interfaces CSI simultanées (une 4 voies + une 2 voies) pour une vision stéréo ou multi-caméras sur un seul module. Le CM3 gère les deux caméras via le firmware Pi 3, avec la commande raspistill -n <numéro>. Point critique documenté par l'ingénieur firmware de Raspberry Pi sur le blog de lancement : les modules caméra n'exposent aucun signal de genlock — la synchronisation matérielle est impossible et la dérive entre les deux flux se compte en millisecondes, non corrigeable en matériel.
Matériel
- CM3 sur CMIO3 (les deux connecteurs CSI sont présents sur la carte)
- 2 caméras Raspberry Pi v1/v2 + 2 nappes CSI
- Alimentation solide : deux capteurs + GPU en charge, prévoir une marge sur les 3,5 W de VBAT
Code complet
# 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
Vérification attendue
vcgencmd get_camera renvoie supported=2 detected=2 ; deux JPEG sont produits. Le petit script d'horodatage révèle des écarts de quelques millisecondes entre les deux prises de vue : c'est la dérive attendue, sans genlock. Pour de la stéréo correcte, prévoir une scène statique ou un algorithme de recalage logiciel par corrélation d'images.
Erreurs fréquentes
- Croire à une synchro trame exacte : sans genlock matérielle (absence documentée sur le blog officiel), toute application temps réel strict (véhicules, mesure 3D rapide) doit compenser côté logiciel.
- Brancher les deux caméras sur le même connecteur via un adaptateur : le CM3 n'a pas de multiplexeur CSI, chaque nappe va sur son propre connecteur.
- Surcharger le bus USB 2.0 unique en transférant les deux flux par un adaptateur réseau externe : la bande passante du port unique est le goulot d'étranglement, écrire sur l'eMMC ou réduire la résolution.
detected=1au lieu de 2 : une nappe mal insérée, ou une caméra v2 sur un firmware trop ancien pour ce capteur — mettre à jour Raspberry Pi OS.- Oublier l'ordre des connecteurs : le capteur 0 correspond au CSI 4 voies ; inverser gauche/droite casse le recalage stéréo amont.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash