Ce mode est conçu pour les configurations n’utilisant pas de signal d’horloge externe.Vous utiliserez une caméra en mode leader (émettant un signal de synchronisation) et toutes les autres caméras en mode follower.
Guide du firmware Leader/Follower
Cliquez ici pour consulter notre guide sur la mise à jour de votre caméra entre les modes Leader et Follower.
Ce mode est conçu pour les configurations utilisant un signal d’horloge externe afin de fournir le signal de synchronisation à toutes les caméras.Dans ce mode, toutes les caméras doivent être réglées en mode follower.
Guide du firmware Leader/Follower
Cliquez ici pour consulter notre guide sur la mise à jour de votre caméra entre les modes Leader et Follower.
L’Arduino Uno (ATmega328P) est actuellement la seule carte confirmée fonctionnant pour cette configuration.
1
Téléchargez la bibliothèque PWM
Téléchargez le code source de la bibliothèque PWM ici : ArduinoPWM v1.0.0
2
Ajoutez la bibliothèque .ZIP
Importez la bibliothèque .ZIP téléchargée dans votre IDE Arduino.
3
Téléversez le sketch
Téléversez l’un des deux sketches ci-dessous sur votre Arduino.
Contrôle simple : le moyen le plus rapide pour démarrer, mais nécessite de reprogrammer le firmware pour ajuster vos FPS.
Contrôle série : vous permet d’ajuster la fréquence et le rapport cyclique en temps réel sans reprogrammer (les paramètres seront réinitialisés si l’appareil perd l’alimentation).
Contrôle simple
Commandes série
#include <PWM.h>// Pin configurationint pin = 9; // Pinint value = 127; // Initial value for the PWM duty cycle// SET FREQUENCY HEREfloat frequency = 60; // Initial frequency in Hzvoid setup(){ // Initialize all timers except for timer0 to save timekeeping tasks InitTimersSafe(); // Set the initial PWM frequency and duty cycle if (SetPinFrequencySafe(pin, frequency)) { pwmWrite(pin, value); Serial.println("PWM frequency and initial duty cycle set."); } else { Serial.println("Failed to set frequency."); }}
#include <PWM.h>// Pin configurationint pin = 9; // Pinint value = 127; // Initial value for the PWM duty cyclefloat frequency = 60; // Initial frequency in Hzvoid setup(){ Serial.begin(9600); // Initialize all timers except for timer0 to save timekeeping tasks InitTimersSafe(); // Set the initial PWM frequency and duty cycle if (SetPinFrequencySafe(pin, frequency)) { pwmWrite(pin, value); Serial.println("PWM frequency and initial duty cycle set."); } else { Serial.println("Failed to set frequency."); }}void loop(){ if (Serial.available()) { // Read frequency and duty cycle values over Serial String inputString = Serial.readStringUntil('\n'); inputString.trim(); int freqDutySplitIndex = inputString.indexOf(','); if (freqDutySplitIndex != -1) { String freqStr = inputString.substring(0, freqDutySplitIndex); String dutyStr = inputString.substring(freqDutySplitIndex + 1); // Parse floats float newFrequency = freqStr.toFloat(); int newDutyCycle = dutyStr.toInt(); // Validate frequency range if (newFrequency >= 1 && newFrequency <= 2000000) { // Set the PWM frequency and apply duty cycle if (SetPinFrequencySafe(pin, newFrequency)) { value = map(constrain(newDutyCycle, 0, 100), 0, 100, 0, 255); pwmWrite(pin, value); Serial.print("Set frequency to: "); Serial.print(newFrequency); Serial.print(" Hz, duty cycle to: "); Serial.print(newDutyCycle); Serial.println("%"); } else { Serial.println("Failed to set new frequency."); } } else { Serial.println("Invalid frequency value."); } } else { Serial.println("Invalid input format. Use frequency,dutycycle (e.g., 60,50)."); } }}
Ce code vous permet de modifier le signal PWM à la volée. Ouvrez votre moniteur série à 9600 bauds et envoyez des commandes au format {FREQUENCE},{RAPPORT_CYCLIQUE} (par exemple, 60,50 pour 60 Hz avec un rapport cyclique de 50%).
En complément de notre SDK à venir, nous proposons actuellement un simple processus Python pour récupérer des images synchronisées depuis vos configurations de caméras. (Remarque : cela pourrait être progressivement abandonné au profit du SDK complet à l’avenir.)
Bibliothèque Python de vidéo synchronisée
Suivez notre guide GitHub pour installer et utiliser notre bibliothèque Python personnalisée pour Linux.
Cette section présente l’utilisation de GStreamer pour synchroniser et assembler deux flux vidéo.
Ensuite, la création d’un périphérique virtuel à utiliser dans d’autres programmes.
Linux
1
Installez les packages requis
Installez les dépendances nécessaires avec la commande suivante :
Identifiez les ID de périphérique des deux caméras que vous souhaitez utiliser, puis sélectionnez un numéro d’ID qui n’est pas déjà listé.Dans cet exemple, nous utiliserons 9 (puisqu’il n’est pas utilisé ci-dessus) pour créer un périphérique virtuel nommé stellarHD_stitched. Mettez à jour le 9 dans la commande ci-dessous pour correspondre à votre ID non utilisé :
Vous devez garder cette commande en cours d’exécution pendant l’utilisation des vidéos synchronisées et assemblées. Vous pouvez modifier cette commande pour ajouter d’autres caméras, changer les résolutions/fréquences d’images ou modifier la disposition.
5
Utilisez le périphérique virtuel dans OpenCV
Code de démarrage OpenCV
Suivez notre exemple de code pour utiliser /dev/video9 dans OpenCV.
6
Supprimez le périphérique loopback
Pour supprimer en toute sécurité le périphérique loopback, vous pouvez soit redémarrer votre ordinateur, soit exécuter la séquence de commandes suivante :1. Identifiez les programmes utilisant actuellement le périphérique loopback :
sudo lsof /dev/video*
2. Tuez les processus à l’aide de leur numéro de PID (Process ID) :