Dieser Modus ist für Konfigurationen konzipiert, die kein externes Taktsignal verwenden.Sie verwenden eine Kamera im leader-Modus (die ein Synchronisationssignal ausgibt) und alle übrigen Kameras im follower-Modus.
Firmware-Anleitung Leader/Follower
Klicken Sie hier für unsere Anleitung zum Umschalten Ihrer Kamera zwischen Leader- und Follower-Modus.
Dieser Modus ist für Konfigurationen konzipiert, die ein externes Taktsignal verwenden, um das Synchronisationssignal für alle Kameras auszugeben.In diesem Modus müssen alle Kameras auf den follower-Modus eingestellt sein.
Firmware-Anleitung Leader/Follower
Klicken Sie hier für unsere Anleitung zum Umschalten Ihrer Kamera zwischen Leader- und Follower-Modus.
Das Arduino Uno (ATmega328P) ist derzeit das einzige bestätigt funktionierende Board für diese Konfiguration.
1
PWM-Bibliothek herunterladen
Laden Sie den Quellcode der PWM-Bibliothek hier herunter: ArduinoPWM v1.0.0
2
Die .ZIP-Bibliothek hinzufügen
Importieren Sie die heruntergeladene .ZIP-Bibliothek in Ihre Arduino IDE.
3
Sketch hochladen
Laden Sie einen der beiden folgenden Sketche auf Ihren Arduino hoch.
Einfache Steuerung: Der schnellste Einstieg, erfordert jedoch ein erneutes Flashen der Firmware, um die FPS anzupassen.
Serielle Steuerung: Ermöglicht es Ihnen, Frequenz und Tastverhältnis in Echtzeit ohne erneutes Flashen anzupassen (die Einstellungen werden zurückgesetzt, wenn das Gerät die Stromversorgung verliert).
Einfache Steuerung
Serielle Befehle
#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)."); } }}
Mit diesem Code können Sie das PWM-Signal im laufenden Betrieb ändern. Öffnen Sie Ihren seriellen Monitor mit 9600 Baud und senden Sie Befehle im Format {FREQUENZ},{TASTVERHÄLTNIS} (z. B. 60,50 für 60 Hz bei 50 % Tastverhältnis).
Python-Bibliothek für synchronisierte Videos (Linux)
Zusätzlich zu unserem kommenden SDK bieten wir derzeit einen einfachen Python-Prozess an, um synchronisierte Frames aus Ihren Kamera-Setups abzurufen. (Hinweis: Dies wird in Zukunft möglicherweise zugunsten des vollständigen SDK eingestellt.)
Python-Bibliothek für synchronisierte Videos
Folgen Sie unserer GitHub-Anleitung, um unsere benutzerdefinierte Linux-Python-Bibliothek zu installieren und zu verwenden.
Dieser Abschnitt behandelt die Verwendung von GStreamer, um zwei Videostreams zu synchronisieren und zusammenzufügen. Anschließend wird ein virtuelles Gerät erstellt, das in anderen Programmen verwendet werden kann.
Linux
1
Erforderliche Pakete installieren
Installieren Sie die erforderlichen Abhängigkeiten mit dem folgenden Befehl:
Identifizieren Sie die Geräte-IDs der beiden Kameras, die Sie verwenden möchten, und wählen Sie eine Geräte-ID-Nummer aus, die derzeit nicht aufgeführt ist.In diesem Beispiel verwenden wir 9 (da sie oben nicht verwendet wird), um ein virtuelles Gerät namens stellarHD_stitched zu erstellen. Passen Sie die 9 im folgenden Befehl an Ihre gewählte, nicht verwendete ID an:
Sie müssen diesen Befehl während der Nutzung der synchronisierten, zusammengefügten Videos laufen lassen. Sie können den Befehl anpassen, um weitere Kameras hinzuzufügen, Auflösungen/Bildraten zu ändern oder das Layout zu verändern.
5
Das virtuelle Gerät in OpenCV verwenden
OpenCV-Startcode
Folgen Sie unserem Beispielcode, um /dev/video9 in OpenCV zu verwenden.
6
Loopback-Gerät entfernen
Um das Loopback-Gerät sicher zu entfernen, können Sie entweder Ihren Computer neu starten oder die folgende Befehlsfolge ausführen:1. Programme identifizieren, die derzeit das Loopback-Gerät verwenden:
sudo lsof /dev/video*
2. Die Prozesse mit ihren PID-Nummern (Prozess-ID) beenden: