Tutorial 6: Global Maps
This tutorial explains how shared world layers are added on top of the robot-description flow.
The curated SDK now keeps each major map family in its own registration example so the behavior is easy to isolate:
- occupancy grid
- pointcloud
- dense mesh
- octomap
Goal
By the end of this step, you should understand:
- why map layers are documented separately from the base robot-description registration
- which map family matches which operator need
- how the SDK expresses these as workspace-level DataViz layers
Occupancy grid
Use this when you want the clearest 2D navigation context:
world_layers.add_occupancy_grid(
"/map",
frame_id="map",
render_options={"color_free": "#222222", "color_occupied": "#F4F4F4", "alpha": 0.85},
)
Reference script:
python/examples/occupancy_map_registration.py
Pointcloud
Use this when the source data is a dense point set and you want direct spatial evidence instead of a meshed surface:
world_layers.add_3d_map(
"/map_3d",
frame_id="map",
render_options={
"point_size": 0.055,
"render_all_points": True,
"visible_points_budget": 180000,
"color": "#6ED7FF",
},
)
Reference script:
python/examples/pointcloud_map_registration.py
Dense mesh
Use this when you want a more solid environmental surface:
world_layers.add_3d_mesh(
"/map_3d_mesh",
frame_id="map",
render_options={"max_triangles": 220000, "use_vertex_colors": True},
)
Reference script:
python/examples/mesh_map_registration.py
Octomap
Use this when the runtime already provides an octomap-oriented representation and you want HORUS to mirror that layer directly:
world_layers.add_3d_octomap(
"/map_3d_octomap_mesh",
frame_id="map",
render_options={
"render_mode": "surface_mesh",
"native_topic": "/map_3d_octomap",
"max_triangles": 120000,
},
)
Reference script:
python/examples/octomap_registration.py
Why these are separate examples
This is one of the places where the curated examples are intentionally not over-generalized.
The point is not to build one script with ten flags. The point is to give you one clean registration per map family so you can copy the one that matches your runtime.
Validation path
All of these builds on the same robot-description fake runtime:
python3 python/examples/tools/fetch_robot_description_assets.py
Then choose one:
python3 python/examples/legacy/fake_tf_robot_description_suite.py --robot-profile real_models --publish-occupancy-grid
python3 python/examples/occupancy_map_registration.py
python3 python/examples/legacy/fake_tf_robot_description_suite.py --robot-profile real_models --map-3d-mode pointcloud --map-3d-profile realistic
python3 python/examples/pointcloud_map_registration.py
What comes next
The final tutorial moves from simulated infrastructure to real ROS graphs. Continue with Tutorial 7: Live robot checklist.