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

#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 IntervalSettrackBands () const
 
bool trackBands (double trk) const
 
int trackSize () const
 
const IntervalSetgroundSpeedBands () const
 
bool groundSpeedBands (double gs) const
 
int groundSpeedSize () const
 
const IntervalSetverticalSpeedBands () 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
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ BandsCore() [1/3]

BandsCore::BandsCore ( )

Construct a BandsCore object with default values for configuration parameters.

◆ BandsCore() [2/3]

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.

Parameters
Dthe minimum horizontal separation distance
Hthe minimum vertical separation distance
Tthe lookahead range end time (start time is 0)
max_gsthe maximum ground speed that is output by BandsCore, the minimum is 0.
max_vsthe range of vertical speeds is -max_vs to max_vs [feet/min]

◆ BandsCore() [3/3]

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.

Parameters
Dthe minimum horizontal separation distance
Hthe minimum vertical separation distance
Bthe lookahead range start
Tthe lookahead range end
max_gsthe maximum ground speed that is output by BandsCore, the minimum is 0.
max_vsthe range of vertical speeds is -max_vs to max_vs [feet/min]

Member Function Documentation

◆ addTraffic()

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.

Parameters
sthe relative position of the traffic and ownship aircraft
vothe velocity of the ownship
vithe velocity of the traffic

◆ calcGsBands()

void BandsCore::calcGsBands ( Vect3  s3,
Vect3  vo3,
Vect3  vi3 
) const
private

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.)

◆ calcTrkBands()

void BandsCore::calcTrkBands ( Vect3  s3,
Vect3  vo3,
Vect3  vi3 
) const
private

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.)

◆ calcVsBands()

void BandsCore::calcVsBands ( Vect3  s3,
Vect3  vo3,
Vect3  vi3 
) const
private

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.)

◆ clearNarrowBands()

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]

◆ clearTrackBreaks()

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]

◆ clearTrackRegions()

void BandsCore::clearTrackRegions ( )

Clear all bands to "empty" bands.

◆ getDiameter()

double BandsCore::getDiameter ( ) const

Returns the minimum horizontal separation distance in internal units.

◆ getGroundSpeedTolerance()

double BandsCore::getGroundSpeedTolerance ( ) const
virtual

Returns minimum acceptable ground speed

◆ getHeight()

double BandsCore::getHeight ( ) const

Returns the minimum vertical separation distance in internal units.

◆ getMaxGroundSpeed()

double BandsCore::getMaxGroundSpeed ( ) const

Returns the maximum ground speed in internal units.

◆ getMaxVerticalSpeed()

double BandsCore::getMaxVerticalSpeed ( ) const

Returns the range of vertical speed in internal units output by BandsCore.

◆ getStartTime()

double BandsCore::getStartTime ( ) const

Returns the lookahead start time in internal units.

◆ getTime()

double BandsCore::getTime ( ) const

Returns the end lookahead time in internal units.

◆ getTrackTolerance()

double BandsCore::getTrackTolerance ( ) const
virtual

Returns minimum acceptable track angle

◆ getVerticalSpeedTolerance()

double BandsCore::getVerticalSpeedTolerance ( ) const
virtual

Returns minimum acceptable ground speed

◆ groundSpeedBands() [1/2]

const IntervalSet & BandsCore::groundSpeedBands ( ) const

The ground speed bands in internal units. The range of ground speed bands is from 0 to max_gs.

◆ groundSpeedBands() [2/2]

bool BandsCore::groundSpeedBands ( double  gs) const

Is there a conflict (within the given lookahead time) for this ground speed?

◆ setDiameter()

void BandsCore::setDiameter ( double  d)

Sets the minimum horizontal separation distance in internal units.

◆ setGroundSpeedTolerance()

void BandsCore::setGroundSpeedTolerance ( double  gs)
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.

Parameters
gsminimum acceptable ground speed

◆ setHeight()

void BandsCore::setHeight ( double  h)

Sets the minimum vertical separation distance in internal units.

◆ setMaxGroundSpeed()

void BandsCore::setMaxGroundSpeed ( double  gs)

Sets the maximum ground speed in internal units, the minimum is 0.

◆ setMaxVerticalSpeed()

void BandsCore::setMaxVerticalSpeed ( double  vs)

Sets the range of vertical speeds in internal units, -max_vs to max_vs.

◆ setTime()

void BandsCore::setTime ( double  t)

Set the end lookahead time in internal units. The lookahead range start is set to 0.

◆ setTimeRange()

void BandsCore::setTimeRange ( double  b,
double  t 
)

Set the lookahead time range in internal units with start and end times.

◆ setTrackTolerance()

void BandsCore::setTrackTolerance ( double  trk)
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.

Parameters
trkminimum acceptable track angle

◆ setVerticalSpeedTolerance()

void BandsCore::setVerticalSpeedTolerance ( double  vs)
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.

Parameters
vsminimum acceptable vertical speed

◆ toString()

std::string BandsCore::toString ( ) const

Return a string representation of this object

◆ trackBands() [1/2]

const IntervalSet & BandsCore::trackBands ( ) const

The track angle bands. The angles are in 'compass' angles in internal units, counter-clockwise from true north.

◆ trackBands() [2/2]

bool BandsCore::trackBands ( double  trk) const

Is there a conflict (within the given lookahead time) for this track angle?

◆ verticalSpeedBands() [1/2]

const IntervalSet & BandsCore::verticalSpeedBands ( ) const

The vertical speed bands in internal units. The range of vertical speeds is -max_vs to max_vs.

◆ verticalSpeedBands() [2/2]

bool BandsCore::verticalSpeedBands ( double  vs) const

Is there a conflict (within the given lookahead time) for this vertical speed?


The documentation for this class was generated from the following files: