|
void | set_time_accuracy (double acc) |
|
void | set_horizontal_accuracy (double acc) |
|
void | set_vertical_accuracy (double acc) |
|
double | get_time_accuracy () |
|
double | get_horizontal_accuracy () |
|
double | get_vertical_accuracy () |
|
bool | almost_equals_time (double t1, double t2) |
|
bool | almost_equals_xy (double x1, double y1, double x2, double y2) |
|
bool | almost_equals_distance (double d) |
|
bool | almost_equals_radian (double d1, double d2) |
|
bool | almost_equals_radian (double d) |
|
bool | almost_equals_alt (double a1, double a2) |
|
template<typename T > |
T | parameter_data (const ParameterData &p, const std::string &key, Function< const std::string &, T > &f) |
|
std::string | Fmi (int v) |
|
std::string | Fmui (unsigned int v) |
|
std::string | Fmul (unsigned long v) |
|
std::string | Fm0 (double v) |
|
std::string | Fm1 (double v) |
|
std::string | Fm2 (double v) |
|
std::string | Fm2z (double v) |
|
std::string | Fm3 (double v) |
|
std::string | Fm3z (double v) |
|
std::string | Fm4 (double v) |
|
std::string | Fm6 (double v) |
|
std::string | Fm8 (double v) |
|
std::string | Fm12 (double v) |
|
std::string | Fm16 (double v) |
|
std::string | FmLead (int i, int minLength) |
|
std::string | FmPrecision (double v) |
|
std::string | FmPrecision (double v, int precision) |
|
std::string | FmPrecision (double v, int precision, bool includeTrailingZeros) |
|
std::string | Fmb (bool b) |
|
std::string | FmVec (Vect2 v) |
|
std::string | FmVec (Vect3 v) |
|
std::string | padLeft (std::string s, int n) |
|
std::string | padRight (std::string s, int n) |
|
std::string | bool2str (bool b) |
|
void | fpln (const std::string &str) |
|
void | fp (const std::string &str) |
|
void | fpln (std::ostream *os, const std::string &str) |
|
void | fp (std::ostream *os, const std::string &str) |
|
void | fdln (const std::string &str) |
|
std::string | fsStr (const Vect2 &s) |
|
std::string | fsStr (const Vect3 &s) |
|
std::string | fsStrNP (const Vect3 &v, int prec, const std::string &xunits, const std::string &yunits, const std::string &zunits) |
|
std::string | fsStrNP (const Vect3 &s, int prec) |
|
std::string | fsStr8NP (const Vect3 &s) |
|
std::string | fsStr15NP (const Vect3 &s) |
|
std::string | fvStr (const Vect2 &s) |
|
std::string | fvStr (const Vect3 &s) |
|
std::string | fvStr2 (const Vect2 &v) |
|
std::string | fvStr2 (const Vect3 &v) |
|
std::string | FmPair (const std::pair< int, int > &p) |
|
std::string | FmPair (const std::pair< double, double > &p) |
|
std::string | FmTriple (const Triple< int, int, int > &p) |
|
std::string | FmTriple (const Triple< double, double, double > &p) |
|
std::string | Fobj (const std::vector< int > &v) |
|
std::string | Fobj (const std::vector< double > &v) |
|
std::string | Fobj (const std::vector< std::string > &v) |
|
std::string | Fobj (const std::vector< std::pair< int, int > > &v) |
|
std::string | Fobj (const std::vector< std::pair< double, double > > &v) |
|
std::string | Fobj (const std::vector< Triple< int, int, int > > &v) |
|
std::string | Fobj (const std::vector< Triple< double, double, double > > &v) |
|
std::string | Fobj (const std::map< std::string, std::string > &v) |
|
std::string | Fobj (const std::map< int, int > &v) |
|
std::string | Fobj (const std::map< int, std::string > &v) |
|
std::string | Fobj (const std::map< std::string, int > &v) |
|
std::string | Fobj (const std::map< double, double > &v) |
|
std::string | Fobj (const std::map< double, std::string > &v) |
|
std::string | Fobj (const std::map< std::string, double > &v) |
|
std::string | list2str (const std::vector< std::string > &l, const std::string &delimiter) |
|
std::string | Farray (int const v[], int sz) |
|
std::string | Farray (double const v[], int sz) |
|
std::string | Farray (std::string const v[], int sz) |
|
std::string | double2PVS (double val) |
|
std::string | double2PVS (double val, int precision) |
|
template<typename L , typename R > |
Pair< L, R > | make (const L &left, const R &right) |
|
template<typename L , typename R > |
bool | operator== (const Pair< L, R > &t1, const Pair< L, R > &t2) |
|
template<typename L , typename R > |
bool | operator!= (const Pair< L, R > &t1, const Pair< L, R > &t2) |
|
std::ostream & | operator<< (std::ostream &os, const Plan &f) |
|
EuclideanProjection | getProjection (double lat, double lon, double alt) |
|
EuclideanProjection | getProjection (const LatLonAlt &lla) |
|
double | projectionConflictRange (double lat, double accuracy) |
|
double | projectionMaxRange () |
|
void | setProjectionType (ProjectionType t) |
|
ProjectionType | getProjectionTypeFromString (std::string s) |
|
ProjectionType | getProjectionType () |
|
template<typename T1 , typename T2 , typename T3 , typename T4 > |
bool | operator== (const Quad< T1, T2, T3, T4 > &q1, const Quad< T1, T2, T3, T4 > &q2) |
|
template<typename T1 , typename T2 , typename T3 , typename T4 > |
bool | operator!= (const Quad< T1, T2, T3, T4 > &q1, const Quad< T1, T2, T3, T4 > &q2) |
|
template<typename T1 , typename T2 , typename T3 , typename T4 > |
bool | operator< (const Quad< T1, T2, T3, T4 > &q1, const Quad< T1, T2, T3, T4 > &q2) |
|
template<typename T1 , typename T2 , typename T3 , typename T4 > |
bool | operator> (const Quad< T1, T2, T3, T4 > &q1, const Quad< T1, T2, T3, T4 > &q2) |
|
Vect2 | polar_xy (const LatLonAlt &lla, bool north) |
|
LatLonAlt | polar_inverse (const Vect2 &v, double alt, bool north) |
|
std::vector< std::string > | split (const std::string &str, const std::string &delimiters) |
|
std::vector< std::string > | split_empty (const std::string &str, const std::string &delimiters) |
|
std::vector< std::string > | split_string_empty (const std::string &str, const std::string &delimiter) |
|
std::vector< std::string > | split_regex (const std::string &str, const std::string &delimiters) |
|
bool | matches (const std::string &s, const std::string &rgx_str) |
|
std::string | substring (const std::string &s, int begin, int end) |
|
std::string | substring (const std::string &s, int begin) |
|
void | trim (std::string &s, const std::string &drop=" \t\r\n") |
|
std::string | trimCopy (const std::string &s, const std::string &drop=" \t\r\n") |
|
std::string | toLowerCase (const std::string &str) |
|
std::string | toUpperCase (const std::string &str) |
|
bool | equals (const std::string &, const std::string &) |
|
bool | equalsIgnoreCase (const std::string &, const std::string &) |
|
void | replace (std::string &s, char c1, char c2) |
|
std::string | replace (const std::string &s, const std::string &s1, const std::string &s2) |
|
bool | contains (const std::vector< std::string > &v, const std::string &s) |
|
bool | contains (const std::string &str, const std::string &sub) |
|
bool | startsWith (const std::string &str, const std::string &prefix) |
|
bool | endsWith (const std::string &str, const std::string &suffix) |
|
int | parseInt (const std::string &str) |
|
bool | operator< (const TrafficCoreState &lhs, const TrafficCoreState &rhs) |
|
template<typename L , typename C , typename R > |
Triple< L, C, R > | make (const L &left, const C ¢er, const R &right) |
|
template<typename L , typename C , typename R > |
bool | operator== (const Triple< L, R, C > &t1, const Triple< L, R, C > &t2) |
|
template<typename L , typename C , typename R > |
bool | operator!= (const Triple< L, R, C > &t1, const Triple< L, R, C > &t2) |
|
template<typename L , typename C , typename R > |
bool | operator< (const Triple< L, R, C > &t1, const Triple< L, R, C > &t2) |
|
template<typename L , typename C , typename R > |
bool | operator> (const Triple< L, R, C > &t1, const Triple< L, R, C > &t2) |
|
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > |
bool | operator== (const Tuple5< T1, T2, T3, T4, T5 > &q1, const Tuple5< T1, T2, T3, T4, T5 > &q2) |
|
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > |
bool | operator!= (const Tuple5< T1, T2, T3, T4, T5 > &q1, const Tuple5< T1, T2, T3, T4, T5 > &q2) |
|
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > |
bool | operator< (const Tuple5< T1, T2, T3, T4, T5 > &q1, const Tuple5< T1, T2, T3, T4, T5 > &q2) |
|
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > |
bool | operator> (const Tuple5< T1, T2, T3, T4, T5 > &q1, const Tuple5< T1, T2, T3, T4, T5 > &q2) |
|
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > |
bool | operator== (const Tuple6< T1, T2, T3, T4, T5, T6 > &q1, const Tuple6< T1, T2, T3, T4, T5, T6 > &q2) |
|
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > |
bool | operator!= (const Tuple6< T1, T2, T3, T4, T5, T6 > &q1, const Tuple6< T1, T2, T3, T4, T5, T6 > &q2) |
|
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > |
bool | operator< (const Tuple6< T1, T2, T3, T4, T5, T6 > &q1, const Tuple6< T1, T2, T3, T4, T5, T6 > &q2) |
|
double | _FormalATM_gn () |
|
double | _FormalATM_P0 () |
|
template<class T > |
std::string | to_string (const T &t) |
|
template<typename T > |
void | remove (T a[], int i, int size) |
|
double | sq (const double x) |
|
INT64FM | llabs (const INT64FM x) |
| ** More...
|
|
double | sqrt_safe (const double x) |
|
double | atan2_safe (const double y, const double x) |
|
double | asin_safe (double x) |
|
double | acos_safe (double x) |
|
double | discr (const double a, const double b, const double c) |
|
double | root (const double a, const double b, const double c, int eps) |
|
double | root2b (const double a, const double b, const double c, const int eps) |
|
int | sign (const double x) |
|
double | to_pi (double rad) |
|
double | to_360 (double deg) |
|
double | to_2pi (double rad) |
|
double | to_pi2_cont (double rad) |
|
double | to_180 (double deg) |
|
double | trkgs2vx (double trk, double gs) |
|
double | trkgs2vy (double trk, double gs) |
|
Vect2 | trkgs2v (double trk, double gs) |
|
double | tau_vv (const Vect2 &s, const Vect2 &v, const double B, const double T) |
|
double | omega_vv (const Vect2 &s, const Vect2 &v, const double D, const double B, const double T) |
|
void | setCoreDetection (Detection3D *c) |
|
Horizontal | losr_gs_iter_aux (const Vect3 &s, const Vect3 &vo, const Vect3 &vi, double minrelgs, double mings, double maxgs, double step, int epsh) |
|
bool | eq (double a, double b, double e) |
|
bool | gt (double a, double b, double e) |
|
double | R (const Vect2 &sp, double D) |
|
bool | closed_region_3D (const Vect3 &s, const Vect3 &p, int eps, int dir, const Vect3 &v, double D, double H) |
|
bool | horizontal_los (const Vect2 &s, double D) |
|
bool | vertical_los (double sz, double H) |
|
std::list< double > | verticalSpeeds1D (const double sz, const double viz, const double H, const double B, const double T) |
|
double | fm_nz (double v, int precision) |
|
string | padLeft (string s, int n) |
|
string | padRight (string s, int n) |
|
void | fpln (const string &str) |
|
void | fp (const string &str) |
|
void | fpln (ostream *os, const string &str) |
|
void | fp (ostream *os, const string &str) |
|
void | fdln (const string &str) |
|
std::vector< std::string > | toStringList (const Vect3 &v, const string &unitx, const string &unity, const string &unitz, int precision, bool units) |
|
string | fsStrNP (const Vect3 &v, int prec, const string &xunits, const string &yunits, const string &zunits) |
|
Vect2 | Q (const Vect2 &s, double D, int eps) |
|
bool | isLeftTurn (const Vect2 &from, const Vect2 &to) |
|
int | boolean2eps (bool b) |
|
double | V1 (double voz, double a1, double t) |
| ** returns Pair that contains position and velocity at time t due to level out maneuver More...
|
|
double | S1 (double voz, double a1, double t) |
|
double | T3 (double voz, double a1) |
|
double | S3 (double voz, double a1) |
|
const LossData & | EMPTY () |
|
std::vector< Position > | genList_l (const std::vector< LatLonAlt > &lList) |
|
std::vector< Position > | genList_v (const std::vector< Vect2 > &vList) |
|
vector< string > | split (const string &str, const string &delimiters) |
|
vector< string > | split_empty (const string &str, const string &delimiters) |
|
vector< string > | split_string_empty (const string &str, const string &delimiter) |
|
bool | matches (const string &s, const string &rgx_str) |
|
string | substring (const string &s, int begin, int end) |
|
string | substring (const string &s, int begin) |
|
void | trim (string &s, const string &drop) |
|
std::string | trimCopy (const string &s, const string &drop) |
|
string | toLowerCase (const string &strToConvert) |
|
string | toUpperCase (const string &strToConvert) |
|
bool | equals (const string &s1, const string &s2) |
|
bool | equalsIgnoreCase (const string &s1, const string &s2) |
|
double | InitTangentLineX (const Vect2 &s, const double D, const int eps) |
|
double | InitTangentLineY (const Vect2 &s, const double D, const int eps) |
|
Vertical | vs_at (const double sz, const double t, const int eps, const double H) |
|
Vertical | vs_only (const Vect3 &s, const Vect2 &v, const double t, const int eps, const double D, const double H) |
|
CriteriaCore.cpp
State-based Implicit Criteria
Copyright (c) 2011-2020 United States Government as represented by the National Aeronautics and Space Administration. No copyright is claimed in the United States under Title 17, U.S.Code. All Other Rights Reserved.
Objects of class "Daidalus" compute the conflict bands using kinematic single-maneuver projections of the ownship and linear preditions of (multiple) traffic aircraft positions. The bands consist of ranges of guidance maneuvers: direction angles, horizontal speeds, vertical speeds, and altitude.
An assumption of the bands information is that the traffic aircraft do not maneuver. If the ownship immediately executes a NONE guidance maneuver, then the new path is conflict free (within a lookahead time of the parameter). If the ownship immediately executes a NEAR/MID/FAR guidance maneuver and no traffic aircraft maneuvers, then there will corresponding alert within the corresponding alerting level thresholds.
If recovery bands are set and the ownship is in a violation path, loss of separation recovery bands and recovery times are computed for each type of maneuver. If the ownship immediately executes a RECOVERY guidance maneuver, then the new path is conflict-free after the recovery time. Furthermore, the recovery time is the minimum time for which there exists a kinematic conflict-free maneuver in the future.
Note that in the case of geodetic coordinates this version of bands performs an internal projection of the coordinates and velocities into the Euclidean frame (see Util/Projection). Accuracy may be reduced if the traffic plans involve any segments longer than Util.Projection.projectionConflictRange(lat,acc), and an error will be logged if the distance between traffic and ownship exceeds Util.Projection.projectionMaxRange() at any point in the lookahead range.
Disclaimers: The formal proofs of the core algorithms use real numbers, however these implementations use floating point numbers, so numerical differences could result. In addition, the geodetic computations include certain inaccuracies, especially near the poles.
The basic usage is
Daidalus daa = new Daidalus();
daa.loadFromFile(<configurationfile>);
...
daa.setOwnshipState(position of ownship, velocity of ownship);
daa.addTrafficState(position of (one) traffic aircraft, velocity of traffic);
daa.addTrafficState(position of (another) traffic aircraft, velocity of traffic);
...add other traffic aircraft...
for (int i = 0; i < daa.horizontalDirectionBandsLength(); i++ ) {
interval = daa.horizontalDirectionIntervalAt(i);
lower_ang = intrval.low;
upper_ang = intrval.up;
regionType = daa.horizontalDirectionRegionAt(i);
..do something with this information..
}
...similar for horizontal speed and vertical speed...
Encapsulates a geometric polygon. The polygon is defined in terms of its vertex coordinates. This implementation assumes a simply connected polygon. The Polygon is otherwise quite general allowing multiply connected regions. The class provides a containment test for points and uses bounding rectangles to speed up computations.
Projection from Spherical Earth to Euclidean Plane
Authors: George Hagen NASA Langley Research Center Ricky Butler NASA Langley Research Center Jeff Maddalon NASA Langley Research Center Anthony Narkawicz NASA Langley Research Center
Holding area for universal projection information. All projection objects should be retrieved using these functions.
Copyright (c) 2011-2020 United States Government as represented by the National Aeronautics and Space Administration. No copyright is claimed in the United States under Title 17, U.S.Code. All Other Rights Reserved.
A basic polygon that describes a volume. This volume has a flat bottom and top (specified as altitude values). Points describe the cross-section area vertices in a consistently clockwise (or consistently counter-clockwise) manner. The cross-section need not be convex, but an "out of order" listing of the vertices will result in edges that cross, and will cause several calculations to fail (with no warning).
A SimplePoly sets the altitude for all its points to be the bottom altitude, while the top is stored elsewhere as a single value. The exact position for "top" vertices is computed on demand.
The cross-section must be a simple polygon, that is it allows for non-convex areas, but vertices and edges may not overlap or cross. Vertices may be ordered in either a clockwise or counterclockwise manner.
(A vertex-complete polygon allows for vertices and edges to overlap but not cross, while a general polygon allows for edges to cross.)
Point indices are based on the order they are added.
Note: polygon support is experimental and the interface is subject to change!