Why laser. How it locks.
RF communications are jammed, licensed, and bandwidth-limited. Laser is unjammable, undetectable, and orders of magnitude denser. The only hard problem is pointing — and that is exactly what the PAT system solves.
Three states. One lock.
The pointing, acquisition, and tracking algorithm runs entirely on-module — STM32H7, C++17, zero heap allocation.
Archimedean Spiral Scan
Starting from coarse GPS pointing, the module sweeps an Archimedean spiral pattern — 0.15° step, 2° max radius — at 30 Hz. No prior alignment needed.
- ›GPS coarse estimate within ±2°
- ›Spiral step: 0.15° radial gap per loop
- ›Max scan radius: 2.0°
- ›30 Hz scan rate
Kalman Filter Convergence
When the QPD beacon is detected, a 4-state constant-velocity Kalman filter initialises. PID drives the gimbal toward the filtered estimate. Lock confirmed after 50 consecutive frames within 0.08°.
- ›4-state Kalman (pos + velocity, az + el)
- ›Lock threshold: 0.08°
- ›LOCK_FRAMES: 50 frames
- ›IMU body-rate feed-forward active
Dual-Loop Closed Control
Coarse gimbal handles slow drift (wind, platform motion). FSM fine-corrects high-frequency vibration at 1 kHz. A 5 Hz IIR filter separates the two regimes. 10-step Kalman prediction compensates control loop latency.
- ›Gimbal loop: PID kp=20, ki=1.5, kd=0.8
- ›FSM loop: alpha=0.98, 1 kHz
- ›5 Hz IIR low-pass separates coarse/fine
- ›10-step lookahead prediction
UART framing with CRC-8/MAXIM
Compact packed structs. SPI and shared-memory variants use raw structs directly. Python lct_interface.py mirrors the C headers with size assertions at import.
Numbers that don't lie.
Validated in dual-terminal bilateral Python simulation — wind, 45 Hz vibration, colored turbulence. C++ library matches result within 1%.
| SOLUTION | LOCK TIME | UNIT COST |
|---|---|---|
| Traditional LCT | 10–60 s | €50k–500k |
| RF / Tactical Radio | < 1 s | €2–20k |
| LCT-1 Moduleours | < 3 s | TBD |