4.1 KiB
4.1 KiB
Known Issues — Status
This tracks the reproduction blockers and robustness issues identified in the original code and what the refactor did about them.
Resolved
| # | Original issue | Resolution |
|---|---|---|
| 1 | Hardcoded config path (/home/ggs/...) |
Config search order: --config → $FGC_CONFIG → ./config.ini → exe dir → XDG (src/core/Paths.cpp) |
| 2 | Hardcoded image output path | [Paths] output_dir with ~/$ENV expansion + sensible default |
| 3 | Startup scripts with ~/projects/... |
Replaced by path-independent scripts/run.sh + systemd unit |
| 4 | Vimba X required to build | WITH_VIMBA CMake option (default ON); OFF builds a mock-only binary |
| 5 | No hardware path; exits if MQTT down | Mock implementations + runtime toggles; MQTT failure now logs and continues |
| 8 | Plaintext MQTT credentials | $FGC_MQTT_USER/$FGC_MQTT_PW env override; config.ini gitignored |
| 9 | MQTT busy-wait (while(running);) |
Gone — Paho async client + set_automatic_reconnect; no spin thread |
| 10 | parser() missing return |
Old parser removed; parseTelemetryLine returns std::optional cleanly |
| 11 | Fragile Boost.Spirit command grammar | Replaced by parseCommand whitespace tokenizer (src/core/CommandParser.cpp) |
| 12 | Two divergent config.ini files |
Single committed config/config.example.ini; real configs gitignored |
| 6 | Telemetry field order: humidity before temperature | Obsolete — migrated to the current firmware's ST protocol (encoder counts, no environmental fields); humidity/temp/fan are gone |
| 7 | Trigger fires while is_moving == 1 (not when stopped) |
Fixed by the protocol migration — capture is now move → settle → trigger; the camera fires only once both axes report standstill at the target (CaptureScheduler.cpp) |
Also added along the way: a leveled logger, typed/validated config, an SDK-independent core library, and a
doctest unit-test suite (ctest).
Open / needs hardware confirmation
| # | Issue | Status |
|---|---|---|
| 13 | [Motor] degrees↔counts calibration |
The config.example.ini values are placeholders. Calibrate *_counts_per_deg / *_zero_count against real xenc readings after homing on the rig. |
| 14 | Capture sweep untested on hardware | Homing was verified live (see below), but the MOVE → settle → trigger sweep was not run with --start. kSettleTolCounts (600) and the per-interval timing in CaptureScheduler.cpp still need tuning against observed ST behaviour, alongside #13. |
Verification caveats
- Full build verified on the LattePanda: a
WITH_VIMBA=ON WITH_MQTT=ONbuild compiles and links on the device (real Vimba X SDK + Paho fetched). The MQTT wrapper also builds on the dev box (GCC 16 / CMake 4 — seecmake/Paho.cmakefor the toolchain-compat shims). - Serial protocol verified live against real firmware (LattePanda, this session):
ENABLE/HOME/SPEEDreach the firmware, theSTtelemetry parses with zero unparsed lines across a full session, and a live--initdrove a clean re-home of both axes toREADY. Still unverified on hardware: the capture sweep (#14) and real-camera (Vimba) frame capture — earlier tests used--mock-camera. - Makefile parity is moot: the Makefile was removed in favour of CMake, and the full
WITH_VIMBA=ON WITH_MQTT=ONCMake build now runs on the device. - Demo mode copies
bin/x64/Release/test_smoke.jxl, resolved relative to the working directory. Run from a directory where that path exists, or extendImagePipeline::Params::demo_image.
Possible follow-ups (not done)
- Graceful shutdown on SIGINT (currently exit via
exit/Ctrl-D; a pendinggetlinecan delay shutdown). - Make the camera index→label map and JPEG XL defaults fully config-driven.
- Reintroduce optional image upload to the ground station, config-driven (the old hardcoded NFS/SMB upload was removed).