Repository navigation
Bench-ready measured-input chain, radio packet format, and overnight side runs - #7
Merged
Merged
Conversation
…registry entry after a clean replay
…ontrol against the registered long check
…ned S6 rerun The options read the vision fit (per_axis.std_m, sensor_config.bias_m and its dropout settings) and map camera axes onto world axes with --axis-map. The shaped path reuses sim/sensor.py with the registered sensor seed and sim/s6_recovery.deliver for the link, so equal per-axis noise, zero bias and zero dropout give the registered packets exactly. With every option off the outputs are unchanged.
… (process pools fail from detached shells on Windows)
tools/preflight_bench_data.py reads a bench folder and fails, with a one-line reason and fix, on anything the intake would refuse or that would give misleading numbers: unreadable or unprovenanced logs, low detection rate, truth that disagrees with the file name or the camera, sidecar and calibration sha256 mismatches, frame size mismatches, mixed statuses or sessions, colliding names and an unusable intake output folder. It reuses the intake's own readers and checks.
… and loss 0.9, with an exact control against the registered rows
…vel were flown or reused
GroundPlane clamps the body at the floor after each RK4 step, records the in-step crossing speed, and flags touchdowns above a placeholder 2.0 m/s. SixDOFInterceptor and ActuatedQuadrotor take ground=None by default, so the default path is unchanged (saved 77be94f history hashes still match).
…erturbed control and burst-row exclusion
The fit now adds WARNING lines to its assumptions for dropped frames, duplicate or backward capture stamps, frames seen only under another subject id, pose flips behind the camera, outliers, frozen frames and very large distances. It refuses positions that are clearly not in meters and refuses the latency fit when any latency is over 5 s. Clean logs fit to the same bytes as before. The reader says when a last line was cut off mid-write, and the intake summary points at fit warnings.
…refuse intake folders under sim/runs
A noise_std_m that is text, true/false, NaN, infinite or below zero now stops the lookup with a plain message. A summary cell on the no-loss main row whose noise_std_m is not a number is named in the error; before, it was reported as a bad delay_s. The registered S6 summary has only numeric noise levels, so its lookups are unchanged.
In the S6 link rerun, a small link JSON that says measured must list its source files under inputs, each with a name and a lowercase sha256 (the block the vision link converter writes), and a fit whose trace says measured must keep its trace_id. Unlabelled, synthetic, fixture and wrong-case inputs are unchanged. The one existing test that fed a bare measured JSON now adds an inputs block; its assertions are the same.
synth --vsync-hz now also writes display_refresh_hz at the top of run_meta.json. analyze refuses a --refresh-hz that disagrees with a recorded rate or a recorded rate that is not a positive number, and prints a warning when a rate is recorded but the flag was not given. No default changes: the refresh-phase term is still added only with --refresh-hz, and runs without the field give the same output.
…s and accepts platform noise
…uth at the origin
…t in capture order
…tests and output keys with plain descriptions
…ndows CI runners with different CPUs give different bits
…d test with plain names (profile name keeps the same derived numbers)
…one in every field (the previous rename changed pitch, which the dynamics do not read)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overnight work on making the sim usable with real measured inputs. No registered result folder or hash in
tools/reproduce_registry.jsonwas changed. Most of this is new side-run tools, docs and tests; existing input tools also gain guards that can now refuse or relabel an input (listed below).What changed
Bench data and measured-input chain
tools/preflight_bench_data.py: checks a bench folder before any intake runs.tools/bench_verdict.py: one command from preflight through intakes, combined rerun and latency budget.tools/propose_measured_entry.py: drafts a registry entry for a measured run, with strict run-dir checks.tools/measured_provenance.pyand edits to the link, combined and measured reruns, latency budget and fit writers: a "measured" label now needs provenance, otherwise it becomes "unverified".sim/vision_noise_fit.py,sim/detection_log.pyandtools/intake_vision.py, documented indocs/DETECTION_LOG.md.tools/latency_budget.pyrefuses a typed--processing-median-msoutside 0.5 to 500 ms and reports "not measured" when no input is measured;tools/vision_latency.pychecks--refresh-hzagainst the recordeddisplay_refresh_hz;sim/vision_noise_fit.pyrefuses positions that are not in meters and leaves latency unfitted when any frame is over 5 s.Radio
sim/radio/packet.py: fixed 161-byte ESP-NOW state packet with version byte and CRC-32, under the 250-byte v1.0 limit.tools/espnow_airtime_budget.py: airtime and channel use per swarm size and send rate.Side runs (all simulated; outputs stay out of
sim/runs/)--lead: a constant-turn prediction aimed the 0.75 s controller lag plus the setpoint radio delay ahead; the old velocity rule stays the default and its rows are unchanged) and a pure delay sweep (--delay-sweep). One hand check (circle radius) failed against the sim and is kept as a strict xfail with its reason.Platform and test hygiene
tools/tests/test_reproduce_registry_coverage.py: byte-checks every committed registered output and fails if a new unregistered result folder appears. Six existing unregistered folders are allowlisted for review (burst-bridge-radio, d4-ellipsoid-diagnosis, e-exp035-logs, missions-atlas, retry-fades-exp038, s6-interaction).Testing
sim/tests/test_ground.py: the same code gave different bits on a runner with a different CPU. That check now compares within a relative 1e-9 (09ce9e0). The run on the current head is in the checks below.Not in this PR