Skip to content

Commit 4dd6b4c

Browse files
Enable recovery retry on Koide outdoor manifests for 180s acceptance.
recovery_retry r3_gap1_seed15 raises outdoor_hard_01a 180s ok rows from 71 to 473 on the public map; document the sweep in benchmarking notes. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent c6694e4 commit 4dd6b4c

5 files changed

Lines changed: 59 additions & 0 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
- document Istanbul public demo RMSE run variance; identical seed/map can yield ~`1.2 m` or late-run drift outliers
2020
- tune public Istanbul 60 s preset with `local_map_crop` and `recovery_retry_from_last_pose` (`r3`, `gap<=1 s`, `seed<=15 m`)
2121
- reconfirm public regression suite after drift tuning; Istanbul gate `1.00 m` and HDL IMU checks pass (2026-06-10)
22+
- enable `recovery_retry_from_last_pose` on Koide outdoor manifests; `180 s` acceptance rises from `71` to `473` ok rows
2223
- guard `use_odom` integration until initial pose is valid and keep pose finite for NDT init guess
2324
- ignore non-finite `/initialpose` payloads and stop eager scan replay during pose reset
2425
- v1.1 relocalization is documented as a validated dry-run `/initialpose` command artifact only

docs/benchmarking.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@ ros2 run lidar_localization_ros2 benchmark_from_manifest \
113113

114114
Latest local Koide snapshot:
115115

116+
- `2026-06-10`, `outdoor_hard_01a_smoke60` (baseline): `translation_rmse_m=0.230`, `rotation_rmse_deg=2.607`, `ok_rows=228/229`
117+
- `2026-06-10`, `outdoor_hard_01a_120` (baseline): `translation_rmse_m=0.192`, `rotation_rmse_deg=1.923`, `ok_rows=441/461`
118+
- `2026-06-10`, `outdoor_hard_01a_180` (baseline): `translation_rmse_m=0.210`, `ok_rows=71/523` — pose output stops ~`126 s`
119+
- `2026-06-10`, `outdoor_hard_01a_180` + `recovery_retry r3_gap1_seed15`: `translation_rmse_m=0.255`, `rotation_rmse_deg=2.273`, `ok_rows=473/474`
120+
- `2026-06-10`, `outdoor_hard_01 window_15_120` recovery compare:
121+
- baseline: `translation_rmse_m=5.477`, `matched=138`
122+
- `recovery_retry r3_gap1_seed15`: `translation_rmse_m=0.266`, `matched=443`
116123
- `2026-05-24`, `indoor_easy_01_smoke60`: `translation_rmse_m=0.079`, `rotation_rmse_deg=1.639`, `ok_rows=773/773`
117124
- `2026-05-24`, `outdoor_hard_01a_smoke60`: `translation_rmse_m=0.209`, `rotation_rmse_deg=2.241`, `ok_rows=223/225`
118125
- `2026-05-25`, `outdoor_hard_01a_120`: `translation_rmse_m=0.224`, `rotation_rmse_deg=2.083`, `ok_rows=482/499`

param/benchmark/koide_hard_localization_outdoor_hard_01a_120.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ localizer:
2222
scan_min_range: 1.0
2323
scan_max_range: 100.0
2424
score_threshold: 6.0
25+
enable_recovery_retry_from_last_pose: true
26+
recovery_retry_from_last_pose_min_rejections: 3
27+
recovery_retry_from_last_pose_max_accepted_gap_sec: 1.0
28+
recovery_retry_from_last_pose_max_seed_translation_m: 15.0
2529
launch_args:
2630
- use_sim_time:=true
2731
- lidar_frame_id:=livox_frame
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Koide Hard Point Cloud Localization — outdoor_hard_01a 180 s acceptance boundary.
2+
# Requires data staged under data/public/koide_hard_localization.
3+
4+
mode: run
5+
6+
dataset:
7+
bag_path: repo://data/public/koide_hard_localization/sequences/outdoor_hard_01a
8+
map_path: repo://data/public/koide_hard_localization/map_outdoor_hard.ply
9+
reference_csv: repo://data/public/koide_hard_localization/benchmark/outdoor_hard_01a/reference.csv
10+
initial_pose_yaml: repo://data/public/koide_hard_localization/benchmark/outdoor_hard_01a/initial_pose.yaml
11+
cloud_topic: /livox/points
12+
imu_topic: /livox/imu
13+
14+
localizer:
15+
base_param_yaml: repo://param/nav2_ndt_urban.yaml
16+
param_overrides:
17+
use_imu: false
18+
use_imu_preintegration: false
19+
enable_scan_voxel_filter: true
20+
voxel_leaf_size: 0.5
21+
base_frame_id: livox_frame
22+
scan_min_range: 1.0
23+
scan_max_range: 100.0
24+
score_threshold: 6.0
25+
enable_recovery_retry_from_last_pose: true
26+
recovery_retry_from_last_pose_min_rejections: 3
27+
recovery_retry_from_last_pose_max_accepted_gap_sec: 1.0
28+
recovery_retry_from_last_pose_max_seed_translation_m: 15.0
29+
launch_args:
30+
- use_sim_time:=true
31+
- lidar_frame_id:=livox_frame
32+
33+
benchmark:
34+
output_dir: /tmp/lidarloc_koide_outdoor_hard_01a_180
35+
ros_domain_id: 181
36+
bag_duration: 180
37+
bag_start_offset: 0
38+
settle_seconds: 5
39+
post_roll_seconds: 1
40+
max_time_diff: 0.05
41+
record_qos_reliability: reliable
42+
record_qos_durability: volatile
43+
record_use_sim_time: true

param/benchmark/koide_hard_localization_outdoor_hard_01a_smoke60.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ localizer:
2222
scan_min_range: 1.0
2323
scan_max_range: 100.0
2424
score_threshold: 6.0
25+
enable_recovery_retry_from_last_pose: true
26+
recovery_retry_from_last_pose_min_rejections: 3
27+
recovery_retry_from_last_pose_max_accepted_gap_sec: 1.0
28+
recovery_retry_from_last_pose_max_seed_translation_m: 15.0
2529
launch_args:
2630
- use_sim_time:=true
2731
- lidar_frame_id:=livox_frame

0 commit comments

Comments
 (0)