From 649d0979cf15469a6211c70b672443ca7fc49139 Mon Sep 17 00:00:00 2001 From: pgdalmeida Date: Wed, 16 Sep 2026 18:38:11 +0200 Subject: [PATCH] Record the verified install results and the /tmp hardware.ini trap --- docs/tower-installation.md | 44 +++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/docs/tower-installation.md b/docs/tower-installation.md index 25bf403..930a50c 100644 --- a/docs/tower-installation.md +++ b/docs/tower-installation.md @@ -215,6 +215,19 @@ Check the result, especially the serial path: ssh ggs@ 'cat /etc/fire_gimbal_control/hardware.ini' ``` +Then prove the program finds it **with nothing in the environment** - no +`FGC_HARDWARE`, no `--hardware` - because that is how the tower starts itself: + +``` +[INFO ] hardware: /etc/fire_gimbal_control/hardware.ini board lattepanda-iota axes yaw +``` + +> **Do not leave it anywhere under `/tmp`.** That is tempting during bring-up +> because it needs no root, and it works right up until the first reboot, which +> clears `/tmp` and leaves the program with `Config error: Camera.rgb.id is +> required` - a message that points at the camera rather than at the file that +> disappeared. Verified on tower 121 by rebooting it. + > `[Serial] device` must be a `/dev/serial/by-id/` path, never `/dev/ttyACM0`. > Tower 121 has a 5G modem that claims three `ttyUSB` nodes, and enumeration > order is not stable across reboots. @@ -492,6 +505,12 @@ Anything `hardware.ini` now owns - `[Serial] device`, `[IMU]`, `[Env]`, the camera ids - should be **deleted** from `config.ini` rather than left to rot: the program warns at startup about every key set in both. +> **`[Camera.] id` is required even when the camera is disabled.** Config +> validation runs before any of the feature flags are consulted, so a tower with +> no camera fitted yet cannot start without one - and the obvious dummy, +> `DEV_0000000000`, is what `deploy.sh`'s placeholder guard refuses. On a tower +> that has its camera, the id lives in `hardware.ini` and this never comes up. + `[Features] enable_imu` and `enable_env` matter more than they look. Declaring `imu = none` in `hardware.ini` does **not** yet switch them off - deriving them is section 12 of the config plan and is not implemented. On tower 121 the first @@ -656,13 +675,18 @@ gimbal pitch setup # needs an IMU; skip on a rig without one ## 11. Verification checklist -| Check | How | -|---|---| -| Key-only ssh | `ssh ggs@ hostname`, no prompt | -| Preconditions survive a reboot | reboot, then `install.sh --probe`: `usbfs_memory_mb 1000`, `lpm_permit 0` | -| Camera enumerates | `/opt/VimbaX/bin/ListCameras` reports the `DEV_` id in `hardware.ini` | -| Declared hardware matches | startup logs no presence warnings | -| Firmware identity | `gimbal dump` reports the `GIT_REV` you flashed | -| Homing repeatable | `gimbal home` several times, endstop counts within `home_spread_max_counts` | -| Images land | `.jxl` files appear under the configured output dir | -| Survives a disconnect | `scripts/fgc start`, close ssh, reconnect, `scripts/fgc status` | +| Check | How | Tower 121 | +|---|---|---| +| Key-only ssh | `ssh ggs@ hostname`, no prompt | ✅ | +| Preconditions survive a reboot | reboot, then `install.sh --probe`: `usbfs_memory_mb 1000`, `lpm_permit 0` | ✅ confirmed across a real reboot | +| `hardware.ini` found unaided | run with no `FGC_HARDWARE`: startup names `/etc/fire_gimbal_control/hardware.ini` | ✅ | +| Camera enumerates | `ListCameras_VmbC` reports the `DEV_` id in `hardware.ini` | ✅ `DEV_1AB22C0B7D4E` | +| Camera profile applies | startup logs `profile 'standard' applied ... (N settings)` | ✅ 17206 settings | +| Firmware identity | `gimbal dump` reports the `GIT_REV` you flashed | ✅ `build=aab1925-dirty` | +| Driver answers over SPI | boot banner shows `IOIN Y=0x… version=0x30` | ✅ | +| Remote re-flash | `BOOTSEL`, then `./deploy.sh` - no hands on the board | ✅ | +| Declared hardware matches | startup logs no presence warnings | ✅ no shadowed-key warnings | +| Homing repeatable | `gimbal home` several times, endstop counts within `home_spread_max_counts` | ❌ **not attempted** - unknown drivetrain | +| Images land | `.jxl` files appear under the configured output dir | ❌ needs a capture run | +| Survives a disconnect | `scripts/fgc start`, close ssh, reconnect, `scripts/fgc status` | ❌ not attempted | +| Reports to a broker | topics arrive at the configured broker | ❌ no broker on this tower yet |