Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Vector Pursuit Controller #596

Merged
merged 3 commits into from
Oct 8, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 33 additions & 28 deletions plugins/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -103,34 +103,39 @@ Costmap Filters
Controllers
===========

+--------------------------------+--------------------+----------------------------------+-----------------------+
| Plugin Name | Creator | Description | Drivetrain support |
+================================+====================+==================================+=======================+
| `DWB Controller`_ | David Lu!! | A highly configurable DWA | Differential, |
| | | implementation with plugin | Omnidirectional, |
| | | interfaces | Legged |
+--------------------------------+--------------------+----------------------------------+-----------------------+
| `TEB Controller`_ | Christoph Rösmann | A MPC-like controller suitable | **Ackermann**, Legged,|
| | | for ackermann, differential, and | Omnidirectional, |
| | | holonomic robots. | Differential |
+--------------------------------+--------------------+----------------------------------+-----------------------+
| `Regulated Pure Pursuit`_ | Steve Macenski | A service / industrial robot | **Ackermann**, Legged,|
| | | variation on the pure pursuit | Differential |
| | | algorithm with adaptive features.| |
+--------------------------------+--------------------+----------------------------------+-----------------------+
| `MPPI Controller`_ | Steve Macenski | A predictive MPC controller with | Differential, Omni, |
| | Aleksei Budyakov | modular & custom cost functions | **Ackermann** |
| | | that can accomplish many tasks. | |
+--------------------------------+--------------------+----------------------------------+-----------------------+
| `Rotation Shim Controller`_ | Steve Macenski | A "shim" controller to rotate | Differential, Omni, |
| | | to path heading before passing | model rotate in place |
| | | to main controller for tracking.| |
+--------------------------------+--------------------+----------------------------------+-----------------------+
| `Graceful Controller`_ | Alberto Tudela | A controller based on a | Differential |
| | | pose-following control law to | |
| | | generate smooth trajectories. | |
+--------------------------------+--------------------+----------------------------------+-----------------------+

+--------------------------------+-----------------------+------------------------------------+-----------------------+
| Plugin Name | Creator | Description | Drivetrain support |
+================================+=======================+====================================+=======================+
| `DWB Controller`_ | David Lu!! | A highly configurable DWA | Differential, |
| | | implementation with plugin | Omnidirectional, |
| | | interfaces | Legged |
+--------------------------------+-----------------------+------------------------------------+-----------------------+
| `TEB Controller`_ | Christoph Rösmann | A MPC-like controller suitable | **Ackermann**, Legged,|
| | | for ackermann, differential, and | Omnidirectional, |
| | | holonomic robots. | Differential |
+--------------------------------+-----------------------+------------------------------------+-----------------------+
| `Regulated Pure Pursuit`_ | Steve Macenski | A service / industrial robot | **Ackermann**, Legged,|
| | | variation on the pure pursuit | Differential |
| | | algorithm with adaptive features. | |
+--------------------------------+-----------------------+------------------------------------+-----------------------+
| `MPPI Controller`_ | Steve Macenski | A predictive MPC controller with | Differential, Omni, |
| | Aleksei Budyakov | modular & custom cost functions | **Ackermann** |
| | | that can accomplish many tasks. | |
+--------------------------------+-----------------------+------------------------------------+-----------------------+
| `Rotation Shim Controller`_ | Steve Macenski | A "shim" controller to rotate | Differential, Omni, |
| | | to path heading before passing | model rotate in place |
| | | to main controller for tracking. | |
+--------------------------------+-----------------------+------------------------------------+-----------------------+
| `Graceful Controller`_ | Alberto Tudela | A controller based on a | Differential |
| | | pose-following control law to | |
| | | generate smooth trajectories. | |
+--------------------------------+-----------------------+------------------------------------+-----------------------+
| `Vector Pursuit Controller`_ | Black Coffee Robotics | A controller based on the vector | Differential, |
| | | pursuit algorithm useful for | Ackermann, Legged, |
| | | high speed accurate path tracking. | |
+--------------------------------+-----------------------+------------------------------------+-----------------------+

.. _Vector Pursuit Controller: https://github.com/blackcoffeerobotics/vector_pursuit_controller
.. _DWB Controller: https://github.com/ros-planning/navigation2/tree/main/nav2_dwb_controller
.. _TEB Controller: https://github.com/rst-tu-dortmund/teb_local_planner
.. _Regulated Pure Pursuit: https://github.com/ros-planning/navigation2/tree/main/nav2_regulated_pure_pursuit_controller
Expand Down
4 changes: 4 additions & 0 deletions setup_guides/algorithm/select_algorithm.rst
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ The default controller plugin is the `DWB controller <https://docs.nav2.org/conf

The ``DWB controller`` can be used on **circular or non-circular differential, and circular or non-circular omnidirectional** robots. It may also be configured for **ackerman and legged** robots if it is given a ``Trajectory Generation plugin`` that produces a set of possible trajectories that considers the robot's minimum curvature constraint.

Next example is the `Vector Pursuit Controller <https://github.com/blackcoffeerobotics/vector_pursuit_controller>`_ . It implements the `Vector Pursuit algorithm <https://apps.dtic.mil/sti/pdfs/ADA468928.pdf>`_ and calculates the command velocity using screw theory. This controller is suitable for high speed path tracking and sharp turns or when computation resources are limited. It can be used for **differential, ackermann, and legged** robots.
SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved

Another example of a controller server plugin is the `TEB controller <https://github.com/rst-tu-dortmund/teb_local_planner>`_ which is an MPC time optimal controller. It implements the Timed Elastic Band (TEB) approach which optimizes the robot's trajectory based on its execution time, distance from obstacles, and feasibility with respect to the robot's kinematic constraints. This controller can be used on **differential, omnidirectional, ackermann, and legged** robots.

The last example for this section is the `Regulated Pure Pursuit controller (RPP) <https://docs.nav2.org/configuration/packages/configuring-regulated-pp.html>`_ . This controller implements a variant of the pure pursuit algorithm with added regulation heuristic functions to manage collision and velocity constraints. This variation is implemented to target the needs of service or industrial robots and is suitable for use with **differential, ackermann, and legged** robots.
Expand All @@ -87,6 +89,8 @@ Summary
+-----------------+---------------------------------------------------+----------------------------+
| Plugin Name | Supported Robot Types | Task |
+=================+===================================================+============================+
| VP controller | Differential, Ackermann, Legged | High speed path tracking |
SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved
+-----------------+---------------------------------------------------+----------------------------+
| DWB controller | Differential, Omnidirectional | Dynamic obstacle avoidance |
+-----------------+---------------------------------------------------+ |
| TEB Controller | Differential, Omnidirectional, Ackermann, Legged | |
Expand Down
4 changes: 4 additions & 0 deletions tuning/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ In general though, the following table is a good first-order description of the
+----------------+---------------------------------------------------+----------------------------+
| Plugin Name | Supported Robot Types | Task |
+================+===================================================+============================+
| VP controller | Differential, Ackermann, Legged | High speed path tracking |
SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved
+----------------+---------------------------------------------------+----------------------------+
| DWB controller | Differential, Omnidirectional | Dynamic obstacle avoidance |
+----------------+---------------------------------------------------+ |
| MPPI Controller| Differential, Omnidirectional, Ackermann, Legged | Dynamic obstacle avoidance |
Expand All @@ -99,6 +101,8 @@ All of the above controllers can handle both circular and arbitrary shaped robot

Regulated Pure Pursuit is good for exact path following and is typically paired with one of the kinematically feasible planners (eg State Lattice, Hybrid-A\*, etc) since those paths are known to be drivable given hard physical constraints. However, it can also be applied to differential drive robots who can easily pivot to match any holonomic path. This is the plugin of choice if you simply want your robot to follow the path, rather exactly, without any dynamic obstacle avoidance or deviation. It is simple and geometric, as well as slowing the robot in the presence of near-by obstacles *and* while making sharp turns.

Vector Pursuit is another good path tracking solution and just like RPP, is paired with a kinematically feasible planner. It is a bit more advanced than RPP in the sense it also takes path heading into account and can handle more complex paths at higher speeds, but it is still a simple geometric controller thus requiring low computation resources.
SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved

DWB and MPPI are both options that will track paths, but also diverge from the path if there are dynamic obstacles present (in order to avoid them). DWB does this through scoring multiple trajectories on a set of critics. These trajectories are also generated via plugins that can be replaced, but support out of the box Omni and Diff robot types within the valid velocity and acceleration restrictions. These critics are plugins that can be selected at run-time and contain weights that may be tuned to create the desired behavior, such as minimizing path distance, minimizing distance to the goal or headings, and other action penalties that can be designed. This does require a bit of tuning for a given platform, application, and desired behavior, but it is possible to tune DWB to do nearly any single thing well.

MPPI on the other hand implements an optimization based approach, using randomly perturbed samples of the previous optimal trajectory to maximize a set of plugin-based objective functions. In that regard, it is similar to DWB however MPPI is a far more modern and advanced technique that will deal with dynamic agents in the environment and create intelligent behavior due to the optimization based trajectory planning, rather then DWB's constant action model. MPPI however does have moderately higher compute costs, but it is highly recommended to go this route and has received considerable development resources and attention due to its power. This typically works pretty well out of the box, but to tune for specific behaviors, you may have to retune some of the parameters. The README.md file for this package contains details on how to tune it efficiently.
Expand Down
Loading