Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
142e30b
:zap: add dwpp algorithm
Decwest Oct 6, 2025
5279665
Merge branch 'ros-navigation:main' into feature/implement_dwpp
Decwest Oct 8, 2025
547c54e
:recycle: modify to pass lint
Decwest Oct 11, 2025
b380815
Merge branch 'feature/implement_dwpp' of github.com:Decwest/navigatio…
Decwest Oct 11, 2025
53c5cd4
:recycle: delete unrelated files & test signed off
Decwest Oct 11, 2025
e2176e1
Revert ":recycle: delete unrelated files & test signed off"
Decwest Oct 11, 2025
df7b2af
Revert ":recycle: modify to pass lint"
Decwest Oct 11, 2025
318e917
:recycle: reformat & revert unintentional file change
Decwest Oct 11, 2025
68b6dd4
:recycle: change variable names for consistency
Decwest Oct 22, 2025
3d123ac
:refactor: modify value handling
Decwest Oct 22, 2025
7d2485f
:bug: fix type issue
Decwest Oct 22, 2025
e725917
:recycle: reformat
Decwest Oct 22, 2025
ff2b3cc
:zap: add minimum velocity configuration
Decwest Oct 22, 2025
3a57631
:zap: handle different accel and decel considering bidirectionality
Decwest Oct 23, 2025
e85780a
Merge branch 'ros-navigation:main' into feature/implement_dwpp
Decwest Oct 23, 2025
9033141
:recycle: refactor dwpp function to improve readability
Decwest Oct 23, 2025
8cb1fcb
Merge branch 'ros-navigation:main' into feature/implement_dwpp
Decwest Oct 23, 2025
79ea88b
:bug: fix regulation procedure of dynamic window during negative velo…
Decwest Oct 29, 2025
5d21f30
:bug: fix optimal velocity selection when moving backward
Decwest Oct 29, 2025
efb5795
Merge branch 'ros-navigation:main' into feature/implement_dwpp
Decwest Oct 29, 2025
0795c7d
:recycle: refactor for easy unit test
Decwest Oct 29, 2025
abb6c09
:zap: add unit test of computeDynamicWindow()
Decwest Oct 30, 2025
3da3e29
:zap: add and pass all unit test
Decwest Oct 30, 2025
1785233
:zap: update README
Decwest Oct 30, 2025
e9585d4
:memo: update README
Decwest Oct 30, 2025
cd170ab
:adhesive_bandage: fix hyperlink of README
Decwest Oct 30, 2025
ab82855
Merge branch 'main' into feature/implement_dwpp
Decwest Nov 25, 2025
de292df
:adhesive_bandage: dwpp defalut option set to false
Decwest Nov 25, 2025
d69470a
:adhesive_bandage: fix default values
Decwest Nov 25, 2025
469f8aa
:zap: add migration log of desired_linear_vel
Decwest Nov 27, 2025
c1fc519
:fire: remove velocity feedback parameter
Decwest Nov 27, 2025
6c6db20
:recycle: remove implicit return using tuple
Decwest Nov 27, 2025
735276c
:recycle: move dwpp functions to utils
Decwest Nov 27, 2025
36c540f
:recycle: use struct to represent dynamic window bounds
Decwest Nov 27, 2025
e01cc20
Merge branch 'ros-navigation:main' into feature/implement_dwpp
Decwest Nov 27, 2025
43acc07
:memo: modify docstring and readme
Decwest Nov 27, 2025
c91a092
Merge branch 'ros-navigation:main' into feature/implement_dwpp
Decwest Dec 10, 2025
5008a97
:bug: add computeVelocityCommands test to improve code coverage
Decwest Dec 10, 2025
5b0b8d3
:memo: fix default value of readme
Decwest Dec 10, 2025
3ec5367
:adhesive_bandage: delete unused function
Decwest Dec 10, 2025
45cb87f
:bug: add test dependency
Decwest Dec 10, 2025
c61debe
:recycle: use try-catch for deprecation warning
Decwest Dec 14, 2025
845fd41
:zap: handle comments
Decwest Dec 14, 2025
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
33 changes: 29 additions & 4 deletions nav2_regulated_pure_pursuit_controller/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,25 @@ Mixing the proximity and curvature regulated linear velocities with the time-sca

Note: The maximum allowed time to collision is thresholded by the lookahead point, starting in Humble. This is such that collision checking isn't significantly overshooting the path, which can cause issues in constrained environments. For example, if there were a straight-line path going towards a wall that then turned left, if this parameter was set to high, then it would detect a collision past the point of actual robot intended motion. Thusly, if a robot is moving fast, selecting further out lookahead points is not only a matter of behavioral stability for Pure Pursuit, but also gives a robot further predictive collision detection capabilities. The max allowable time parameter is still in place for slow commands, as described in detail above.

## Dynamic Window Pure Pursuit Features

