Skip to content

Add layered global map composition and Nav2 observation demo#1

Closed
SamuelFoo wants to merge 15 commits into
epic/next-gen-basefrom
feat/layered-global-map
Closed

Add layered global map composition and Nav2 observation demo#1
SamuelFoo wants to merge 15 commits into
epic/next-gen-basefrom
feat/layered-global-map

Conversation

@SamuelFoo

@SamuelFoo SamuelFoo commented Jul 13, 2026

Copy link
Copy Markdown
Owner

Summary

  • add layered-map observation messages and a server that composes static occupancy with ordered, expiring per-source region updates
  • add a three-robot Nav2 demo that converts each robot's local laser endpoints into regions and combines them in the global /map
  • spawn deterministic clutter near the three stationary robots and open a separate RViz view for the composed map
  • keep the experiment localization-only: no RMF planning, Nav2 planner, or controller nodes are launched
  • expose beam_stride and publish_period_sec so the representation/update-rate trade-off can be evaluated directly

Demo

ros2 launch rmf_layered_map_server_demo nav2_observations.launch.py

SamuelFoo added 15 commits July 9, 2026 02:28
Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Introduce MapRegionPatch so one MapRegionUpdate can carry multiple clear and obstacle patches from the same observation snapshot. Move patch-specific action, occupancy value, TTL, and region geometry out of MapRegionUpdate, leaving the update to describe the source, optional reset_source operation, and ordered patch list. Use std_msgs/Header and robot_pose on MapObservationSource, and express TTLs as seconds so rmf_layered_map_msgs no longer depends directly on builtin_interfaces.

Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Update the layered map server and callers for MapRegionUpdate.patches: reset_source is applied before patches from the same snapshot, clear-space patches are sorted before obstacle patches for deterministic clear-then-mark behavior, older snapshots are rejected per source/map timestamp, and the demo/test helpers now populate MapRegionPatch, Header, and TTL seconds while the server package drops its unused direct builtin_interfaces dependency.

Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
Define robot_pose in the observation header frame, transform supported region geometry before rasterization, and reject updates whose frame does not match the static map.

Signed-off-by: SamuelFoo <fooenzesamuel@gmail.com>
@SamuelFoo
SamuelFoo force-pushed the feat/layered-global-map branch from 6a89c2c to 2f8c0c7 Compare July 13, 2026 18:34
@SamuelFoo

SamuelFoo commented Jul 13, 2026

Copy link
Copy Markdown
Owner Author

Superseded by #2. This PR was opened against the wrong base.

@SamuelFoo SamuelFoo closed this Jul 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant