Le robot MR25 est équipé d’une carte Raspberry Pi 5 disposant de deux connecteurs dédiés aux caméras. Il est donc possible d’utiliser simultanément deux caméras sur le robot.
Ce tutoriel présente les étapes nécessaires pour configurer et utiliser deux caméras avec le robot MR25, ainsi que la réalisation de captures d’images avec chacune d’elles.
Détecter les 2 cameras
Listez les cameras avec cette commande :
$ rpicam-hello --list-cameras
Vous devez voir la détection des 2 cameras :
Prendre une photo avec les 2 cameras
Voici un exemple de la prise d’une photo sur chaque cameras :
#!/usr/bin/env python3
# Import de la bibliothèque Picamera2 pour contrôler les caméras Raspberry Pi from picamera2 import Picamera2
# Fonction permettant de mettre le programme en pause from time import sleep
# Permet de récupérer la date et l'heure actuelles from datetime import datetime
# Permet de gérer facilement les chemins et dossiers from pathlib import Path
# ============================================================ # DOSSIER DE SAUVEGARDE # ============================================================
# Création du dossier "photos" s'il n'existe pas déjà output_dir = Path("photos") output_dir.mkdir(exist_ok=True)
# Création d'un horodatage commun aux deux photos # Format : AAAAMMJJ_HHMMSS # Exemple : 20260918_112530 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
# Création de l'objet correspondant à la caméra 0 cam0 = Picamera2(0)
# Création de la configuration pour une photo fixe # # Résolution utilisée : # 4608 x 2592 pixels # # Cette résolution correspond à la résolution souhaitée # pour la caméra 0. config0 = cam0.create_still_configuration( main={"size": (4608, 2592)} )
# Application de la configuration à la caméra cam0.configure(config0)
# Démarrage de la caméra cam0.start()
# Petite attente afin de laisser la caméra s'initialiser # et stabiliser l'image avant la capture. sleep(2)
# Création du nom du fichier de sortie # # Exemple : # photos/camera0_20260918_112530.jpg file0 = output_dir / f"camera0_{timestamp}.jpg"
# Affichage dans le terminal du fichier qui va être créé print(f"Capture caméra 0 : {file0}")
# Capture d'une photo et sauvegarde directement au format JPEG cam0.capture_file(str(file0))
# Arrêt de la caméra 0 cam0.stop()
# Libération complète des ressources utilisées par la caméra 0 # # Cette étape est particulièrement importante ici : # elle permet de libérer les buffers mémoire DMA avant # de configurer la deuxième caméra. cam0.close()
# Création de l'objet correspondant à la caméra 1 cam1 = Picamera2(1)
# Création de la configuration pour une photo fixe # # Résolution utilisée : # 3280 x 2464 pixels # # Cette résolution correspond à la résolution souhaitée # pour la caméra 1. config1 = cam1.create_still_configuration( main={"size": (3280, 2464)} )
# Application de la configuration à la caméra cam1.configure(config1)
# Démarrage de la caméra cam1.start()
# Petite attente afin de laisser la caméra s'initialiser # et stabiliser l'image avant la capture. sleep(2)
# Création du nom du fichier de sortie # # Exemple : # photos/camera1_20260918_112530.jpg file1 = output_dir / f"camera1_{timestamp}.jpg"
# Affichage dans le terminal du fichier qui va être créé print(f"Capture caméra 1 : {file1}")
# Capture d'une photo et sauvegarde directement au format JPEG cam1.capture_file(str(file1))
# Arrêt de la caméra 1 cam1.stop()
# Libération complète des ressources utilisées par la caméra 1 cam1.close()
# ============================================================ # FIN DU PROGRAMME # ============================================================
# Message indiquant que les deux captures sont terminées print("Captures terminées.")
On souhaite programmer le robot MR25 afin de contrôler ces mouvements via la détection des frappements de main :
👏 => Le robot MR25 avance
👏👏 => Le robot MR25 tourne à gauche
👏👏👏 => Le robot MR25 tourne à droite
👏👏👏👏 => Le robot MR25 s’arrête
Le microphone détecte les frappements en analysant le niveau sonore.
Algorithme
Voici un exemple de programme pour contrôler le robot avec le frappement de main :
import subprocess # permet de lancer le programme arecord pour récupérer le son du microphone. import numpy as np # permet de traiter les données audio et de calculer le RMS. import MR25 import time
# Évite de compter plusieurs fois la même frappe if maintenant - derniere_frappe > DEBOUNCE_TIME:
nombre_frappes += 1 derniere_frappe = maintenant
print(f"\n>>> Frappe {nombre_frappes}")
# Si le délai entre les frappes est dépassé, # on analyse le nombre de frappes if ( nombre_frappes > 0 and maintenant - derniere_frappe > GROUP_TIMEOUT ):