Skip to content

feat(autoware_map_loader): add support of GetSelectedLanelet2Map service#889

Open
mitsudome-r wants to merge 16 commits into
autowarefoundation:mainfrom
mitsudome-r:feat/add-differential-map-loading-interface
Open

feat(autoware_map_loader): add support of GetSelectedLanelet2Map service#889
mitsudome-r wants to merge 16 commits into
autowarefoundation:mainfrom
mitsudome-r:feat/add-differential-map-loading-interface

Conversation

@mitsudome-r

@mitsudome-r mitsudome-r commented Mar 5, 2026

Copy link
Copy Markdown
Member

Description

This must be merged after #888.
This must be merged with autowarefoundation/autoware_launch#1813.

This PR adds GetSelectedLanelet2Map service interface to map_loader to enable dynamic map loading.
This is done by adding Lanelet2SelectedMapLoaderModule class to lanelet2_map_loader, just like pointcloud_map_loader.

Related links

Parent Issue:

How was this PR tested?

Preparation

Test Case 1

Make sure the map loader can load with the single file map when enable_selected_map_loading=false. (Regression Check)

  1. set enable_selected_map_loading to false in map/autoware_map_loader/config/lanelet2_map_loader.param.yaml

  2. Launch autoware_map_loader with the following commands using 3 terminals. (You will see error from map_hash_generator due to no pcd map, but you can ignore it for now.)

# Terminal 1: launch autoware_map_projection_loader
ros2 launch autoware_map_projection_loader map_projection_loader.launch.xml map_projector_info_path:=$HOME/autoware_data/maps/Shinjuku-Map/map_projector_info.yaml lanelet2_map_path:="''"

# Terminal 2: launch autoware_map_loader
ros2 launch autoware_map_loader lanelet2_map_loader.launch.xml \
  lanelet2_map_path:=$HOME/autoware_data/maps/Shinjuku-Multi-Map/lanelet2_map.osm \
  metadata_file_path:=$HOME/autoware_data/maps/Shinjuku-Multi-Map/lanelet2_map_metadata.yaml

# Terminal 3: Check ros node info
ros2 node info /lanelet2_map_loader
  1. Make sure that you see lanelet2_map_loader launched with the following node info (no service/get_selected_lanelet2_map service)
/lanelet2_map_loader
  Subscribers:
    /map/map_projector_info: autoware_map_msgs/msg/MapProjectorInfo
    /parameter_events: rcl_interfaces/msg/ParameterEvent
  Publishers:
    /map/vector_map: autoware_map_msgs/msg/LaneletMapBin
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /rosout: rcl_interfaces/msg/Log
  Service Servers:
    /lanelet2_map_loader/describe_parameters: rcl_interfaces/srv/DescribeParameters
    /lanelet2_map_loader/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /lanelet2_map_loader/get_parameters: rcl_interfaces/srv/GetParameters
    /lanelet2_map_loader/list_parameters: rcl_interfaces/srv/ListParameters
    /lanelet2_map_loader/set_parameters: rcl_interfaces/srv/SetParameters
    /lanelet2_map_loader/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically

Test Case 2

Make sure the map loader can load the single file map when enable_selected_map_loading=true. (No metadata file required)

  1. set enable_selected_map_loading to true in map/autoware_map_loader/config/lanelet2_map_loader.param.yaml

  2. Launch the same commands from Test Case 1

  3. Make sure that you see lanelet2_map_loader launched with the following node info (with service/get_selected_lanelet2_map service)

/lanelet2_map_loader
  ...
  Publishers:
    /map/vector_map: autoware_map_msgs/msg/LaneletMapBin
    /output/lanelet2_map_metadata: autoware_map_msgs/msg/LaneletMapMetaData
  ...
  Service Servers:
    /service/get_selected_lanelet2_map: autoware_map_msgs/srv/GetSelectedLanelet2Map

Test Case 3

Make sure the map loader can load the muliple lanelet2 maps when enable_selected_map_loading=true.

  1. set enable_selected_map_loading to true in map/autoware_map_loader/config/lanelet2_map_loader.param.yaml

  2. Launch the following commands:

# Terminal 1: launch autoware_map_projection_loader
ros2 launch autoware_map_projection_loader map_projection_loader.launch.xml map_projector_info_path:=$HOME/autoware_data/maps/Shinjuku-Map/map_projector_info.yaml lanelet2_map_path:="''"

# Terminal 2: launch autoware_map_loader
ros2 launch autoware_map_loader lanelet2_map_loader.launch.xml \
  lanelet2_map_path:=$HOME/autoware_data/maps/Shinjuku-Multi-Map/lanelet2_map.osm \
  metadata_file_path:=$HOME/autoware_data/maps/Shinjuku-Multi-Map/lanelet2_map_metadata.yaml

# Terminal 3: Check ros node info
ros2 node info /lanelet2_map_loader
  1. Confirm that you see service/get_selected_lanelet2_map service from the node.

