ISRO  ·  SIH 2026  ·  PS-26169

BeaconLock

Virtual Camera Tracking for Coarse Alignment
of Mobile FSOC Terminals

A real-time virtual PAT simulator for optical beacon detection, predictive tracking, and closed-loop camera control in mobile FSOC terminals.

Explore the architecture ↓

Precision engineered for optical tracking

Every component of BeaconLock targets a specific challenge in FSOC coarse alignment.

Closed-Loop Tracking

Full synthetic simulation loop: virtual scene → camera → perception → PD control → camera actuation, all in real time.

Sub-Pixel Centroiding

Intensity-weighted Center of Gravity estimation: x = Σ(I·x) / Σ(I). Achieves 2.51 px RMSE on figure-8 trajectories.

6-State Kalman Prediction

Constant-acceleration Kalman filter tracking [x, y, vx, vy, ax, ay]. Confidence-adaptive measurement covariance with occlusion coasting.

Rate-Limited PD Control

Proportional-Derivative controller with strict ±5.0°/s actuator slew clamping and a 0.05° pointing deadband. Prevents gimbal overrun.

Disturbance Simulation

Five atmospheric conditions (Clear, Haze, Fog, Rain, Low Light) and kinematic jitter injection for robust algorithm validation.

Evaluator Video Ingestion

Mode B ingests external MP4/AVI/MKV footage through the FrameSource abstraction. Zero pipeline changes required for real-world footage evaluation.

Coarse alignment is where the link begins.

Mobile FSOC terminals rely on highly directional optical beams. Even small pointing errors can push the remote terminal outside the camera's field of view, breaking the optical link entirely.

Real hardware testing requires expensive pan-tilt mechanisms, calibrated optical equipment, and controlled environments — creating significant cost and iteration barriers for algorithm development.

BeaconLock provides a software-based environment for developing and evaluating coarse tracking algorithms before hardware deployment. The entire test-validate-iterate cycle runs on a standard CPU.

  • Virtual world2000 × 2000 px continuous canvas
  • Viewport640 × 480 px grayscale, FOV 4° × 3°
  • Beacon size5–20 px Gaussian emitter
  • ISRO threshold≥ 20 FPS mandatory
  • Achieved~159 FPS — 700% above threshold

How BeaconLock works

A closed-loop pipeline from scene generation to camera actuation.

01

Virtual Scene

2000×2000 px canvas with atmospheric disturbance injection

→
02

Moving Beacon

Straight, Circular, Figure-8, or Random Walk kinematics

→
03

Virtual Camera

Rate-limited PTZ, 640×480 grayscale viewport, FOV 4°×3°

→
04

Beacon Detection

Adaptive thresholding: I_th = μ_bg + 3·σ_bg on border-annulus estimation

08

PD Camera Control

u = Kp·e + Kd·(de/dt) clamped to ±5°/s with 0.05° deadband

←
07

Kalman Prediction

6-state constant-acceleration filter with confidence-adaptive covariance

←
06

Sub-Pixel CoG

Intensity-weighted centroid in dynamic 64×64 tracking ROI

←
05

5-State FSM

SEARCHING → ACQUIRING → TRACKING → LOST → REACQUIRING

CSV Telemetry + PDF Report

Two modes, one unified pipeline

The FrameSource abstraction decouples the tracking algorithm from the signal source.

MODE A

Synthetic Simulation

BeaconLock generates the entire virtual environment — world canvas, moving beacon, atmospheric disturbances, and virtual camera — and drives the closed-loop pan/tilt response.

Simulation Engine
→
SimulatorSource
→
Tracking Pipeline
  • 4 beacon kinematics
  • 5 atmospheric conditions
  • Jitter ±20 px/frame
  • ~159 FPS
MODE B

Evaluator Video

External MP4, AVI, or MKV footage is ingested through the VideoFileSource adapter. Resolution auto-rescales. Zero changes to the perception or control layers.

