ICAROUS
|
#include <BandsCore.h>
Public Member Functions | |
BandsCore () | |
BandsCore (double D, double H, double T, double max_gs, double max_vs) | |
BandsCore (double D, double H, double B, double T, double max_gs, double max_vs) | |
void | setTime (double t) |
void | setStartTime (double t) |
double | getTime () const |
double | getStartTime () const |
void | setTimeRange (double b, double t) |
void | setDiameter (double d) |
double | getDiameter () const |
void | setHeight (double h) |
double | getHeight () const |
void | setMaxGroundSpeed (double gs) |
double | getMaxGroundSpeed () const |
void | setMaxVerticalSpeed (double vs) |
double | getMaxVerticalSpeed () const |
virtual void | setTrackTolerance (double trk) |
virtual double | getTrackTolerance () const |
virtual void | setGroundSpeedTolerance (double gs) |
virtual double | getGroundSpeedTolerance () const |
virtual void | setVerticalSpeedTolerance (double vs) |
virtual double | getVerticalSpeedTolerance () const |
void | addTraffic (const Vect3 &s3, const Velocity &vo3, const Velocity &vi3, bool do_trk, bool do_gs, bool do_vs) |
void | addTraffic (const Vect3 &s3, const Velocity &vo3, const Velocity &vi3) |
void | clearTrackRegions () |
void | clearGroundSpeedRegions () |
void | clearVerticalSpeedRegions () |
void | clear (bool do_trk, bool do_gs, bool do_vs) |
void | clear () |
const IntervalSet & | trackBands () const |
bool | trackBands (double trk) const |
int | trackSize () const |
const IntervalSet & | groundSpeedBands () const |
bool | groundSpeedBands (double gs) const |
int | groundSpeedSize () const |
const IntervalSet & | verticalSpeedBands () const |
bool | verticalSpeedBands (double vs) const |
int | verticalSpeedSize () const |
void | clearNarrowBands (bool do_trk, bool do_gs, bool do_vs) |
void | clearTrackBreaks () |
void | clearGroundSpeedBreaks () |
void | clearVerticalSpeedBreaks () |
void | clearBreaks (bool do_trk, bool do_gs, bool do_vs) |
void | clearBreaks () |
std::string | toString () const |
Private Member Functions | |
void | calcTrkBands (Vect3 s3, Vect3 vo3, Vect3 vi3) const |
void | calcGsBands (Vect3 s3, Vect3 vo3, Vect3 vi3) const |
void | calcVsBands (Vect3 s3, Vect3 vo3, Vect3 vi3) const |
void | init (double D, double H, double B, double T, double max_gs, double max_vs) |
Private Attributes | |
double | D |
double | H |
double | B |
double | T |
double | max_gs |
double | max_vs |
double | trkTol |
double | gsTol |
double | vsTol |
IntervalSet | trk_regions |
IntervalSet | gs_regions |
IntervalSet | vs_regions |
IntervalSet | regions |
Objects of class "BandsCore" compute the conflict prevention bands using linear state-based predictions of ownship and (multiple) traffic aircraft positions. This class presumes the use "internal" units and Cartesian coordinates and it doesn't perform bookkeeping of its parameters. For instance, if D, H, etc are set after traffic has been added, the method clear() has to be explicitly called. Otherwise, the state of the bands object is undetermined. For all these reasons, this class is not intended for general use. It is most appropriate for building algorithms that include prevention band information. For a more "user-friendly" version, try the Bands class.
The bands consist of ranges of guidance maneuvers: track angles, ground speeds, and vertical speeds. If a path is (immediately) taken that is within one these bands and no traffic aircraft maneuvers, then a loss of separation will occur within the specified lookahead time. Implicitly, any path that is not in a band does not have a loss of separation within the lookahead time.
Disclaimers: Only parts of these algorithms have been formally verified. We plan to advance the formal verification, but it is currently not complete. Even with a 'complete' verification, there will still be certain assumptions. For instance, the formal proofs use real numbers while these implementations use floating point numbers, so numerical differences could result. In addition, the geodesic computations include certain inaccuracies, especially near the poles.
The basic usages is
Bands b(..with configuration parameters..); b.clear(); b.addTraffic(relative position of ownship and traffic, velocity of ownship, velocity of one traffic aircraft); b.addTraffic(relative position of ownship and traffic, velocity of ownship, velocity of one traffic aircraft); ...add other traffic aircraft... IntervalSet track_bands = b.trackBands(); IntervalSet ground_speed_bands = b.groundSpeedBands(); IntervalSet vertical_speed_bands = b.verticalSpeedBands();
When any "parameter" to this class is set (lookahead time, etc.), any previous bands information is cleared; therefore, all traffic aircraft must be added after the parameters are configured.
BandsCore::BandsCore | ( | ) |
Construct a BandsCore object with default values for configuration parameters.
BandsCore::BandsCore | ( | double | D, |
double | H, | ||
double | T, | ||
double | max_gs, | ||
double | max_vs | ||
) |
Construct a BandsCore object with the given configuration parameters. The bands always begin as "empty" bands: green track bands from 0 to 2pi, green ground speed bands from 0 to max_gs, and green vertical speed bands from -max_vs to max_vs.
D | the minimum horizontal separation distance |
H | the minimum vertical separation distance |
T | the lookahead range end time (start time is 0) |
max_gs | the maximum ground speed that is output by BandsCore, the minimum is 0. |
max_vs | the range of vertical speeds is -max_vs to max_vs [feet/min] |
BandsCore::BandsCore | ( | double | D, |
double | H, | ||
double | B, | ||
double | T, | ||
double | max_gs, | ||
double | max_vs | ||
) |
Construct a BandsCore object with the given configuration parameters. The bands always begin as "empty" bands: green track bands from 0 to 2pi, green ground speed bands from 0 to max_gs, and green vertical speed bands from -max_vs to max_vs.
D | the minimum horizontal separation distance |
H | the minimum vertical separation distance |
B | the lookahead range start |
T | the lookahead range end |
max_gs | the maximum ground speed that is output by BandsCore, the minimum is 0. |
max_vs | the range of vertical speeds is -max_vs to max_vs [feet/min] |
void BandsCore::addTraffic | ( | const Vect3 & | s3, |
const Velocity & | vo3, | ||
const Velocity & | vi3, | ||
bool | do_trk, | ||
bool | do_gs, | ||
bool | do_vs | ||
) |
Compute the conflict prevention band information for one ownship/traffic aircraft pair and add this information to any existing band information. For a collection of "band" information to make sense, all ownship aircraft must be the same. All parameters are in cartesian coordinates in "internal" units.
s | the relative position of the traffic and ownship aircraft |
vo | the velocity of the ownship |
vi | the velocity of the traffic |
This method computes the conflict bands for ground speed for the given aircraft pair. This method is nearly static, it only relies on the configuration parameters for the class (diameter, time, maximum gs, etc.)
This method computes the conflict bands for track angles for the given aircraft pair. This method is nearly static, it only relies on the configuration parameters for the class (diameter, time, maximum gs, etc.)
This method computes the conflict bands for vertical speed for the given aircraft pair. This method is nearly static, it only relies on the configuration parameters for the class (diameter, time, maximum gs, etc.)
void BandsCore::clearNarrowBands | ( | bool | do_trk, |
bool | do_gs, | ||
bool | do_vs | ||
) |
Internally modify the bands to remove narrow bands (-—X-— becomes ------—). This should be run after the bands have been populated (if at all). This should be used on "green" bands. Tolerances define the filter sizes. trkTol in [rad], gsTol in [m/s], vsTol in [m/s]
void BandsCore::clearTrackBreaks | ( | ) |
Internally modify the bands to remove narrow gaps (XXXX-XXXX becomes XXXXXXXXX). This should be run after the bands have been populated (if at all). This should be used on "red" bands. Tolerances define the filter sizes. trkTol in [rad], gsTol in [m/s], vsTol in [m/s]
void BandsCore::clearTrackRegions | ( | ) |
Clear all bands to "empty" bands.
double BandsCore::getDiameter | ( | ) | const |
Returns the minimum horizontal separation distance in internal units.
|
virtual |
Returns minimum acceptable ground speed
double BandsCore::getHeight | ( | ) | const |
Returns the minimum vertical separation distance in internal units.
double BandsCore::getMaxGroundSpeed | ( | ) | const |
Returns the maximum ground speed in internal units.
double BandsCore::getMaxVerticalSpeed | ( | ) | const |
Returns the range of vertical speed in internal units output by BandsCore.
double BandsCore::getStartTime | ( | ) | const |
Returns the lookahead start time in internal units.
double BandsCore::getTime | ( | ) | const |
Returns the end lookahead time in internal units.
|
virtual |
Returns minimum acceptable track angle
|
virtual |
Returns minimum acceptable ground speed
const IntervalSet & BandsCore::groundSpeedBands | ( | ) | const |
The ground speed bands in internal units. The range of ground speed bands is from 0 to max_gs.
bool BandsCore::groundSpeedBands | ( | double | gs | ) | const |
Is there a conflict (within the given lookahead time) for this ground speed?
void BandsCore::setDiameter | ( | double | d | ) |
Sets the minimum horizontal separation distance in internal units.
|
virtual |
Sets a minimum size for green/no conflict bands to be allowed, to avoid "eye of the needle" situations. Any green bands smaller than this will not be reported.
gs | minimum acceptable ground speed |
void BandsCore::setHeight | ( | double | h | ) |
Sets the minimum vertical separation distance in internal units.
void BandsCore::setMaxGroundSpeed | ( | double | gs | ) |
Sets the maximum ground speed in internal units, the minimum is 0.
void BandsCore::setMaxVerticalSpeed | ( | double | vs | ) |
Sets the range of vertical speeds in internal units, -max_vs to max_vs.
void BandsCore::setTime | ( | double | t | ) |
Set the end lookahead time in internal units. The lookahead range start is set to 0.
void BandsCore::setTimeRange | ( | double | b, |
double | t | ||
) |
Set the lookahead time range in internal units with start and end times.
|
virtual |
Sets a minimum size for green/no conflict bands to be allowed, to avoid "eye of the needle" situations. Any green bands smaller than this will not be reported.
trk | minimum acceptable track angle |
|
virtual |
Sets a minimum size for green/no conflict bands to be allowed, to avoid "eye of the needle" situations. Any green bands smaller than this will not be reported.
vs | minimum acceptable vertical speed |
std::string BandsCore::toString | ( | ) | const |
Return a string representation of this object
const IntervalSet & BandsCore::trackBands | ( | ) | const |
The track angle bands. The angles are in 'compass' angles in internal units, counter-clockwise from true north.
bool BandsCore::trackBands | ( | double | trk | ) | const |
Is there a conflict (within the given lookahead time) for this track angle?
const IntervalSet & BandsCore::verticalSpeedBands | ( | ) | const |
The vertical speed bands in internal units. The range of vertical speeds is -max_vs to max_vs.
bool BandsCore::verticalSpeedBands | ( | double | vs | ) | const |
Is there a conflict (within the given lookahead time) for this vertical speed?