Skip to content

FeasiblePathHandler

Transforms the global plan into the local costmap frame, prunes it to the relevant portion within the costmap bounds, and handles in-place rotation and cusp pruning.

Parameters

<nav2_controller plugin>: nav2_controller plugin name defined in the path_handler_plugin_id parameter in Controller Server.

Type: bool Default: false

If enabled, the path handler will reject a path that contains only a single pose.

Type: double Default: 2.0

Distance ahead of nearest point on path to robot to prune path to (m). This distance should be at least as great as the furthest distance of interest by a critic (i.e. for maximum velocity projection forward, threshold to consider).

Type: double Default: Costmap size / 2

Max integrated distance ahead of robot pose to search for nearest path point in case of path looping.

Type: bool Default: false

If true, it will prune paths containing cusping points for segments changing directions (e.g. path inversions) such that the controller will be forced to change directions at or very near the planner's requested inversion point. In addition, these cusping points will also be treated by the critics as local goals that the robot will attempt to reach. This is targeting Smac Planner users with feasible paths who need their robots to switch directions where specifically requested.

Type: bool Default: false

If true, the controller will detect in-place rotation segments (where translation is near zero) and prune the remaining poses after the rotation point. This forces the robot to explicitly perform the rotation before proceeding along the rest of the path. This is particularly useful for feasible planners (e.g., Smac Planner) where direction changes are intentionally introduced and must be respected during execution.

Type: double Default: 0.785

The minimum accumulated rotation (in radians) required to classify a segment as an in-place rotation. 0.785 rad = 45 deg.

Type: double Default: 0.2

Cartesian proximity (m) to path inversion point to be considered "achieved" to pass on the rest of the path after path inversion.

Type: double Default: 0.4

Angular proximity (radians) to path inversion point to be considered "achieved" to pass on the rest of the path after path inversion. 0.4 rad = 23 deg.

Example

PathHandler:
    plugin: "nav2_controller::FeasiblePathHandler"
    prune_distance: 2.0
    enforce_path_inversion: True
    enforce_path_rotation: False
    inversion_xy_tolerance: 0.2
    inversion_yaw_tolerance: 0.4
    minimum_rotation_angle: 0.785
    reject_unit_path: False