Skip to content

feat(lidar_marker_localizer): average intensity guard on lidar marker localizer#12003

Draft
Motsu-san wants to merge 41 commits intoautowarefoundation:mainfrom
Motsu-san:feat/average_intensity_guard_on_lidar_marker_localizer
Draft

feat(lidar_marker_localizer): average intensity guard on lidar marker localizer#12003
Motsu-san wants to merge 41 commits intoautowarefoundation:mainfrom
Motsu-san:feat/average_intensity_guard_on_lidar_marker_localizer

Conversation

@Motsu-san
Copy link
Copy Markdown
Contributor

@Motsu-san Motsu-san commented Jan 30, 2026

Description

This PR adds a feature to the LiDAR marker localizer that skips pattern matching when the average intensity exceeds a threshold. This prevents false detections from high-intensity surfaces (such as walls) that directly face the LiDAR receiver.

Feature Addition

  • New parameter max_average_intensity_threshold
    • Parameter to set the maximum threshold for average intensity
    • Default value: 0.0 (check is disabled when 0.0 or less)
    • During pattern matching, calculates the average intensity within the pattern range and skips the pattern match if it exceeds the threshold

Implementation Details

  1. Parameter declaration (lidar_marker_localizer.hpp, lidar_marker_localizer.cpp)

    • Added max_average_intensity_threshold parameter as double type
  2. Average intensity check logic (lidar_marker_localizer.cpp)

    • Calculates average intensity within the pattern range during pattern matching
    • Skips pattern match when max_average_intensity_threshold > 0.0 and average intensity is greater than or equal to the threshold
    • Outputs debug log with skip reason
  3. Configuration file update (lidar_marker_localizer.param.yaml)

    • Added parameter default value and description comments

Test Addition

Added three test cases:

  1. AverageIntensityBelowThreshold

    • Verifies that pattern matching is processed normally when average intensity is below the threshold
  2. AverageIntensityAboveThreshold

    • Verifies that pattern matching is skipped when average intensity exceeds the threshold
  3. AverageIntensityCheckDisabled

    • Verifies that the check is disabled and processing continues when max_average_intensity_threshold is 0.0 or less

Usage Example

