Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Source: `~/nav2_ws/src/navigation2/`
.claude/skills/harunkurtdev-nav2-planner-plugins/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 52% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 280% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 163% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 42% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 19% | 0% |
Source: ~/nav2_ws/src/navigation2/
Package: nav2_planner Actions: ComputePathToPose, ComputePathThroughPoses Plugin Base: nav2_core::GlobalPlanner Service: is_path_valid - Validate paths against current costmap
Package: nav2_navfn_planner Plugin: nav2_navfn_planner::NavfnPlanner Algorithm: Dijkstra / A navigation function Best for: General purpose, circular robots
yamlGridBased: plugin: "nav2_navfn_planner::NavfnPlanner" tolerance: 0.5 # Goal relaxation (meters) when obstructed use_astar: true # A* (true) vs Dijkstra (false) allow_unknown: true # Plan through unknown space use_final_approach_orientation: false # Use goal orientation
COST_NEUTRAL = 50, COST_FACTOR = 0.8POT_HIGH = 1.0e10 (unassigned potential)Package: nav2_smac_planner Three plugins with shared templated A core.
Plugin: nav2_smac_planner::SmacPlanner2D Algorithm: 2D A (8-connected or 4-connected) Best for: Circular robots, open spaces
yamlGridBased: plugin: "nav2_smac_planner::SmacPlanner2D" tolerance: 0.125 allow_unknown: true max_iterations: 1000000 max_on_approach_iterations: 1000 max_planning_time: 5.0 cost_travel_multiplier: 2.0 downsample_costmap: false smooth_path: true
Plugin: nav2_smac_planner::SmacPlannerHybrid Algorithm: Hybrid-A with SE2 search (x, y, theta) Best for: Ackermann, car-like, legged, non-circular robots
Motion Models:
DUBIN - Forward only (symmetric)REEDS_SHEPP - Forward + reverseKey Features:
yamlGridBased: plugin: "nav2_smac_planner::SmacPlannerHybrid" tolerance: 0.25 allow_unknown: true max_iterations: 1000000 max_on_approach_iterations: 1000 max_planning_time: 5.0 angle_quantization_bins: 72 minimum_turning_radius: 0.40 motion_model_for_search: "REEDS_SHEPP" cost_travel_multiplier: 2.0 # Penalties reverse_penalty: 2.0 # Reeds-Shepp only change_penalty: 0.0 # Direction change non_straight_penalty: 1.2 # Non-straight motion cost_penalty: 2.0 # Obstacle proximity retrospective_penalty: 0.015 # Prefer later maneuvers # Analytic expansion analytic_expansion_ratio: 3.5 analytic_expansion_max_length: 3.0 analytic_expansion_max_cost: 200 # Performance cache_obstacle_heuristic: true # 40x speedup between replans downsample_costmap: false smooth_path: true debug_visualizations: false
Plugin: nav2_smac_planner::SmacPlannerLattice Algorithm: State lattice with configurable motion primitives Best for: Arbitrary shaped robots, full drivetrain capabilities
Provided Control Sets:
yamlGridBased: plugin: "nav2_smac_planner::SmacPlannerLattice" tolerance: 0.25 allow_unknown: true max_iterations: 1000000 max_planning_time: 5.0 lattice_filepath: "" # Path to lattice primitives file rotation_penalty: 5.0 # Same penalty/expansion params as Hybrid
yamlsmoother: max_iterations: 1000 w_smooth: 0.3 w_data: 0.2 tolerance: 1.0e-10 do_refinement: true
Package: nav2_theta_star_planner Plugin: nav2_theta_star_planner::ThetaStarPlanner Algorithm: Lazy Theta P (any-angle planning) Best for: Smooth paths, smaller robots
A with line-of-sight (LOS) checks. When parent can see neighbor directly, connects them bypassing intermediate nodes. Produces naturally smooth paths without post-processing.
g(neigh) = g(curr) + w_euc_cost * euclidean_dist +
w_traversal_cost * (costmap_cost / LETHAL)^2
h(neigh) = w_heuristic_cost * euclidean_dist(neigh, goal)
f = g + hWhen LOS succeeds: g(neigh) = g(parent) instead of g(curr).
yamlGridBased: plugin: "nav2_theta_star_planner::ThetaStarPlanner" how_many_corners: 8 # 4 or 8 connected w_euc_cost: 1.0 # Path length weight (tautness) w_traversal_cost: 2.0 # Costmap traversal weight allow_unknown: true terminal_checking_interval: 5000 use_final_approach_orientation: false
w_traversal_cost → paths center in free space (more expansions)w_euc_cost → taut, straight pathsPackage: nav2_route Actions: ComputeRoute, ComputeAndTrackRoute Service: set_route_graph (swap graphs at runtime)
Not a planner plugin - standalone server for pre-defined navigation graphs.
Components:
RoutePlanner - Dijkstra's on graph with KD-tree nearest-neighborRouteTracker - Real-time route execution monitoringEdgeScorer plugins - Cost functions for edgesRouteOperation plugins - Actions at nodes/edges (doors, speed limits)GraphFileLoader - GeoJSON graph format (default)yamlroute_server: ros__parameters: base_frame: "base_link" route_frame: "map" path_density: 0.05 # Points per meter in dense path max_planning_time: 5.0 smooth_corners: true smoothing_radius: 0.5 graph_filepath: "path/to/graph.geojson" graph_file_loader: "nav2_route::GeoJsonGraphFileLoader" edge_cost_functions: ["distance_scorer"] operations: ["adjust_speed_limit"] radius_to_achieve_node: 0.5 enable_nn_search: true
| Feature | NavFn | Smac 2D | Smac Hybrid | Smac Lattice | Theta | Route | |---------|-------|---------|-------------|--------------|--------|-------| | Algorithm | Dijkstra/A | Grid A | Hybrid-A SE2 | State Lattice | A+LOS | Graph Dijkstra | | Robot Type | Circular | Circular | Non-circular | Any shape | Circular | Any | | Kinematic | No | No | Yes | Yes | No | N/A | | Reverse | N/A | N/A | Reeds-Shepp | Yes | N/A | N/A | | Speed | ~146ms | ~243ms | ~144ms | ~113ms | ~46ms | <<1ms | | Path Quality | Good | Better | Best | Best | Good (smooth) | Pre-defined | | Smoothing | Auto | Yes | Yes | Limited | Auto | Optional | | Multi-res | No | Yes | Yes | Yes | No | N/A |
NavFn can have path discontinuity artifacts
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-20 | pass→pass | 12,956 | 13,720 | +6% | 1 | 1 | 0% | 2,652 | 5,358 | +102% | 0 | 0 | — |
case-01 | fail→fail | 16,571 | 10,525 | -36% | 1 | 1 | 0% | 3,067 | 4,530 | +48% | 0 | 0 | — |
case-02 | fail→fail | 14,218 | 9,156 | -36% | 1 | 1 | 0% | 2,456 | 4,134 | +68% | 0 | 0 | — |
case-03 | fail→pass | 20,236 | 14,533 | -28% | 1 | 1 | 0% | 3,452 | 5,256 | +52% | 0 | 0 | — |
case-04 | fail→pass | 5,261 | 4,872 | -7% | 1 | 1 | 0% | 886 | 3,371 | +280% | 0 | 0 | — |
case-05 | pass→pass | 14,028 | 4,565 | -67% | 1 | 1 | 0% | 2,326 | 3,303 | +42% | 0 | 0 | — |
case-06 | fail→pass | 6,192 | 3,435 | -45% | 1 | 1 | 0% | 1,182 | 3,112 | +163% | 0 | 0 | — |
case-07 | pass→pass | 8,312 | 4,665 | -44% | 1 | 1 | 0% | 1,304 | 3,288 | +152% | 0 | 0 | — |
case-08 | pass→pass | 11,326 | 5,074 | -55% | 1 | 1 | 0% | 2,000 | 3,436 | +72% | 0 | 0 | — |
case-09 | fail→pass | 13,477 | 5,886 | -56% | 1 | 1 | 0% | 2,476 | 3,509 | +42% | 0 | 0 | — |
case-19 | fail→pass | 17,755 | 5,937 | -67% | 1 | 1 | 0% | 2,974 | 3,532 | +19% | 0 | 0 | — |
case-10 | fail→pass | 8,939 | 3,717 | -58% | 1 | 1 | 0% | 1,678 | 3,162 | +88% | 0 | 0 | — |
case-11 | pass→pass | 6,161 | 4,078 | -34% | 1 | 1 | 0% | 1,128 | 3,143 | +179% | 0 | 0 | — |
case-12 | fail→pass | 17,493 | 15,504 | -11% | 1 | 1 | 0% | 3,139 | 5,336 | +70% | 0 | 0 | — |
case-13 | fail→pass | 8,842 | 3,285 | -63% | 1 | 1 | 0% | 1,562 | 3,026 | +94% | 0 | 0 | — |
case-14 | fail→pass | 19,146 | 11,793 | -38% | 1 | 1 | 0% | 3,099 | 4,573 | +48% | 0 | 0 | — |
case-15 | fail→pass | 15,112 | 4,249 | -72% | 1 | 1 | 0% | 2,751 | 3,131 | +14% | 0 | 0 | — |
case-16 | fail→pass | 4,688 | 3,474 | -26% | 1 | 1 | 0% | 750 | 3,224 | +330% | 0 | 0 | — |
case-17 | pass→pass | 11,558 | 4,996 | -57% | 1 | 1 | 0% | 2,248 | 3,453 | +54% | 0 | 0 | — |
case-18 | fail→pass | 11,265 | 1,816 | -84% | 1 | 1 | 0% | 1,827 | 2,773 | +52% | 0 | 0 | — |
case-21 | pass→pass | 3,186 | 2,968 | -7% | 1 | 1 | 0% | 620 | 3,043 | +391% | 0 | 0 | — |
case-22 | pass→pass | 9,034 | 8,094 | -10% | 1 | 1 | 0% | 1,698 | 4,115 | +142% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +55 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.