Este modo está diseñado para configuraciones que no utilizan una señal de reloj externa.Utilizarás una cámara en modo leader (emitiendo una señal de sincronización) y todas las cámaras restantes en modo follower.
Guía de firmware Leader/Follower
Haz clic aquí para consultar nuestra guía sobre cómo actualizar tu cámara entre los modos Leader y Follower.
Este modo está diseñado para configuraciones que utilizan una señal de reloj externa para emitir la señal de sincronización a todas las cámaras.En este modo, todas las cámaras deben estar configuradas en modo follower.
Guía de firmware Leader/Follower
Haz clic aquí para consultar nuestra guía sobre cómo actualizar tu cámara entre los modos Leader y Follower.
La Arduino Uno (ATmega328P) es actualmente la única placa confirmada que funciona con esta configuración.
1
Descarga la biblioteca PWM
Descarga el código fuente de la biblioteca PWM aquí: ArduinoPWM v1.0.0
2
Añade la biblioteca .ZIP
Importa la biblioteca .ZIP descargada en tu Arduino IDE.
3
Sube el sketch
Sube uno de los dos sketches siguientes a tu Arduino.
Control simple: la forma más rápida de comenzar, pero requiere volver a flashear el firmware para ajustar tus FPS.
Control por serial: te permite ajustar la frecuencia y el ciclo de trabajo en tiempo real sin volver a flashear (los ajustes se restablecerán si el dispositivo pierde alimentación).
Control simple
Comandos por serial
#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)."); } }}
Este código te permite modificar la señal PWM sobre la marcha. Abre tu monitor serial a 9600 baudios y envía comandos con el formato {FRECUENCIA},{CICLO_DE_TRABAJO} (por ejemplo, 60,50 para 60 Hz con un ciclo de trabajo del 50%).
Biblioteca de video sincronizado en Python (Linux)
Además de nuestro próximo SDK, actualmente proporcionamos un proceso sencillo en Python para obtener fotogramas sincronizados desde tus configuraciones de cámara. (Nota: esto podría eliminarse en favor del SDK completo en el futuro.)
Biblioteca de video sincronizado en Python
Sigue nuestra guía en GitHub para instalar y usar nuestra biblioteca personalizada de Python para Linux.
Identifica los IDs de dispositivo de las dos cámaras que quieres usar y selecciona un número de ID de dispositivo que no aparezca actualmente en la lista.En este ejemplo, usaremos 9 (ya que no está en uso arriba) para crear un dispositivo virtual llamado stellarHD_stitched. Actualiza el 9 en el comando siguiente para que coincida con tu ID sin usar elegido:
Debes mantener este comando en ejecución mientras utilices los videos unidos y sincronizados. Puedes modificar este comando para añadir más cámaras, cambiar resoluciones/frecuencias de imagen o modificar el diseño.
5
Usa el dispositivo virtual en OpenCV
Código de inicio de OpenCV
Sigue nuestro código de ejemplo para usar /dev/video9 en OpenCV.
6
Elimina el dispositivo loopback
Para eliminar de forma segura el dispositivo loopback, puedes reiniciar tu computadora o ejecutar la siguiente secuencia de comandos:1. Identifica los programas que actualmente usan el dispositivo loopback:
sudo lsof /dev/video*
2. Termina los procesos usando sus números PID (Process ID):