[Nav2] Smoothers & Constraints & Feasibility

Hi all, your friendly neighborhood navigator here.

In an extension to the announcement in https://discourse.ros.org/t/nav2-path-smoother-server-plugins-tutorial-new-architectural-diagram-oh-my, we now have a nice, awesome smoother that was recently added to Nav2 by RoboTech Vision after significantly refining an early prototype from 2019 I created as part of the Smac Planner.

The nav2_constrained_smoother is an optimization-based smoother leveraging Ceres to smooth out kinematically feasible (and other) paths using curvature, smoothness, obstacle, and regularity constraints. This allows us to smooth out feasible paths to remain feasible, and potentially even make infeasible paths feasible via the minimizing curvature constraints. Additionally, you may remove the minimum curvature constraint to use it for its obstacle aware-ness and other smoothing terms to create improved path plans from search or sampling based methods.

Above shows how Nav2 Constrained Smoother can improve quality of an input path (cyan, intentionally poor path to highlight the power of the smoother), increasing its smoothness and distance from obstacles. Resulting path is marked by green color.

It is a great addition to our small family of smoothing algorithms and covers the minimum basis of algorithms that should handle a standard deviation of Nav2 user needs!

You can find all the documentation on our website: Constrained smoother — Navigation 2 1.0.0 documentation and the source code in the Nav2 project navigation2/nav2_constrained_smoother at main · ros-planning/navigation2 · GitHub.

To boot, we even have a tutorial to help you add a new smoother to your behavior tree: Adding a Smoother to a BT — Navigation 2 1.0.0 documentation

Happy smoothing,