Skip to content

ElevationMapLoader may hang while loading point cloud maps sequentially #13424

Description

@elyforl

Checklist

  • I've read the contribution guidelines.
  • I've searched other issues and no duplicate issues were found.
  • I'm convinced that this is not my fault but a bug.

Description

When use_sequential_load=true, ElevationMapLoaderNode requests point
cloud map cells from GetSelectedPointCloudMap inside a timer callback.
The request is sent asynchronously, but the callback then repeatedly
calls wait_for(1s) until the response future is ready.

The standalone elevation_map_loader_node executable is registered
without an EXECUTOR option, so its generated entry point uses a
SingleThreadedExecutor. The package's launch file starts this
executable with a <node> action; it does not load the component into
a component container. The timer and client use different callback
groups, but the client response still needs an executor thread to make
the future ready. The only executor thread remains inside the timer's
wait loop and cannot process that response.

Relevant locations in autoware_elevation_map_loader:

  • src/elevation_map_loader_node.cpp:103-121: client and timer setup.
  • src/elevation_map_loader_node.cpp:184-188: timer calls receiveMap().
  • src/elevation_map_loader_node.cpp:289-305: request and wait loop.
  • CMakeLists.txt:22-25: standalone executable registration.

Expected behavior

The node processes each service response and continues loading the
requested map cells.

Actual behavior

Predicted from source inspection; not yet runtime verified: once the
timer enters the wait loop, the standalone executor has no available
thread to process the client response. The future remains unready and
the loop continues until ROS shuts down.

Steps to reproduce

  1. Start a GetSelectedPointCloudMap service with selected map loading
    enabled and at least one map cell available.
  2. Ensure the elevation map loader's client name resolves to that
    service. The current launch file remaps service/get_selected_pcd_map,
    while the client uses service/get_selected_pointcloud_map. Correct
    the remap in a test copy of the launch file, or provide the service
    at the client's resolved name.
  3. Launch the standalone elevation_map_loader_node with
    use_sequential_load:=true.
  4. Provide nonempty PointCloudMapMetaData so the timer calls
    receiveMap().
  5. Check whether the service responds while the loader continues
    logging Waiting for response without completing map loading.

Versions

  • Autoware Universe: 2e7f15416f75031ee13532417b9ab452eba94990.
  • OS / ROS 2: Not recorded; runtime reproduction pending.

Possible causes

receiveMap() blocks the timer callback with repeated future.wait_for(1s)
calls. wait_for() does not spin the ROS executor. One possible fix is
to continue map loading from the service response callback rather than
waiting inside the timer. A multithreaded executor with an available
response thread may also allow this path to progress.

Additional context

The package's launch file defaults use_sequential_load to false, so
this path requires that option to be enabled. The launch remap name
mismatch described above is a separate obstacle to reaching the wait
loop with the intended service.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions