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 RotationCompleteSettling, 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