ROS Resources: Documentation | Support | Discussion Forum | Service Status | Q&A

[Nav2] New Controller Plugin: Regulated Pure Pursuit!

Hi all, its your friendly neighborhood navigator here,

I wanted to announce another new and awesome algorithm we have available exclusively in the Nav2 stack: Regulated Pure Pursuit Controller!

Do you have a robot? (if you don’t, what are you doing here? Go play video games or buy a Hadabot or something)

Do you like it when your robot follows paths really well and doesn’t run into stuff? (I love not getting calls at 10pm from customers that my robot hit a kid)

Do you want your robot to stop when there’s something blocking your path and waiting until the path planner updates the path? (Commonly requested, DWB/TEB will plan around itself, but not always desirable)

Boy, are you in luck.

The Regulated Pure Pursuit controller implements a variation on the Pure Pursuit controller that specifically targets service / industrial / consumer robot needs. It regulates the linear velocities by in high curvature turns to help reduce overshoot at high speeds and takes blind corners (like coming in or out of a retail or warehouse aisle, in malls, airports, factories, and more) more safely by slowing with active preemptive collision detection. It also has heuristics to slow in proximity to other obstacles so that you can slow the robot automatically when nearby potential collisions. That way you’re safe when moving very close to very expensive physical infrastructure as well as these things that keep moving around (humans I think people call them? I just see dynamic obstacles).

It also better follows paths than any other variation currently available of Pure Pursuit. It also implements the Adaptive lookahead point features to be scaled by velocities to enable more stable behavior in a larger range of translational speeds. It also has optional parameterizations to enable several other variants on Pure Pursuit if you like. It also has will rotate your robot to goal or rough path orientation when working with non-feasible trajectories common for differential drive robots like A* / Dijkstras. It also has… actually, just check it out yourself, there’s more!

The full configuration guide can be found on, like any other Nav2 package. This controller also boasts 93% unit test coverage and has been tested on simulation and on hardware robots deployed today.

Further, this now closes the loop on Ackermann and Quadruped robots in Nav2. Long ago were the days that Nav2 only had suitable algorithms for differential and omnidirectional robots. Now we have first-class support for cars and car-like robots, legged robots, and more! We’re just 1 more algorithm shy from covering the complete bases of all conceivable ground-based robot configurations with algorithm plugin support (coming shortly 2021).

Remember, this project, and many more, are part of the ROS2 Navigation Working Group. If you’re a student, professional, professor, or just interested in robotics, consider joining the working group meetings every other Thursday! You can add yourself to our calendar at the bottom of this page and join our community slack here! Introduce yourself on #on-boarding and I look forward to working with you on finding an interesting project for you to join or work on to accelerate the broader ROS2 Navigation ecosystem :slight_smile: We have projects for all skill levels, expertise areas, and time commitments. All you need is interest, follow-through, and a computer!

Happy following,