Hello, ROS community,
I’m excited to share that Black Coffee Robotics has open-sourced a ROS2 package implementing the Vector Pursuit algorithm. This geometric path-tracking algorithm considers both the position and orientation of a path, offering high accuracy and speed while remaining computationally light and simple to deploy.
Motivation for the work
My team and I have been working with AMRs, and other vessels for nearly a decade, and have often utilized ROS (and now ROS2) packages for navigation. Those in the industry would note that most startups begin by utilizing open-source projects such as move_base, or nav2, and the default controllers such as Pure Pursuit, or DWA/DWB. On edge devices with limited computing power and memory, usage of TEB/MPC-based approaches can be ruled out, if not DWA/DWB itself.
While Pure Pursuit based approaches have been the load bearer of most open-source-reliant industrial deployments, its limitations are easy to see at any place involving tight turns, and general oscillations at higher speeds (also described in the original paper itself). Vector Pursuit, a lesser-known algorithm has been around for a few years, and we have had success using and deploying it on real-world AMR applications in the past (we wrote a different ROS1 version at the time). In our experience (and consistent with theoretical expectations), it substantially outperformed Pure Pursuit in terms of tracking performance, and “smoothness” of motion. More details and comparisons are in the original thesis
While RPP (ROS2 default controller) improves upon the native Pure Pursuit, primarily utilizing a dynamic lookahead distance, it still lacks the orientation tracking that Vector Pursuit provides - that’s just how the algorithm was designed back in 1992
We have now decided to open-source this implementation and make it available to the wider community. The goal is to make robot navigation easier, and better for everyone - especially those in the early stage of their development and business.
Potential benefits:
-
Improved tracking performance compared to Pure Pursuit.
-
Better performance, and lower computational requirements than DWB
Some Design Choices
-
We have decided to release this as a nav2 controller plugin because many robots run nav2, and it makes natural sense to have it as a plugin, instead of a standalone package.
-
We have kept the package parameters, and code structure as close to the default nav2 controller (RPP) as possible. This should make it easier for existing users to switch to this controller, or use it in parallel.
Planned next steps
-
Binary release for easy installation
-
More hardware trials and feedback: While the algorithm itself is field tested, this plugin has thus far been tested in simulations and a home build robot. We will try to test it on industrial-grade hardware during our future projects, and also look forward to hearing from anyone else who does.
-
Potential merge with nav2: We would like to do this asap, but we need to ensure that the community is happy with the implementation and stable enough for a merge. @smac - we would love to hear your thoughts on this, and if there are any set of steps/guidelines/tests for a new plugin to be - either merged by nav2 or if not that - be listed in the documentation as a “nav2 compliant” unofficial plugin that can be maintained separately.
We hope it proves beneficial to the community, and we look forward to your feedback and contributions!
Release Blog: Vector Pursuit Controller Plugin Release
https://github.com/blackcoffeerobotics/vector_pursuit_controller