This controller also implements the Dynamic Window Pure Pursuit (DWPP) algorithm, developed by [Fumiya Ohnishi](https://www.linkedin.com/in/fumiya-ohnishi-23b124202).
Unlike the standard Pure Pursuit, DWPP enables the consideration of velocity and acceleration constraints when computing velocity commands.
An overview of the algorithm can be found here: [DWPP Algorithm*](https://github.com/Decwest/nav2_dynamic_window_pure_pursuit_controller/blob/main/algorithm.md).
*Fumiya Ohnishi, Masaki Takahashi, "Dynamic Window Pure Pursuit for Robot Path Tracking Considering Velocity and Acceleration Constraints", Proceedings of the 19th International Conference on Intelligent Autonomous Systems (IAS-19), Genoa, Italy, 2025.

## Configuration

| Parameter | Description |
|-----|----|
| `desired_linear_vel` | The desired maximum linear velocity to use. |
| `max_linear_vel` | The maximum linear velocity to use. Previously `desired_linear_vel` |
| `max_angular_accel` | The maximum angular acceleration to use. |
| `min_linear_vel` | The minimum linear velocity used when `use_dynamic_window` is `true`. |
| `max_angular_vel` | The maximum angular velocity used when `use_dynamic_window` is `true`. |
| `min_angular_vel` | The minimum angular velocity used when `use_dynamic_window` is `true`. |
| `max_linear_accel` | The maximum linear acceleration used when `use_dynamic_window` is `true`. |
| `max_linear_decel` | The maximum linear deceleration used when `use_dynamic_window` is `true`. |
| `max_angular_decel` | The maximum angular deceleration used when `use_dynamic_window` is `true`. |
| `lookahead_dist` | The lookahead distance to use to find the lookahead point |
| `min_lookahead_dist` | The minimum lookahead distance threshold when using velocity scaled lookahead distances |
| `max_lookahead_dist` | The maximum lookahead distance threshold when using velocity scaled lookahead distances |
Expand All @@ -88,10 +102,10 @@ Note: The maximum allowed time to collision is thresholded by the lookahead poin
| `curvature_lookahead_dist` | Distance to lookahead to determine curvature for velocity regulation purposes. Only used if `use_fixed_curvature_lookahead` is enabled. |
| `use_rotate_to_heading` | Whether to enable rotating to rough heading and goal orientation when using holonomic planners. Recommended on for all robot types except ackermann, which cannot rotate in place. |
| `rotate_to_heading_min_angle` | The difference in the path orientation and the starting robot orientation to trigger a rotate in place, if `use_rotate_to_heading` is enabled. |
| `max_angular_accel` | Maximum allowable angular acceleration while rotating to heading, if enabled |
| `max_robot_pose_search_dist` | Maximum integrated distance along the path to bound the search for the closest pose to the robot. This is set by default to the maximum costmap extent, so it shouldn't be set manually unless there are loops within the local costmap. |
| `interpolate_curvature_after_goal` | Needs use_fixed_curvature_lookahead to be true. Interpolate a carrot after the goal dedicated to the curvature calculation (to avoid oscillations at the end of the path) |
| `min_distance_to_obstacle` | The shortest distance at which the robot is allowed to be from an obstacle along its trajectory. Set <= 0.0 to disable. It is limited to maximum distance of lookahead distance selected. |
| `use_dynamic_window` | Whether to use the Dynamic Window Pure Pursuit (DWPP) Algorithm. This algorithm computes optimal path tracking velocity commands under velocity and acceleration constraints. |

Example fully-described XML with default parameter values:

Expand All @@ -117,7 +131,14 @@ controller_server:
stateful: True
FollowPath:
plugin: "nav2_regulated_pure_pursuit_controller::RegulatedPurePursuitController"
desired_linear_vel: 0.5
max_linear_vel: 0.5
min_linear_vel: -0.5
max_angular_vel: 2.5
min_angular_vel: -2.5
max_linear_accel: 2.5
max_linear_decel: 2.5
max_angular_accel: 3.2
max_angular_decel: 3.2
lookahead_dist: 0.6
min_lookahead_dist: 0.3
max_lookahead_dist: 0.9
Expand All @@ -137,12 +158,12 @@ controller_server:
curvature_lookahead_dist: 1.0
use_rotate_to_heading: true
rotate_to_heading_min_angle: 0.785
max_angular_accel: 3.2
max_robot_pose_search_dist: 10.0
interpolate_curvature_after_goal: false
cost_scaling_dist: 0.3
cost_scaling_gain: 1.0
inflation_cost_scaling_factor: 3.0
use_dynamic_window: false
```

## Topics
Expand All @@ -165,3 +186,7 @@ To tune to get Pure Pursuit behaviors, set all boolean parameters to false and m
Currently, there is no rotate to goal behaviors, so it is expected that the path approach orientations are the orientations of the goal or the goal checker has been set with a generous `min_theta_velocity_threshold`. Implementations for rotating to goal heading are on the way.

The choice of lookahead distances are highly dependent on robot size, responsiveness, controller update rate, and speed. Please make sure to tune this for your platform, although the `regulated` features do largely make heavy tuning of this value unnecessary. If you see wiggling, increase the distance or scale. If it's not converging as fast to the path as you'd like, decrease it.

When `use_dynamic_window` is set to True, the velocity, acceleration, and deceleration limits are enforced during the velocity command computation.
Note that the velocity smoother clips the velocity commands output by this controller based on its own velocity and acceleration constraints before publishing cmd_vel.
Therefore, the velocity smoother’s `max_velocity`, `min_velocity`, `max_accel`, and `max_decel` parameters must be consistent or greater than this controller’s corresponding velocity, acceleration, and deceleration settings.
Loading
Loading