fwt_software/docs/roadmap.md

4.0 KiB

Fire Gimbal Control — Roadmap

Forward-looking plan for the software/firmware. Present-state docs live alongside this one (architecture.md, modules-reference.md, known-issues.md, …); this file records intent, not status. Keep entries dated; move shipped items into the reference docs.

Near-term / in progress

  • Hardware self-test framework (test command). Modular on-rig validation with profiles, on-disk text reports, and baseline/drift comparison — replaces gimbal diag. Covers gimbal (homing, encoder, friction, backlash, balance), IMU (config, health, drift), and host/LattePanda (thermal, disk, memory, load). See test-command.md; tests blocked on not-yet-integrated components are tracked in test-roadmap.md.
    • Firmware support (next): a homing-report HM line (firmware-measured homing duration + endstop counts) and a load-capture LP primitive (peak/mean CS, SG, PWM during a move) so the friction/balance/homing-time metrics come off the firmware clock instead of host ST sampling; plus a PING/PONG link-health command for test system link.
    • ⚠️ This collides with AVR flash headroom. Three new commands are the kind of growth the ATmega32U4 no longer has room for — it sits at 80.1 % of its 28 KB (5712 B free, measured 2026-09-24 after the pin echo added 84 B; 79.8 % before it), up from 19254 B at the phase 2 gate. The RP2040 is a non-issue at 0.6 % of 8 MB. So either these land RP2040-only behind the platform_*.h split, or the Delta fleet gets a deliberate answer on flash first — PROGMEM for the string tables, dropping a command, or accepting that the Delta is feature-frozen. Note §14 of the config plan cost 222 B rather than freeing any, so the obvious saving has already been spent. See hardware-porting-plan.md.

Planned components & integrations

  • MQTT → RabbitMQ migration. Move the control/telemetry channel onto the project's RabbitMQ stack. Decision pending between (a) RabbitMQ's MQTT plugin (near-zero firmware change, keeps QoS/retain/reconnect) and (b) native AMQP via a new IControlChannel implementation (richer routing/durable queues, but must re-engineer retained "last value" semantics). The abstraction seam already exists (IControlChannel). (TODO: confirm approach, target release.)
  • RGB camera. Largely landed. The Alvium 1800 U-2040c runs end-to-end on the rig (free-running acquire → settle wait → JXL → CamEvent), so the camera/rgb self-test is no longer blocked on integration. What remains is confirming the shipped standard/night modes against a real scene, and that 10 Hz sustains with zero dropped frames on the LattePanda. The capture logic is described in architecture.md and the modes in configuration.md.
  • A dusk/dawn mode, and automatic switching. standard and night are chosen by hand (set camera profile <name>). A third profile for the transition, and a rule to pick between them — by clock, sun angle, or measured scene brightness — is the obvious follow-on. (TODO: decide the trigger.)
  • Thermal camera. Add the thermal sensor with radiometric handling (NUC, temperature range); enables the camera/thermal self-test. (TODO: model/SDK, calibration workflow.)

Cross-cutting / later

  • Supply-voltage telemetry (bus-voltage sense → firmware) to enable gimbal/supply and brown-out detection. (TODO: hardware path.)
  • Generic, multi-tower deployment. Continue removing site-specific assumptions (tower identity is already config-driven). (TODO.)
  • Stubs to expand: long-term storage/offload, remote update, observability/metrics, security hardening.

Detailed, implementer-ready specs for tests blocked on the above hardware live in test-roadmap.md.