Video File
MP4 / AVI / MKV
→
VideoFileSource
→
Tracking Pipeline
  • 30-FPS input stream
  • Auto resolution rescaling
  • 1.430 px tracking RMSE
  • ~129 FPS

4-Tier decoupled architecture

A unidirectional, interface-driven design that completely isolates sensor simulation from perception and control.

TIER 1 — INGESTION
MODE A: SYNTHETIC
simulation/scene.py2000 × 2000 px world
simulation/target.py5–20 px Gaussian beacon
simulation/disturbances.pyFog / Jitter / Rain
simulation/camera.pyRate-limited PTZ camera
MODE B: EVALUATOR
ingestion/frame_source.pyFrameSource ABC
VideoFileSourceOpenCV MP4/AVI stream
Resolution Auto-RescalingAny input size
FrameSource ABC — read() → (ok, ndarray) — 640 × 480 Greyscale
↓
TIER 2 — PERCEPTION
perception/centroid.py
Background thresholdingI_th = μ_bg + 3·σ_bg (border-annulus)
Sub-pixel CoGx_cog = Σ(I·x) / Σ(I)
Adaptive ROIFull-frame ↔ Dynamic 64 × 64
↓
TIER 3 — TRACKING & CONTROL
perception/kalman_tracker.py
State vector[x, y, vx, vy, ax, ay]
Adaptive covarianceR(c) = R_base / max(c, 0.01)
Occlusion coastingKalman propagation during blank
control/pid_controller.py
PD lawu = Kp·e + Kd·(de/dt)
Rate clamp±5.0 °/s actuator envelope
Deadband0.05° pointing convergence
app/state_machine.py
5-state FSMSEARCHING → ACQUIRING
→ TRACKING → LOST
→ REACQUIRING
↓
TIER 4 — TELEMETRY & COCKPIT
ui/dashboard.py — PySide6 / PyQtGraph
Live viewport Pan/Tilt plots Error telemetry 11-col CSV logging Automated PDF report PyQtGraph charts

Measured performance

All values recorded from the verified benchmark registry. No extrapolation.

—
FPS
Full Closed-Loop Simulation
ISRO threshold: ≥ 20 FPS
—
FPS
QThread Worker Throughput
—
FPS
Mode B Video Ingestion
—
px RMSE
Figure-8 Tracking Error
—
px RMSE
Mode B Tracking Error
—
%
Lock Retention
<1.0
s
Initial Acquisition Time
<0.5
s
Re-acquisition Time
—
/ 143
Test Suite — 100% PASS
Benchmarks measured on standard multi-core CPU hardware with zero GPU dependency. Exceeds ISRO's mandatory 20 FPS threshold by over 700%.

Built on proven engineering tools

Runtime

Py
Python 3.13
Core language
CV
OpenCV 5
Image processing & video I/O
np
NumPy 2.2
Numerical computation
Qt
PySide6 / Qt
Telemetry dashboard UI
PG
PyQtGraph
Real-time telemetry plots
PI
PyInstaller
Standalone Windows binary

Core Algorithms

Adaptive Thresholding
I_th = μ_bg + 3·σ_bg
Sub-Pixel Centroiding
x = Σ(I·x) / Σ(I)
6-State Kalman Filter
[x, y, vx, vy, ax, ay]ᵀ
PD Control Law
u = Kp·e + Kd·(de/dt)
5-State FSM
SEARCH → ACQ → TRACK → LOST → REACQ

Ready to run BeaconLock?

Download the standalone Windows build or inspect the full source code. No Python environment, no dependencies, no installation required.

Windows x86-64 Standalone executable ~150 MB No Python required

Fully open source

The complete BeaconLock implementation — source code, architecture documentation, test suite, benchmarking data, and compliance reporting — is available on GitHub.

  • Source code & module structure
  • 143-assertion test suite
  • Benchmark registry & results
  • Automated PDF compliance report
  • Architecture documentation
View Source on GitHub ↗