Monograph · 03 · Bluetooth · turntable
Foundations · motion
Bluetooth · turntable
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).
- Compute azimuth/elevation deltas vs current pose
- Send rotation/tilt commands at configured speeds (defaults ~70 rot / ~20 tilt in controller)
- Wait for motion completion (timeout path → still settle)
- Settle sleep (default 2000 ms) so vibration/blur does not hit Snap
- Optional extra capture delay (default 500 ms)
State machine maps RotationComplete → Settling, not immediately Capturing. Mechanical residual motion softens edges and kills photogrammetry features — and neural training inherits blur.
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 · SendCommandsrc/bluetooth/TurntableController.*Higher-level turntable opssrc/bluetooth/BluetoothCommands.hppCommand payloads