Test Case 4

Make sure that the node fails to load multiple lanelet2 maps files when metadata file is not provided regardless of enable_selected_map_loading option

  1. Launch the following commands:
# Terminal 1: launch autoware_map_projection_loader
ros2 launch autoware_map_projection_loader map_projection_loader.launch.xml map_projector_info_path:=$HOME/autoware_data/maps/Shinjuku-Map/map_projector_info.yaml lanelet2_map_path:="''"

# Terminal 2: launch autoware_map_loader
ros2 launch autoware_map_loader lanelet2_map_loader.launch.xml \
  lanelet2_map_path:=$HOME/autoware_data/maps/Shinjuku-Multi-Map/lanelet2_map.osm \
  metadata_file_path:="''"

# Terminal 3: Check ros node info
ros2 node info /lanelet2_map_loader
  1. Confirm that you lanelet2_map_loader fails with the following error:
[autoware_lanelet2_map_loader-2] terminate called after throwing an instance of 'std::runtime_error'
[autoware_lanelet2_map_loader-2]   what():  Lanelet2 metadata file not found: 
[ERROR] [autoware_lanelet2_map_loader-2]: process has died [pid 1657887, exit code -6, cmd '/home/mitsudome-r/autoware_lanelet2_map_differential/install/autoware_map_loader/lib/autoware_map_loader/autoware_lanelet2_map_loader --ros-args -r __node:=lanelet2_map_loader --params-file /tmp/launch_params__afz3vt7 -r output/lanelet2_map:=vector_map'].

Notes for reviewers

None.

Interface changes

Topic changes

Additions and removals

Change type Topic Type Topic Name Message Type Description
Added Publisher output/lanelet2_map_metadata autoware_map_msgs/msg/LaneletMapMetaData Publishes per-cell bounding-box metadata with transient-local durability (only when enable_selected_map_loading is true)
Added Service service/get_selected_lanelet2_map autoware_map_msgs/srv/GetSelectedLanelet2Map Loads and returns merged lanelet2 map cells for the requested cell IDs (only when enable_selected_map_loading is true)

ROS Parameter Changes

Additions and removals

Change type Parameter Name Type Default Value Description
Added enable_selected_map_loading bool false Expose service/get_selected_lanelet2_map service and publish cell metadata
Added metadata_file_path string "" Path to lanelet2_map_metadata.yaml; if empty or missing, bounding boxes are computed from map points

Effects on system behavior

None.

@github-actions

github-actions Bot commented Mar 5, 2026

Copy link
Copy Markdown

Thank you for contributing to the Autoware project!

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

Please ensure:

@mitsudome-r mitsudome-r force-pushed the feat/add-differential-map-loading-interface branch from 44106ad to 45c4b33 Compare March 5, 2026 11:43
@mitsudome-r mitsudome-r added the run:build-and-test-differential Mark to enable build-and-test-differential workflow. (used-by-ci) label Mar 9, 2026
@mitsudome-r mitsudome-r force-pushed the feat/add-differential-map-loading-interface branch from d793013 to d3c0d4c Compare March 9, 2026 08:47
@mitsudome-r mitsudome-r force-pushed the feat/add-differential-map-loading-interface branch from 9325bf1 to bdb63ce Compare April 9, 2026 13:48
@mitsudome-r mitsudome-r force-pushed the feat/add-differential-map-loading-interface branch from 6d9535a to 957122f Compare April 22, 2026 06:41
Comment thread map/autoware_core_map/config/lanelet2_map_loader.param.yaml Outdated
mitsudome-r and others added 7 commits May 20, 2026 22:03
Signed-off-by: Ryohsuke Mitsudome <ryohsuke.mitsudome@tier4.jp>
Signed-off-by: Ryohsuke Mitsudome <ryohsuke.mitsudome@tier4.jp>
Signed-off-by: Ryohsuke Mitsudome <ryohsuke.mitsudome@tier4.jp>
Signed-off-by: Ryohsuke Mitsudome <ryohsuke.mitsudome@tier4.jp>
Signed-off-by: Ryohsuke Mitsudome <ryohsuke.mitsudome@tier4.jp>
Signed-off-by: Ryohsuke Mitsudome <ryohsuke.mitsudome@tier4.jp>
@mitsudome-r mitsudome-r force-pushed the feat/add-differential-map-loading-interface branch from 957122f to bca7481 Compare May 20, 2026 13:09
@mitsudome-r mitsudome-r marked this pull request as ready for review May 20, 2026 14:20
@mitsudome-r mitsudome-r force-pushed the feat/add-differential-map-loading-interface branch from dd4cbad to aac0b43 Compare May 21, 2026 14:00
Signed-off-by: Ryohsuke Mitsudome <ryohsuke.mitsudome@tier4.jp>
Signed-off-by: Ryohsuke Mitsudome <ryohsuke.mitsudome@tier4.jp>
Signed-off-by: Ryohsuke Mitsudome <ryohsuke.mitsudome@tier4.jp>
@mitsudome-r mitsudome-r force-pushed the feat/add-differential-map-loading-interface branch from aac0b43 to bb8bcf7 Compare May 21, 2026 14:03
Signed-off-by: Ryohsuke Mitsudome <ryohsuke.mitsudome@tier4.jp>
@mitsudome-r mitsudome-r requested a review from soblin as a code owner May 21, 2026 14:59
@codecov

