This class contains routines that attempt to simplify geometric paths. More...
#include <ompl/geometric/PathSimplifier.h>
Public Member Functions  
PathSimplifier (base::SpaceInformationPtr si, const base::GoalPtr &goal=ompl::base::GoalPtr())  
Create an instance for a specified space information. Optionally, a GoalSampleableRegion may be passed in to attempt improvements at the end of the path as well.  
bool  reduceVertices (PathGeometric &path, unsigned int maxSteps=0, unsigned int maxEmptySteps=0, double rangeRatio=0.33) 
Given a path, attempt to remove vertices from it while keeping the path valid. This is an iterative process that attempts to do "shortcutting" on the path. Connection is attempted between nonconsecutive waypoints on the path. If the connection is successful, the path is shortened by removing the inbetween waypoints. This function returns true if changes were made to the path. More...  
bool  shortcutPath (PathGeometric &path, unsigned int maxSteps=0, unsigned int maxEmptySteps=0, double rangeRatio=0.33, double snapToVertex=0.005) 
Given a path, attempt to shorten it while maintaining its validity. This is an iterative process that attempts to do "shortcutting" on the path. Connection is attempted between random points along the path segments. Unlike the reduceVertices() function, this function does not sample only vertices produced by the planner, but intermediate points on the path. If the connection is successful, the path is shortened by removing the inbetween states (and new vertices are created when needed). This function returns true if changes were made to the path. More...  
bool  collapseCloseVertices (PathGeometric &path, unsigned int maxSteps=0, unsigned int maxEmptySteps=0) 
Given a path, attempt to remove vertices from it while keeping the path valid. This is an iterative process that attempts to do "shortcutting" on the path. Connection is attempted between nonconsecutive states that are close along the path. If the connection is successful, the path is shortened by removing the inbetween states. This function returns true if changes were made to the path. More...  
void  smoothBSpline (PathGeometric &path, unsigned int maxSteps=5, double minChange=std::numeric_limits< double >::epsilon()) 
Given a path, attempt to smooth it (the validity of the path is maintained). More...  
void  simplifyMax (PathGeometric &path) 
Given a path, attempt to remove vertices from it while keeping the path valid. Then, try to smooth the path. This function applies the same set of default operations to the path, except in nonmetric spaces, with the intention of simplifying it. In nonmetric spaces, some operations are skipped because they do not work correctly when the triangle inequality may not hold.  
void  simplify (PathGeometric &path, double maxTime) 
Run simplification algorithms on the path for at most maxTime seconds.  
void  simplify (PathGeometric &path, const base::PlannerTerminationCondition &ptc) 
Run simplification algorithms on the path as long as the termination condition does not become true.  
bool  findBetterGoal (PathGeometric &path, double maxTime, unsigned int samplingAttempts=10, double rangeRatio=0.33, double snapToVertex=0.005) 
Attempt to improve the solution path by sampling a new goal state and connecting this state to the solution path for at most maxTime seconds. More...  
bool  findBetterGoal (PathGeometric &path, const base::PlannerTerminationCondition &ptc, unsigned int samplingAttempts=10, double rangeRatio=0.33, double snapToVertex=0.005) 
Attempt to improve the solution path by sampling a new goal state and connecting this state to the solution path while the termination condition is not met. More...  
void  freeStates (bool flag) 
Set this flag to false to avoid freeing the memory allocated for states that are removed from a path during simplification. Setting this to true makes this free memory. Memory is freed by default (flag is true by default)  
bool  freeStates () const 
Return true if the memory of states is freed when they are removed from a path during simplification.  
Protected Attributes  
base::SpaceInformationPtr  si_ 
The space information this path simplifier uses.  
std::shared_ptr< base::GoalSampleableRegion >  gsr_ 
The goal object for the path simplifier. Used for endofpath improvements.  
bool  freeStates_ 
Flag indicating whether the states removed from a motion should be freed.  
RNG  rng_ 
Instance of random number generator.  
Detailed Description
This class contains routines that attempt to simplify geometric paths.
Some of these are in fact routines that shorten the path, and do not necessarily make it smoother.
Definition at line 65 of file PathSimplifier.h.
Member Function Documentation
◆ collapseCloseVertices()
bool ompl::geometric::PathSimplifier::collapseCloseVertices  (  PathGeometric &  path, 
unsigned int  maxSteps = 0 , 

unsigned int  maxEmptySteps = 0 

) 
Given a path, attempt to remove vertices from it while keeping the path valid. This is an iterative process that attempts to do "shortcutting" on the path. Connection is attempted between nonconsecutive states that are close along the path. If the connection is successful, the path is shortened by removing the inbetween states. This function returns true if changes were made to the path.
 Parameters

path the path to reduce vertices from maxSteps the maximum number of attempts to "shortcut" the path. If this value is set to 0 (the default), the number of attempts made is equal to the number of states in path. If this value is set to 0 (the default), the number of attempts made is equal to the number of states in path. maxEmptySteps not all iterations of this function produce a simplification. If an iteration does not produce a simplification, it is called an empty step. maxEmptySteps denotes the maximum number of consecutive empty steps before the simplification process terminates.
Definition at line 342 of file PathSimplifier.cpp.
◆ findBetterGoal() [1/2]
bool ompl::geometric::PathSimplifier::findBetterGoal  (  PathGeometric &  path, 
double  maxTime,  
unsigned int  samplingAttempts = 10 , 

double  rangeRatio = 0.33 , 

double  snapToVertex = 0.005 

) 
Attempt to improve the solution path by sampling a new goal state and connecting this state to the solution path for at most maxTime seconds.
 Parameters

