costmap-architecture

Explains Nav2 costmap layer ordering, combination methods, and timing parameters for ROS 2 configuration.

Updated Aug 16, 2026
One-click install
npx skills add https://github.com/three1324/yeonjinautomotive --skill costmap-architecture-three1324
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: costmap-architecture
Source: https://github.com/three1324/yeonjinautomotive/tree/main/.claude/skills/costmap-architecture
Command: npx skills add https://github.com/three1324/yeonjinautomotive --skill costmap-architecture-three1324

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Misconfigured Nav2 costmap plugin ordering causes subtle navigation bugs, such as dynamic obstacles not being inflated or layers overwriting each other's cost data. This Skill provides the architectural knowledge needed to configure costmap YAML correctly the first time. ## Core Features & Use Cases - Plugin Order Rules: Documents the strict sequential processing of the costmap plugins list, including the rule that inflation_layer must always be last. - Combination Method Reference: Explains Overwrite, Maximum, and MaxWithoutUnknownOverwrite modes and when each applies to static, obstacle, voxel, and range layers. - Timing and Cell Value Guidance: Covers update_frequency, publish_frequency, transform_tolerance, and the meaning of costmap cell values 0-255. - Use Case: When writing a local_costmap configuration for a ROS 2 robot, use this Skill to verify layer ordering, choose combination methods, and set update rates so dynamic obstacles are properly inflated. ## Quick Start Ask the AI to review your Nav2 costmap YAML configuration and verify the plugin ordering and combination methods are correct.

Frequently Asked Questions about costmap-architecture

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
What is the correct plugin order for Nav2 costmap layers?

The inflation_layer must always be last in the plugins list because it reads lethal and inscribed cells from all prior layers to generate the cost gradient. Global costmaps use static_layer first, then obstacle layers, then inflation; local costmaps use obstacle or voxel layers, then range_sensor_layer, then inflation.

Why are my dynamic obstacles not being inflated in Nav2?

This happens when inflation_layer appears before obstacle or voxel layers in the plugins list. Layers write sequentially into the master grid, so any layer after inflation overwrites the gradient. Move inflation_layer to the end of the list.

What do Nav2 costmap combination methods 0, 1, and 2 mean?

Combination method 0 (Overwrite) replaces master grid cells, used by static_layer. Method 1 (Maximum) keeps the higher cost, suiting obstacle and voxel layers. Method 2 (MaxWithoutUnknownOverwrite) behaves like Maximum but unknown cells do not overwrite known values.

Does the order of observation_sources matter in a costmap layer?

No, the observation_sources list within a single layer is not order-dependent. All sources are buffered and processed together during the same layer update cycle, unlike the plugins list which is strictly sequential.

How do update_frequency and publish_frequency differ in Nav2 costmaps?

update_frequency controls how often layers process sensor data and refresh the grid, affecting responsiveness and CPU load. publish_frequency only controls how often the costmap is published for RViz or external consumers and can be set lower or to 0.0 to save bandwidth.

What do costmap cell values 253, 254, and 255 mean?

Value 254 marks lethal obstacle cells that planners treat as impassable. Value 253 is the inscribed cost where the robot center collides. Value 255 means unknown space, while 0 is free and 1-252 form the inflation gradient biasing paths away from obstacles.