You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/benchmarking.md
+230Lines changed: 230 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,6 +18,79 @@ This repository now includes a small benchmark harness so that localization chan
18
18
- Records `diagnostic_msgs/msg/DiagnosticArray` into CSV
19
19
-`benchmark_eval_trajectory`
20
20
- Compares an estimated trajectory CSV against a reference trajectory CSV
21
+
-`summarize_localization_health.py`
22
+
- Summarizes `alignment_status.csv` into recovery/reinitialization health metrics
23
+
- Writes `health_summary.json` and `health_summary.md`
24
+
- Tracks ok rate, failure-like rows, request windows, recovered/unrecovered windows, max accepted gap, and reject streaks
25
+
-`benchmark_from_manifest` writes this automatically for single-run manifests unless `benchmark.write_health_summary: false`
26
+
-`summarize_relocalization_attempts.py`
27
+
- Summarizes experimental `relocalization_attempts.csv` artifacts and matches them to request windows from `alignment_status.csv`
28
+
- Writes `relocalization_attempt_summary.json` and `relocalization_attempt_summary.md`
29
+
- Records request-window coverage, accepted/rejected attempt counts, candidate counts, runtime stats, and false-recovery observability
30
+
- Treats a missing attempts CSV as zero attempts when run through `benchmark_from_manifest`, which makes "no global relocalization yet" explicit in artifacts
31
+
-`make_disabled_relocalization_attempts.py`
32
+
- Converts each reinitialization request window in `alignment_status.csv` into one rejected baseline attempt
33
+
- Writes `candidate_count=0`, `accepted=false`, and `rejection_reason=candidate_generator_disabled`
34
+
- Useful for v1.1 public artifacts before a real candidate generator is enabled
35
+
-`make_route_grid_relocalization_attempts.py`
36
+
- Converts each request window into route-corridor candidate poses from a reference trajectory
37
+
- Writes `relocalization_attempts.csv` plus per-candidate `relocalization_candidates.csv`
38
+
- Does not score candidates, call registration, or reset pose; attempts remain rejected with `candidate_scoring_not_implemented`
39
+
- Useful as the first non-zero-candidate artifact for the v1.1 relocalization pipeline
- Validates reset-plan artifacts before they are used by any executor
76
+
- Fails by default if any row has `accepted=true` or uses `oracle_rank` selection
77
+
- Can cross-check selected job/candidate rows against the registration score CSV
78
+
-`make_relocalization_reset_commands.py`
79
+
- Converts selected reset-plan rows into dry-run `/initialpose` command artifacts
80
+
- Uses `selected_final_pose_*` as the command pose; `selected_initial_pose_*` remains candidate-seed provenance
81
+
- Does not publish or execute resets
82
+
-`validate_relocalization_reset_commands.py`
83
+
- Validates dry-run reset command artifacts
84
+
- Requires `dry_run=true`, finite pose fields, near-unit quaternion, and zero published count by default
85
+
- Rejects accepted source plans and `oracle_rank` provenance by default
86
+
-`publish_relocalization_reset_commands.py`
87
+
- Experimental guarded utility for `geometry_msgs/PoseWithCovarianceStamped` reset commands
88
+
- Requires `--execute` for actual publishing
89
+
- Without `--execute`, writes only an execution report with `published_count=0`
90
+
-`observe_relocalization_reset_execution.py`
91
+
- Observes post-reset recovery from reset execution CSV and `alignment_status.csv`
92
+
- Counts post-reset `ok` rows, stable ok streak, reject streak, and first-ok latency
93
+
- Sets `accepted=true` only when a published command is followed by enough stable `ok` rows
21
94
-`benchmark_eval_evo_ape`
22
95
- Converts the benchmark CSVs to TUM format and evaluates them with `evo_ape`
23
96
- Useful when you need a paper-style `ATE` workflow instead of only the built-in RMSE JSON
@@ -98,6 +171,163 @@ Interpretation:
98
171
- Istanbul has no accelerometer stream, so it is only a default-on no-IMU safety check, not an IMU benefit benchmark
99
172
- HDL has no strong public ground truth and single-run pose-row ratios are noisy, so the suite uses broad smoke bounds there rather than a strict acceptance benchmark
100
173
174
+
### Run a manifest with health summary
175
+
176
+
Single-run manifests use `benchmark_from_manifest`. After replay and trajectory evaluation, the
0 commit comments