|
static std::pair< Plan, DensityGrid > | reRouteWx (const Plan &own, std::vector< PolyPath > &paths, double gridSize, double buffer, double factor, double T_p, const std::vector< PolyPath > &containment, bool fastPolygonReroute, double timeOfCurrentPosition, double reRouteLeadIn, bool reRouteReduction) |
|
static std::pair< Plan, DensityGrid > | reRouteWxExpand (const Plan &own, const std::vector< PolyPath > &paths, double gridSize, double buffer, double factor, double T_p, const std::vector< PolyPath > &containment, bool fastPolygonReroute, double timeOfCurrentPosition, double reRouteLeadIn, bool expandPolygons, double timeBefore, double timeAfter, bool reRouteReduction) |
|
static std::vector< PolyPath > | ReRouteExpandIt (const std::vector< PolyPath > &paths, double cellSize, bool expandPolygons, double timeBefore, double timeAfter) |
|
static std::pair< Plan, DensityGrid > | reRouteWithAstar (const std::vector< PolyPath > &paths, const Plan &ownship, double gridSize, double buffer, double factor, double gs, const std::vector< PolyPath > &containment, double endT, bool fastPolygonReroute) |
|
static Plan | setAltitudes (const Plan &pp, double firstLegVs) |
|
◆ reRouteWx()
std::pair< Plan, DensityGrid > larcfm::WeatherUtil::reRouteWx |
( |
const Plan & |
own, |
|
|
std::vector< PolyPath > & |
paths, |
|
|
double |
gridSize, |
|
|
double |
buffer, |
|
|
double |
factor, |
|
|
double |
T_p, |
|
|
const std::vector< PolyPath > & |
containment, |
|
|
bool |
fastPolygonReroute, |
|
|
double |
timeOfCurrentPosition, |
|
|
double |
reRouteLeadIn, |
|
|
bool |
reRouteReduction |
|
) |
| |
|
static |
Produce a plan that travels between two end points and is approximately conflict free of any polygons.
(Note this code is experimental and may not always produce correct results.)
Note:
- "Approximately conflict free" means that there should be no intrusions that are greater than gridSize. This is intended to be a first step in a more thorough algorithm to avoid polygons.
- This methods can produce solutions with a small intrusion into one or more polygons (less than 1 gridSize). These usually happen at acute corners of polygons. Reducing the grid size will mitigate this (to the reduced grid size).
- If reduceGridPath is true, this is more likely.
- FastPolygonReroute uses an overestimation of polygons.
- Parameters
-
own | plan for ownship |
paths | polypath collection of polygons to be routed around |
gridSize | approximate size of grid square (in meters) |
buffer | approximate size of extended grid area (in meters) |
factor | weighting for closeness to path (1.0 = approximate distance in grid squares) |
T_p | lookahead time, relative to timeOfCurrentPosition. Conflicts beyond this time will be ignored, which can cause unexpected behavior. It is recommended that this be turned off (set to -1) for most cases. |
fastPolygonReroute | |
param reduceGridPath , perform a low-level smoothing operation on the resulting path. this may result in a solution that is not completely conflict free.
- Parameters
-
timeOfCurrentPosition | location of aircraft in its plan |
reRouteLeadIn | leadin time from current position (wait this amount of time before maneuvar) |
- Returns
- new ownship plan (empty and/or error set on fail) and densitygrid used (for visualization) Note that even a successful return does not guarantee a completely conflict-free return path, only one that does not intrude into any polygons by more than gridSize.
◆ reRouteWxExpand()
std::pair< Plan, DensityGrid > larcfm::WeatherUtil::reRouteWxExpand |
( |
const Plan & |
own, |
|
|
const std::vector< PolyPath > & |
paths, |
|
|
double |
gridSize, |
|
|
double |
buffer, |
|
|
double |
factor, |
|
|
double |
T_p, |
|
|
const std::vector< PolyPath > & |
containment, |
|
|
bool |
fastPolygonReroute, |
|
|
double |
timeOfCurrentPosition, |
|
|
double |
reRouteLeadIn, |
|
|
bool |
expandPolygons, |
|
|
double |
timeBefore, |
|
|
double |
timeAfter, |
|
|
bool |
reRouteReduction |
|
) |
| |
|
static |
As reRouteWx(), but this will internally expand the polygons so that they cover a larger area, either representing their total coverage over a period of time of duration timeBefore+timeAfter, and/or over-approximating them to mitigate solutions that cut corners of polygons. Note that setting reduceGridPath to true may still result in a solutions that still contains conflicts.
(Note this code is experimental and may not always produce correct results.)
- Parameters
-
own | ownship plan |
paths | list of polygons to avoid |
gridSize | desired grid size (m) |
buffer | buffer to expand the grid to allow go-around solutions (m) |
factor | weight indicating desire to retain original path (0 = abandon original path, higher numbers = favor original path; transition point in the 3-10 range) |
T_p | lookahead time for search, relative to timeOfCurrentPosition. Conflicts beyond this time will be ignored, which can cause unexpected behavior. It is recommended that this be turned off (set to -1) in most cases. |
containment | list of polygons to remain within |
fastPolygonReroute | if set to true, use a less exact (greater over-approximation) but much faster search |
reduceGridPath | if set to true, attempt to smooth resulting path (may re-introduce minor conflicts) |
timeOfCurrentPosition | absolute time ownship start |
reRouteLeadIn | time (in s) to allow for initial and final velocity matching of aircraft (should probably be enough to make a 180 degree turn) |
expandPolygons | if set to true, internally over-approximate the polygons to mitigate missed conflicts |
timeBefore | if greater than zero, ensure the final path is continuously clear for this amount of time before the given solution |
timeAfter | if greater than zero, ensure the final path is continuously clear for this amount of time after the given solution |
reRouteReduction | if true, perform more aggressive simplification of resulting path. |
- Returns
- Solution path and the density grid used for the search (the later is intended for further display or analysis) If no solution is found, return a null or empty path.
Note that even a successful return does not guarantee a completely conflict-free return path, only one that does not intrude into any polygons by more than gridSize. Setting expandPolygons to true should mitigate this, and setting reduceGridPath may re-introduce intrusions.
The documentation for this class was generated from the following files:
- Modules/ACCoRD/inc/WeatherUtil.h
- Modules/ACCoRD/src/WeatherUtil.cpp