From 13d30508619c63d955f1dfbd9f79c9c6638c6782 Mon Sep 17 00:00:00 2001 From: Kostubh Khandelwal Date: Tue, 8 Oct 2024 15:35:01 +0000 Subject: [PATCH] Description refactoring and reordering --- setup_guides/algorithm/select_algorithm.rst | 10 +++++----- tuning/index.rst | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/setup_guides/algorithm/select_algorithm.rst b/setup_guides/algorithm/select_algorithm.rst index 80979cf40..2874d1026 100644 --- a/setup_guides/algorithm/select_algorithm.rst +++ b/setup_guides/algorithm/select_algorithm.rst @@ -77,11 +77,11 @@ The default controller plugin is the `DWB controller `_ . It implements the `Vector Pursuit algorithm `_ 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. +Next example of a controller server plugin is the `TEB controller `_ 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. -Another example of a controller server plugin is the `TEB controller `_ 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. +Another example for this section is the `Regulated Pure Pursuit controller (RPP) `_ . 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. -The last example for this section is the `Regulated Pure Pursuit controller (RPP) `_ . 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. +The last example is the `Vector Pursuit Controller `_ . It implements the `Vector Pursuit algorithm `_ 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. Summary ------- @@ -89,8 +89,6 @@ Summary +-----------------+---------------------------------------------------+----------------------------+ | Plugin Name | Supported Robot Types | Task | +=================+===================================================+============================+ -| VP controller | Differential, Ackermann, Legged | High speed path tracking | -+-----------------+---------------------------------------------------+----------------------------+ | DWB controller | Differential, Omnidirectional | Dynamic obstacle avoidance | +-----------------+---------------------------------------------------+ | | TEB Controller | Differential, Omnidirectional, Ackermann, Legged | | @@ -99,6 +97,8 @@ Summary +-----------------+---------------------------------------------------+----------------------------+ | MPPI controller | Differential, Ackermann, Legged, Omnidirectional | Modern MPC controller | +-----------------+---------------------------------------------------+----------------------------+ +| VP controller | Differential, Ackermann, Legged | High speed path tracking | ++-----------------+---------------------------------------------------+----------------------------+ All of these algorithms work for both circular and non-circular robots. diff --git a/tuning/index.rst b/tuning/index.rst index a55906eeb..5e9495e89 100644 --- a/tuning/index.rst +++ b/tuning/index.rst @@ -86,8 +86,6 @@ 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 | -+----------------+---------------------------------------------------+----------------------------+ | DWB controller | Differential, Omnidirectional | Dynamic obstacle avoidance | +----------------+---------------------------------------------------+ | | MPPI Controller| Differential, Omnidirectional, Ackermann, Legged | Dynamic obstacle avoidance | @@ -96,18 +94,20 @@ In general though, the following table is a good first-order description of the +----------------+---------------------------------------------------+----------------------------+ | Rotation Shim | Differential, Omnidirectional | Rotate to rough heading | +----------------+---------------------------------------------------+----------------------------+ +| VP controller | Differential, Ackermann, Legged | High speed path tracking | ++----------------+---------------------------------------------------+----------------------------+ All of the above controllers can handle both circular and arbitrary shaped robots in configuration. 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. - 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. -Finally, the Rotation Shim Plugin helps assist plugins like TEB and DWB (among others) to rotate the robot in place towards a new path's heading before starting to track the path. This allows you to tune your local trajectory planner to operate with a desired behavior without having to worry about being able to rotate on a dime with a significant deviation in angular distance over a very small euclidean distance. Some controllers when heavily tuned for accurate path tracking are constrained in their actions and don't very cleanly rotate to a new heading. Other controllers have a 'spiral out' behavior because their sampling requires some translational velocity, preventing it from simply rotating in place. This helps alleviate that problem and makes the robot rotate in place very smoothly. +The Rotation Shim Plugin helps assist plugins like TEB and DWB (among others) to rotate the robot in place towards a new path's heading before starting to track the path. This allows you to tune your local trajectory planner to operate with a desired behavior without having to worry about being able to rotate on a dime with a significant deviation in angular distance over a very small euclidean distance. Some controllers when heavily tuned for accurate path tracking are constrained in their actions and don't very cleanly rotate to a new heading. Other controllers have a 'spiral out' behavior because their sampling requires some translational velocity, preventing it from simply rotating in place. This helps alleviate that problem and makes the robot rotate in place very smoothly. + +Finally, 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. Vector Pursuit can handle complex paths at high speeds, but it is still a simple geometric controller thus requiring low computation resources. .. note:: These are simply the default and available plugins from the community. For a specific robot platform / company, you may also choose to use none of these and create your own. See the :ref:`writing_new_nav2controller_plugin` tutorial for more details. If you're willing to contribute this work back to the community, please file a ticket or contact a maintainer! They'd love to hear from you.