This class takes a path object and smoothes the nodes of the path. More...
#include <smoother.h>
Public Member Functions | |
| void | smoothPath (DynamicVoronoi &voronoi) |
| This function takes a path consisting of nodes and attempts to iteratively smooth the same using gradient descent. More... | |
| double | tracePath (const Node3D *node, int i=0, std::vector< Node3D > path=std::vector< Node3D >(), double length=0) |
| Given a node pointer the path to the root node will be traced recursively. More... | |
| std::vector< Node3D > | getPath () |
| returns the path of the smoother object | |
| Vector2D | obstacleTerm (Vector2D xi) |
| obstacleCost - pushes the path away from obstacles | |
| Vector2D | curvatureTerm (Vector2D xi0, Vector2D xi1, Vector2D xi2) |
| curvatureCost - forces a maximum curvature of 1/R along the path ensuring drivability | |
| Vector2D | smoothnessTerm (Vector2D xim2, Vector2D xim1, Vector2D xi, Vector2D xip1, Vector2D xip2) |
| smoothnessCost - attempts to spread nodes equidistantly and with the same orientation | |
| Vector2D | voronoiTerm () |
| voronoiCost - trade off between path length and closeness to obstaclesg | |
| bool | isOnGrid (Vector2D vec) |
| a boolean test, whether vector is on the grid or not | |
Private Attributes | |
| float | kappaMax = 1.f / (Constants::r * 1.1) |
| maximum possible curvature of the non-holonomic vehicle | |
| float | obsDMax = Constants::minRoadWidth |
| maximum distance to obstacles that is penalized | |
| float | vorObsDMax = Constants::minRoadWidth |
| maximum distance for obstacles to influence the voronoi field | |
| float | alpha = 0.1 |
| falloff rate for the voronoi field | |
| float | wObstacle = 0.2 |
| weight for the obstacle term | |
| float | wVoronoi = 0 |
| weight for the voronoi term | |
| float | wCurvature = 0 |
| weight for the curvature term | |
| float | wSmoothness = 0.2 |
| weight for the smoothness term | |
| DynamicVoronoi | voronoi |
| voronoi diagram describing the topology of the map | |
| int | width |
| width of the map | |
| int | height |
| height of the map | |
| std::vector< Node3D > | path |
| path to be smoothed | |
This class takes a path object and smoothes the nodes of the path.
It also uses the Voronoi diagram as well as the configuration space.
| void Smoother::smoothPath | ( | DynamicVoronoi & | voronoi | ) |
This function takes a path consisting of nodes and attempts to iteratively smooth the same using gradient descent.
During the different interations the following cost are being calculated obstacleCost curvatureCost smoothnessCost voronoiCost
| double Smoother::tracePath | ( | const Node3D * | node, |
| int | i = 0, |
||
| std::vector< Node3D > | path = std::vector<Node3D>(), |
||
| double | length = 0 |
||
| ) |
Given a node pointer the path to the root node will be traced recursively.
| node | a 3D node, usually the goal node |
| i | a parameter for counting the number of nodes |
1.8.6