ICAROUS
All Classes Namespaces Files Functions Variables Enumerations Enumerator Macros Modules Pages
Static Public Member Functions | List of all members
larcfm::WeatherUtil Class Reference

Static Public Member Functions

static std::pair< Plan, DensityGridreRouteWx (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, DensityGridreRouteWxExpand (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< PolyPathReRouteExpandIt (const std::vector< PolyPath > &paths, double cellSize, bool expandPolygons, double timeBefore, double timeAfter)
 
static std::pair< Plan, DensityGridreRouteWithAstar (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)
 

Member Function Documentation

◆ 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
ownplan for ownship
pathspolypath collection of polygons to be routed around
gridSizeapproximate size of grid square (in meters)
bufferapproximate size of extended grid area (in meters)
factorweighting for closeness to path (1.0 = approximate distance in grid squares)
T_plookahead 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
timeOfCurrentPositionlocation of aircraft in its plan
reRouteLeadInleadin 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
ownownship plan
pathslist of polygons to avoid
gridSizedesired grid size (m)
bufferbuffer to expand the grid to allow go-around solutions (m)
factorweight indicating desire to retain original path (0 = abandon original path, higher numbers = favor original path; transition point in the 3-10 range)
T_plookahead 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.
containmentlist of polygons to remain within
fastPolygonRerouteif set to true, use a less exact (greater over-approximation) but much faster search
reduceGridPathif set to true, attempt to smooth resulting path (may re-introduce minor conflicts)
timeOfCurrentPositionabsolute time ownship start
reRouteLeadIntime (in s) to allow for initial and final velocity matching of aircraft (should probably be enough to make a 180 degree turn)
expandPolygonsif set to true, internally over-approximate the polygons to mitigate missed conflicts
timeBeforeif greater than zero, ensure the final path is continuously clear for this amount of time before the given solution
timeAfterif greater than zero, ensure the final path is continuously clear for this amount of time after the given solution
reRouteReductionif 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: