03 — Writing
Notes from
the work.
Short, technical, honest. What building autonomy actually teaches you — about perception, estimation, latency, and refusing to lie when the machine can’t see.
- Perception
The 71 transposes that were one operation
How a feature matcher that refused to compile for a neural accelerator turned out to be a single idea wearing 71 masks — and why proving the fix was exact mattered more than the 23× speedup.
- Reliability
A capability is only real if the path to it is
The most expensive defect I keep meeting: a feature that is written, reviewed, tested — and never runs, because nothing that runs calls it. A note on reachability as a design constraint.
- Measure
The canary that was already dead
Quantising a model to INT8 is supposed to cost accuracy. The question is never “does it cost some” — it is “does it push a passing case under the bar.” A note on measuring the right thing.
- Perception
Turning a camera into a velocity sensor
No DVL, no GPS. A downward camera and the ground can tell you how fast you are moving — if you trust the geometry more than the number.
- First principles
Why radar doesn’t work underwater — and what that forces
Salt water eats radio in centimetres. No radio means no GPS, no radar, no telemetry link when submerged. Every design choice downstream is a consequence.
- Perception
The frame-age problem
A perception pipeline that looks healthy can be acting on a frame that is 400 ms old. Freshness is a feature you have to build.
- Reliability
From “worked once” to “works every time”
The gap between a demo and a competition run is the difference between a capability existing and a capability being reachable.
- Estimation
Low-cost VIO and the DVL question
When you can’t buy the sensor, you have to earn its measurement from the ones you have. A note on fusing depth, flow and heading honestly.
- Perception
Tracking without detection
Detectors blink. A lock has to survive the gap between two sightings without inventing a target that isn’t there.
- Perception
The bank that ran the backbone five times
Chasing a matcher bottleneck turned up a defect worth more than the optimisation I went looking for — a per-match cost that barely moved with `top_k`, which is the tell that something else is the real cost.
- Measure
Round 7 closes NO — twice
A fine-tune that scored a clean win on every checkpoint turned out to be scored by the wrong instrument. Retracting it once wasn't enough — the second retraction is the one that actually holds.
- Perception
179 identity switches, and why the SOTA fix costs too much
A diagnostic reported "id switches: 0" for months. It was a clean-looking zero produced by a tool measuring nothing — and the real number, once measured, explained why a bigger tracker wasn't the answer.
- Perception
The anchor that learned to take a second photograph
A recognition reference frozen once looked like it was hitting a hard limit on murky footage. It wasn't the descriptor's ceiling — it was the cost of never re-photographing the thing you're trying to recognise.
- Estimation
Scoring an estimator against a truth that didn't exist yet
Twenty-one tests and every one of them a unit test — because until a physics plant existed to drive against, there was no ground truth to measure drift against. Building the truth was the actual work.
- Estimation
A tighter measurement made the bug worse, not better
Characterising exactly when a localization fix should fire turned into retracting my own conclusion from the previous commit — and finding a clean square-root law hiding in the retraction.
- Control
The sign flip that nearly sent it to +20 meters
Closing the depth loop for the first time surfaced the largest standing unknown in the project — and a boundary where two correct conventions, read together, meant the opposite of either alone.
- Estimation
What thirty minutes of sitting still taught us about the IMU
A vehicle at rest is the only condition outside water where the true state is known exactly. Using that fact properly meant verifying the rest itself, not just trusting the clock.
- Reliability
Killing a process tree the launcher wouldn't forward signals to
Stopping the vehicle's software stack cleanly looked solved twice, on real hardware, and was wrong both times. A real test — not another hardware run — is what finally found the actual bug.
- First principles
Nobody had asked what the camera's own automatic loops were doing
Every measurement this stack makes is computed on pixels — and every camera has automatic loops silently editing those pixels before any of them run. Reading the camera's own settings answered a question nobody had asked yet.