Repository navigation
feat(gsdc): third pass on sjc-r A505U with its course seeds; pin the recipe to 57678818 - #665
Merged
Merged
Conversation
…9467 Submission 57600830 still had 31 drives at the MSVC research outputs of 56625084, so no single build reproduced it. The recipe lane reran those drives, their 17 stage-0 runs and height maps with the same argv on the Linux GCC 15 build of develop ed5f8d0 (86d1e81 links the same binary). The 9 GCC final drives and 8 GCC stage-0 runs came out byte-identical. The 31 rerun drives moved by median 0.001 m / P95 0.008 m / max 0.079 m. Kaggle scores the rebuild (57619467, c46ca65f...) Private 0.844 m / Public 0.885 m (57600830: 0.845 / 0.884). Every drive, stage-0 run and height map is now pinned to one build. The MSVC provenance moves under research_source.msvc_research. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWJ6qRF465rAzkFgQJvz7P
… to 57626255 In 57619467 the first 11 static minutes of 2022-04-25 ebf-x Mi8 (38% of its scored rows) sat about 2 m from the taroz test output. Raw-ADR epoch-to-epoch carrier displacements disagree with the native GNSS-first and final trajectories by 1.2 m over the 40 s parking-lot exit, while taroz agrees within 0.2 m; it is the only test drive with that symptom. The recipe gains a per-drive input_window: the lane writes the drive's Android GNSS rows from epoch 599 (taroz settings_test.csv IdxStart=600) and its IMU rows from 2 s earlier (raw lines, SHA-256 pinned), and assemble fills the leading keys with the first solved row, as taroz submission.m does. The drive also takes source TDCP metre sigma and Phase184 Huber (Highway, L5=1); the same flags regress on train, so they stay on this drive. Kaggle 57626255 (6c0eca7d...): Private 0.844 m / Public 0.850 m (57619467: 0.844 / 0.885). The solver binary is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWJ6qRF465rAzkFgQJvz7P
…larke-k37g2b # Conflicts: # README.md # configs/reproduce/gsdc-official.toml # configs/reproduce/gsdc_official_recipe.json # docs/gsdc2023_native_taroz_goal.md # docs/reproduce.md # docs/use_cases/records/gsdc2023_official_readback_20261024.json # scripts/experiments/gsdc/gsdc_official_reproduce.py # tests/test_gnss_reproduce.py
The lane copies native text verbatim, while the research fill step that produced 57626255 dropped trailing zeros in 284 ebf-x rows. The two files have the same coordinates. The lane-built file (f19acb58...) was submitted as 57629197 and scores the same (Private 0.844 m / Public 0.850 m), so the gate now pins it; 57626255 stays in the chain. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWJ6qRF465rAzkFgQJvz7P
On train, with the per-phone test recipes, native and taroz are level (0.718 vs 0.712 m), so the 0.062 m Private gap should sit in a few test drives. Recorded checks that did not find them: the taroz result files already carry the phone offset; the along-track excess is drive-specific and a per-family shift makes train worse; raw-ADR TDCP arbitrates only at low speed; height maps are not a common cause, and removing them on the three Samsung drives that disagree most with taroz gives mixed results. The readback record gains these notes and the open issues. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWJ6qRF465rAzkFgQJvz7P
The 0.2% highway-speed drift recorded in #654 was not in the raw-ADR TDCP displacement check but in the comparison, which turned lat/lon into metres on a 6,371 km sphere (0.19-0.24% scale error at 37 deg N). With exact ECEF/ENU conversion the check matches ground-truth steps to about 10 ppm at 29 m/s on train. Rerun on all 40 test drives at all speeds, it finds no second ebf-x-type failure; ADR is unusable on A325F, A32 and S908B. The goal log and readback record now say so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWJ6qRF465rAzkFgQJvz7P
…recipe The Pixel5 heading recipe already carries source TDCP metre sigma and Phase184 Huber (Highway), so adding them to ebf-xx leaves its solution byte-identical; its exit still disagrees with TDCP by 2.6 / 1.7 m. The goal log and the readback record's open issue say so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWJ6qRF465rAzkFgQJvz7P
…on 30 drives) Taroz solves each drive with fgo_gnss and then fgo_gnss_imu twice; the last pass re-screens P/D around the first GNSS/IMU trajectory with the final thresholds and solves again. The test recipes stopped after one IMU solve. Thirty drives now add --native-imu-refinement-pass and the flags it requires where missing (stage exports, source IMU initialization, main-graph Doppler). On 35 train drives with taroz output the mean moves 0.7358 -> 0.7187 m (taroz 0.7123 m). Mi8 (worse on train), Pixel4 XL (prerequisites +1.0 m), A325G (neutral), sjc-r A505U (course seeds exclude source initialization) and ebf-z (Kaggle Public worse) keep their recipes. Kaggle: 57663786 Private 0.811 / Public 0.836 m, 57663818 (ebf-z reverted) 0.811 / 0.821 m, 57664241 (plus lax-p) 0.811 / 0.817 m, from 0.844 / 0.850 m. lax-p overflows the default 8 MB stack in its refinement solve. The recipe marks it stack_limit "unlimited", and the lane lifts the child's soft RLIMIT_STACK for it (refusing to run when the hard limit is finite). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWJ6qRF465rAzkFgQJvz7P
…imit The lax-p refinement solve crashes in two of three runs with an 8 MB or an unlimited stack: each SIGSEGV is a GTSAM TBB worker thread running past its own stack, which RLIMIT_STACK does not size. Pinned to one CPU, TBB starts no workers and the drive finishes in 1670 s with the pinned solution (2d54abf7) under either stack limit. Replace the recipe's stack_limit with single_cpu, which the lane applies with sched_setaffinity in the child. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWJ6qRF465rAzkFgQJvz7P
…into claude/confident-clarke-k37g2b
--native-course-attitude-seeds-mount-deg rejected --native-source-imu-initialization because source initialization turns on the epoch heading seeds, which course seeds replace. The refinement pass needs source initialization, so sjc-r A505U (mounted backwards, course seeds at 178.9 deg) could not take it. With both flags, the initial IMU pass now uses the course seeds instead of the source heading seeds; the refinement pass, which hands over the initial pass's optimized attitude as heading seeds, turns course seeds off. Every other flag combination builds the same config as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWJ6qRF465rAzkFgQJvz7P
…and lax-hh) sjc-r A505U now takes the third pass with its course seeds kept, on the build that admits course attitude seeds with source IMU initialization, and lax-hh A325G takes it too. Kaggle: 57677499 (A505U) Private 0.806 / Public 0.817 m, 57678818 (plus lax-hh) 0.806 / 0.816 m, from 0.811 / 0.817 m. Probes on that file: mtv-e Pixel4 XL unchanged, mtv-pe1 A325G Public 0.821 m (kept on its recipe although it moved 0.16 m toward taroz). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWJ6qRF465rAzkFgQJvz7P
The full lane (25 stage-0 runs, 25 height maps, 40 final drives) reran from scratch on gnss_fgo_imu_no_base cccb04cc, four at a time on 4 cores in 2 h 21 min; every pinned output and map is byte-identical and assemble writes 2e0deb2c (Kaggle 57678818). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWJ6qRF465rAzkFgQJvz7P
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.
Summary
gnss_fgo_imu_no_basenow accepts--native-course-attitude-seeds-mount-degtogether with--native-source-imu-initialization.Scope
External Reference
fgo_gnss_imu.m). Its final pass starts from the previous pass's attitude unless RPYReset is set.Behavior Boundary
dataset_2023. The CLI test is admission-only and uses no data.Validation
python3 tests/test_cli_tools.pypython3 tests/test_benchmark_scripts.pypython3 tests/test_packaging.pypython3 tests/test_python_bindings.py -vpython3 tests/test_ros2_node.pyctest --test-dir build --output-on-failureFocused checks run:
Sign-off / Benchmark Impact
Added or updated regression/sign-off:
2e0deb2cand checks that 32 drives carry the refinement pass.Affected dataset(s): GSDC 2023-2024 test (official).
Expected metric impact (Kaggle readback):
Artifact(s) produced: none tracked.
Notes
Generated by Claude Code