codecov Bot commented May 21, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 72.22222% with 25 lines in your changes missing coverage. Please review.
✅ Project coverage is 61.34%. Comparing base (8e2974f) to head (280ed01).

Files with missing lines Patch % Lines
...c/lanelet2_map_loader/lanelet2_map_loader_node.cpp 17.64% 4 Missing and 10 partials ⚠️
...map_loader/lanelet2_selected_map_loader_module.cpp 82.00% 1 Missing and 8 partials ⚠️
...lanelet2_map_loader/lanelet2_map_cell_metadata.cpp 95.45% 0 Missing and 1 partial ⚠️
...lanelet2_map_loader/lanelet2_map_cell_metadata.hpp 0.00% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #889      +/-   ##
==========================================
+ Coverage   60.55%   61.34%   +0.79%     
==========================================
  Files         427      419       -8     
  Lines       25472    24301    -1171     
  Branches    12042    11742     -300     
==========================================
- Hits        15425    14908     -517     
- Misses       7089     7836     +747     
+ Partials     2958     1557    -1401     
Flag Coverage Δ *Carryforward flag
daily-humble 66.65% <ø> (-0.53%) ⬇️ Carriedforward from fa9710d
daily-jazzy 66.70% <ø> (-0.51%) ⬇️ Carriedforward from fa9710d
differential-humble 16.22% <70.00%> (-39.62%) ⬇️
differential-jazzy 16.14% <70.78%> (-39.66%) ⬇️
total 50.25% <ø> (ø) Carriedforward from fa9710d
total-humble 66.74% <ø> (-0.45%) ⬇️ Carriedforward from fa9710d
total-humble-agnocast 66.52% <ø> (+0.01%) ⬆️ Carriedforward from fa9710d
total-jazzy 66.78% <ø> (-0.43%) ⬇️ Carriedforward from fa9710d
total-jazzy-agnocast 66.58% <ø> (+0.03%) ⬆️ Carriedforward from fa9710d

*This pull request uses carry forward flags. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 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.

@mitsudome-r

Copy link
Copy Markdown
Member Author

@YamatoAndo The PR is ready for review so could you review the PR?

Signed-off-by: Ryohsuke Mitsudome <ryoshuke.mitsudome@tier4.jp>
@sasakisasaki sasakisasaki self-assigned this Jun 11, 2026
@YamatoAndo

Copy link
Copy Markdown
Contributor

It might be preferable to add the following code in

<launch>
<!-- map files -->
<arg name="lanelet2_map_path"/>
<arg name="map_projector_info_path"/>
<arg name="pointcloud_map_path"/>
<arg name="pointcloud_map_metadata_path"/>

  <arg name="lanelet2_map_metadata_path" default="''"/>

Signed-off-by: Ryohsuke Mitsudome <ryohsuke.mitsudome@tier4.jp>
@mitsudome-r

Copy link
Copy Markdown
Member Author

@YamatoAndo Good catch!
I have added the argument according to your suggestion.

@sasakisasaki

Copy link
Copy Markdown
Contributor

As I observed the following error in CI build, I updated the branch.

/__w/autoware_core/autoware_core/dependency_ws/autoware/autoware_universe/perception/autoware_multi_object_tracker/src/debugger/debugger.hpp:22:10: fatal error: autoware/agnocast_wrapper/diagnostic_updater.hpp: No such file or directory
   22 | #include <autoware/agnocast_wrapper/diagnostic_updater.hpp>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

@sasakisasaki sasakisasaki left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed. Though adding tests might be separated as another PR. Personally I agree with merging this PR.

After merging this PR, there will be room for refactoring such as two logic separation: application logic and ROS logic.

Comment thread map/autoware_map_loader/test/test_lanelet2_selected_map_loader_module.cpp Outdated
@@ -1 +1 @@
// Copyright 2021 Tier IV, Inc.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Not a change request, just note to myself) Perhaps this header does not need to be public. We can make this header private I guess.

@sasakisasaki

Copy link
Copy Markdown
Contributor

@autowarefoundation/autoware-global-codeowners @YamatoAndo Could you kindly review this PR please? 😉

@sasakisasaki sasakisasaki requested a review from a team June 26, 2026 04:32
@mergify

mergify Bot commented Jun 26, 2026

Copy link
Copy Markdown

Tick the box to add this pull request to the merge queue (same as @mergifyio queue).

  • Queue this pull request

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

run:build-and-test-differential Mark to enable build-and-test-differential workflow. (used-by-ci)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants