fwt_software/docs/roadmap.md

65 lines
3.9 KiB
Markdown

# Fire Gimbal Control — Roadmap
Forward-looking plan for the software/firmware. Present-state docs live alongside
this one ([architecture.md](architecture.md), [modules-reference.md](modules-reference.md),
[known-issues.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](test-command.md); tests blocked on not-yet-integrated
components are tracked in [test-roadmap.md](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 **79.8 %
of its 28 KB** (5828 B free, measured 2026-09-23), 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](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](architecture.md#image-capture) and the modes in
[configuration.md](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](test-roadmap.md).