sampingAttempts The maximum number of attempts to connect a candidate goal state to a part of path rangeRatio The fraction of the end of the path to consider for connection to a candidate goal state, in (0,1]. snapToVertex The percentage of the total path length to consider as "close enough" to an existing state in the path for the method to "snap" the connection to that particular state. This prevents states in the path that are very close to each other.
Definition at line 460 of file PathSimplifier.cpp.
◆ findBetterGoal() [2/2]
bool ompl::geometric::PathSimplifier::findBetterGoal  (  PathGeometric &  path, 
const base::PlannerTerminationCondition &  ptc,  
unsigned int  samplingAttempts = 10 , 

double  rangeRatio = 0.33 , 

double  snapToVertex = 0.005 

) 
Attempt to improve the solution path by sampling a new goal state and connecting this state to the solution path while the termination condition is not met.
 Parameters

sampingAttempts The maximum number of attempts to connect a candidate goal state to a part of path rangeRatio The fraction of the end of the path to consider for connection to a candidate goal state, in (0,1]. snapToVertex The percentage of the total path length to consider as "close enough" to an existing state in the path for the method to "snap" the connection to that particular state. This prevents states in the path that are very close to each other.
Definition at line 467 of file PathSimplifier.cpp.
◆ reduceVertices()
bool ompl::geometric::PathSimplifier::reduceVertices  (  PathGeometric &  path, 
unsigned int  maxSteps = 0 , 

unsigned int  maxEmptySteps = 0 , 

double  rangeRatio = 0.33 

) 
Given a path, attempt to remove vertices from it while keeping the path valid. This is an iterative process that attempts to do "shortcutting" on the path. Connection is attempted between nonconsecutive waypoints on the path. If the connection is successful, the path is shortened by removing the inbetween waypoints. This function returns true if changes were made to the path.
 Parameters

path the path to reduce vertices from maxSteps the maximum number of attempts to "shortcut" the path. If this value is set to 0 (the default), the number of attempts made is equal to the number of states in path. maxEmptySteps not all iterations of this function produce a simplification. If an iteration does not produce a simplification, it is called an empty step. maxEmptySteps denotes the maximum number of consecutive empty steps before the simplification process terminates. If this value is set to 0 (the default), the number of attempts made is equal to the number of states in path. rangeRatio the maximum distance between states a connection is attempted, as a fraction relative to the total number of states (between 0 and 1).
Definition at line 113 of file PathSimplifier.cpp.
◆ shortcutPath()
bool ompl::geometric::PathSimplifier::shortcutPath  (  PathGeometric &  path, 
unsigned int  maxSteps = 0 , 

unsigned int  maxEmptySteps = 0 , 

double  rangeRatio = 0.33 , 

double  snapToVertex = 0.005 

) 
Given a path, attempt to shorten it while maintaining its validity. This is an iterative process that attempts to do "shortcutting" on the path. Connection is attempted between random points along the path segments. Unlike the reduceVertices() function, this function does not sample only vertices produced by the planner, but intermediate points on the path. If the connection is successful, the path is shortened by removing the inbetween states (and new vertices are created when needed). This function returns true if changes were made to the path.
 Parameters

path the path to reduce vertices from maxSteps the maximum number of attempts to "shortcut" the path. If this value is set to 0 (the default), the number of attempts made is equal to the number of states in path. maxEmptySteps not all iterations of this function produce a simplification. If an iteration does not produce a simplification, it is called an empty step. maxEmptySteps denotes the maximum number of consecutive empty steps before the simplification process terminates. If this value is set to 0 (the default), the number of attempts made is equal to the number of states in path. rangeRatio the maximum distance between states a connection is attempted, as a fraction relative to the total length of the path (between 0 and 1). snapToVertex While sampling random points on the path, sometimes the points may be close to vertices on the original path (waypoints). This function will then "snap to the near vertex", if the distance is less than snapToVertex fraction of the total path length. This should usually be a small value (e.g., one percent of the total path length: 0.01; the default is half a percent)
 Note
 This function assumes the triangle inequality holds and should not be run on nonmetric spaces.
Definition at line 176 of file PathSimplifier.cpp.
◆ smoothBSpline()
void ompl::geometric::PathSimplifier::smoothBSpline  (  PathGeometric &  path, 
unsigned int  maxSteps = 5 , 

double  minChange = std::numeric_limits<double>::epsilon() 

) 
Given a path, attempt to smooth it (the validity of the path is maintained).
This function applies maxSteps steps of smoothing with BSplines. Fewer steps are applied if no progress is detected: states are either not updated or their update is smaller than minChange. At each step the path is subdivided and states along it are updated such that the smoothness is improved.
 Note
 This function may significantly increase the number of states along the solution path.
 This function assumes the triangle inequality holds and should not be run on nonmetric spaces.
Definition at line 69 of file PathSimplifier.cpp.
The documentation for this class was generated from the following files:
 ompl/geometric/PathSimplifier.h
 ompl/geometric/src/PathSimplifier.cpp