Checklist
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
- Start a
GetSelectedPointCloudMap service with selected map loading
enabled and at least one map cell available.
- 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.
- Launch the standalone
elevation_map_loader_node with
use_sequential_load:=true.
- Provide nonempty
PointCloudMapMetaData so the timer calls
receiveMap().
- 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.
Checklist
Description
When
use_sequential_load=true,ElevationMapLoaderNoderequests pointcloud map cells from
GetSelectedPointCloudMapinside 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_nodeexecutable is registeredwithout an
EXECUTORoption, so its generated entry point uses aSingleThreadedExecutor. The package's launch file starts thisexecutable with a
<node>action; it does not load the component intoa 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 callsreceiveMap().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
GetSelectedPointCloudMapservice with selected map loadingenabled and at least one map cell available.
service. The current launch file remaps
service/get_selected_pcd_map,while the client uses
service/get_selected_pointcloud_map. Correctthe remap in a test copy of the launch file, or provide the service
at the client's resolved name.
elevation_map_loader_nodewithuse_sequential_load:=true.PointCloudMapMetaDataso the timer callsreceiveMap().logging
Waiting for responsewithout completing map loading.Versions
2e7f15416f75031ee13532417b9ab452eba94990.Possible causes
receiveMap()blocks the timer callback with repeatedfuture.wait_for(1s)calls.
wait_for()does not spin the ROS executor. One possible fix isto 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_loadtofalse, sothis 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.