/**:
  ros__parameters:
    # Maximum threshold for average intensity (disabled when 0.0)
    # To prevent false detection on surfaces directly facing the LiDAR receiver,
    # matching is disabled when this value is exceeded
    max_average_intensity_threshold: 100.0

Impact

  • Backward compatibility: Default value is 0.0, so no impact on existing configurations
  • Performance: Minimal overhead for average intensity calculation (only for bins within pattern range)

Related links

The following pull-request must be merged simultaneously.
autowarefoundation/autoware_launch#1741

How was this PR tested?

  • the following replay test was done.
  1. clone Autoware and do vcs import.
  2. Cherry-pick the changes of this pull-request and the related one above in each src repo.
  3. Build Autoware.
  4. Run unit tests colcon test --packages-select autoware_lidar_marker_localizer and confirm the result colcon test-result --all --verbose --test-result-base build/autoware_lidar_marker_localizer
  5. launch with pose_source:=ndt_lidar-marker option and replay Sample rosbag and map .
  6. Confirm lidar-marker detection is succeeded.
  7. Change max_average_intensity_threshold value to 1.0 in autoware_launch/config/localization/lidar_marker_localizer/top_left/lidar_marker_localizer.param.yaml and autoware_launch/config/localization/lidar_marker_localizer/top_right/lidar_marker_localizer.param.yaml
  8. Launch and replay again.
  9. Confirm lidar-marker detection is NOT succeeded.

Notes for reviewers

None.

Interface changes

None.

Effects on system behavior

None.

@github-actions github-actions bot added type:documentation Creating or refining documentation. (auto-assigned) component:localization Vehicle's position determination in its environment. (auto-assigned) component:launch Launch files, scripts and initialization tools. (auto-assigned) labels Jan 30, 2026
@github-actions
Copy link
Copy Markdown

github-actions bot commented Jan 30, 2026

Thank you for contributing to the Autoware project!

🚧 If your pull request is in progress, switch it to draft mode.

Please ensure:

@codecov
Copy link
Copy Markdown

codecov bot commented Jan 30, 2026

Codecov Report

❌ Patch coverage is 42.91045% with 153 lines in your changes missing coverage. Please review.
✅ Project coverage is 2.83%. Comparing base (d4106f8) to head (018bcb3).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
...ar_marker_localizer/src/lidar_marker_localizer.cpp 55.28% 90 Missing and 3 partials ⚠️
...autoware_landmark_manager/src/landmark_manager.cpp 0.00% 43 Missing ⚠️
...mator_arbiter/src/stopper/stopper_lidar_marker.hpp 0.00% 12 Missing ⚠️
...imator_arbiter/src/pose_estimator_arbiter_core.cpp 0.00% 3 Missing and 1 partial ⚠️
...ose_estimator_arbiter/src/stopper/base_stopper.hpp 0.00% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##             main   #12003       +/-   ##
===========================================
- Coverage   18.36%    2.83%   -15.53%     
===========================================
  Files        1849      975      -874     
  Lines      128005    61057    -66948     
  Branches    45554     9997    -35557     
===========================================
- Hits        23507     1733    -21774     
+ Misses      85042    59198    -25844     
+ Partials    19456      126    -19330     
Flag Coverage Δ
daily ?
daily-cuda ?
differential 2.83% <42.91%> (?)
total-cuda ?

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@Motsu-san Motsu-san force-pushed the feat/average_intensity_guard_on_lidar_marker_localizer branch from e90331b to 379448c Compare February 2, 2026 03:35
@paulsohn
Copy link
Copy Markdown
Contributor

paulsohn commented Feb 6, 2026

@Motsu-san cc @KYabuuchi @TaikiYamada4 @YamatoAndo

As we decided to migrate tier4 launchers into autoware_launch repository,
a separate PR for tier4 launchers must be created unless this PR is merged before 2026/02/10 07:00 UTC (16:00 JST)

@Motsu-san Motsu-san force-pushed the feat/average_intensity_guard_on_lidar_marker_localizer branch from 379448c to 9995cda Compare February 17, 2026 02:43
@github-actions github-actions bot removed the component:launch Launch files, scripts and initialization tools. (auto-assigned) label Feb 17, 2026
@Motsu-san
Copy link
Copy Markdown
Contributor Author

@paulsohn Thank you for your notice! The conflict has been resolved.

@Motsu-san Motsu-san force-pushed the feat/average_intensity_guard_on_lidar_marker_localizer branch 3 times, most recently from 1ffd802 to a1d6f4d Compare February 18, 2026 02:07
@Motsu-san Motsu-san force-pushed the feat/average_intensity_guard_on_lidar_marker_localizer branch from a1d6f4d to f73bc20 Compare March 13, 2026 05:43
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
for using PointType in both PointXYZIRC and PointXYZIRADRT

Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
- Add check to skip empty ring pointclouds in detect_landmarks
- Prevent unnecessary processing and possible errors when a ring has no points

Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
- Enable generic processing for multiple point cloud types
- Prepare for future multi-LiDAR marker localization support

Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Motsu-san and others added 29 commits March 13, 2026 14:54
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>

# Conflicts:
#	launch/tier4_localization_launch/launch/localization.launch.xml
#	launch/tier4_localization_launch/launch/pose_twist_estimator/lidar_marker_localizer.launch.xml
#	launch/tier4_localization_launch/launch/pose_twist_estimator/pose_twist_estimator.launch.xml
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
To indicate the contributor's affiliation

Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
…ramework

Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
If enabled, it may cause instability in the z-direction in the case of driving on level road

Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
…ints)

Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
 to reject false positives from high-intensity surfaces

Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
- Added description of the average intensity check feature to the Detection Algorithm section of README.md
- Added the max_average_intensity_threshold parameter to schema.json

Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
@Motsu-san Motsu-san force-pushed the feat/average_intensity_guard_on_lidar_marker_localizer branch from f73bc20 to 018bcb3 Compare March 13, 2026 05:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component:localization Vehicle's position determination in its environment. (auto-assigned) run:build-and-test-differential Mark to enable build-and-test-differential workflow. (used-by-ci) type:documentation Creating or refining documentation. (auto-assigned)

Projects

Status: To Triage

Development

Successfully merging this pull request may close these issues.

2 participants