Neural Capture · Demo: open Demo tour

Monograph · 03 · Bluetooth · turntable

03

Foundations · motion

Bluetooth · turntable

Chapter contract

Owns BLE scan/connect and turntable command path (rotate, tilt, speeds, return-to-zero). Must not own camera Snap (ch.02) or full sequence policy (ch.04). Done when a reader knows settle time exists because mechanical motion is not instantaneous.

Turntable motion is a first-class actor in multi-view capture. The BLE stack discovers devices, connects, and sends high-level commands (SetRotationSpeed, rotate-by-delta, tilt, return-to-zero).

Per position · motion
  1. Compute azimuth/elevation deltas vs current pose
  2. Send rotation/tilt commands at configured speeds (defaults ~70 rot / ~20 tilt in controller)
  3. Wait for motion completion (timeout path → still settle)
  4. Settle sleep (default 2000 ms) so vibration/blur does not hit Snap
  5. Optional extra capture delay (default 500 ms)
Why settle after RotationComplete

State machine maps RotationComplete → Settling, not immediately Capturing. Mechanical residual motion softens edges and kills photogrammetry features — and neural training inherits blur.

Decision

Return-to-zero before and after sequence

Worker thread zeros turntable at start and end so sessions share a consistent origin even if operators interrupt mid-run.

Code: AutomatedCaptureController::WorkerThreadFunction

src/bluetooth/BluetoothManager.*Scan · connect · SendCommand
src/bluetooth/TurntableController.*Higher-level turntable ops
src/bluetooth/BluetoothCommands.hppCommand payloads