Back to Systems System 01

Hybrid A* Path
Planner

ROS2 C++ Hybrid A* Dubins Paths Nav2 Plugin API Costmap2D Non-holonomic Ongoing
Hybrid A* Algorithm Demo
assets/videos/hybrid_astar_demo.mp4
Problem

Standard A* produces paths on a discrete grid that violate differential drive kinematics. The resulting zig-zag trajectories require the robot to stop and turn in place at each grid cell transition โ€” making smooth autonomous navigation in cluttered competition environments impossible without fundamental re-engineering of the planning layer.

Approach

Implemented Hybrid A* with continuous state expansion in (x, y, ฮธ) โ€” replacing the discrete grid with kinematically feasible motion primitives using Dubins path curves. This enforces curvature bounds that reflect the robot's minimum turning radius, producing trajectories that a differential drive can follow without stopping. A velocity profiler then generates smooth, dynamically feasible speed profiles tuned to the robot's physical constraints, and the planner integrates directly with Nav2's Costmap2D for collision checking.

System Architecture
Laptop (ROS2 Humble) โ”‚ โ”œโ”€โ”€ AMCL Localisation (pose estimate) โ”‚ โ”œโ”€โ”€ Nav2 Planner Server โ”‚ โ””โ”€โ”€ Hybrid A* Plugin (C++) โ† custom โ”‚ โ”œโ”€โ”€ State Expansion (x, y, ฮธ) โ”‚ โ”œโ”€โ”€ Dubins Primitive Generator โ”‚ โ”œโ”€โ”€ Heuristic: Holonomic-with-obstacles โ”‚ โ”œโ”€โ”€ Costmap2D Collision Check โ”‚ โ””โ”€โ”€ Path โ†’ Velocity Profiler โ”‚ โ”œโ”€โ”€ Nav2 Controller Server โ”‚ โ””โ”€โ”€ Twist Commands โ†’ /cmd_vel โ”‚ โ”œโ”€โ”€ Jetson Nano โ”‚ โ””โ”€โ”€ STM32 Controller (Serial) โ”‚ โ”œโ”€โ”€ Motor Driver Left โ”‚ โ””โ”€โ”€ Motor Driver Right โ”‚ โ””โ”€โ”€ Differential Drive Chassis
Implementation Details

Engineered natively as a custom C++ Nav2 global planner plugin, implementing the nav2_core::GlobalPlanner interface for drop-in compatibility with any standard ROS2 navigation setup. The Dubins primitive generator constructs kinematically feasible arc segments that respect the robot's curvature constraints at each expansion step. The holonomic-with-obstacles heuristic guides search efficiently even in high-obstacle-density environments. Integrates with Nav2's lifecycle management and Costmap2D infrastructure without any changes to the broader stack.

Visualisations & Testing
Drop screenshots and photos into assets/images/testing/ and assets/images/hardware/
Result

Robot successfully navigates highly cluttered environments using smooth, dynamically feasible trajectories โ€” no stop-and-turn mechanics. The planner drops in as a replacement for Nav2's default GlobalPlanner and works transparently with the rest of the navigation stack, enabling competition-grade autonomous navigation without modifying the broader system.

View on GitHub Next: Swerve Planner โ†’