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

Public Member Functions

const UrgencyStrategyget_urgency_strategy () const
 
bool set_urgency_strategy (const UrgencyStrategy *strat)
 
DaidalusCoreoperator= (const DaidalusCore &core)
 
 DaidalusCore (const DaidalusCore &core)
 
 DaidalusCore (const Alerter &alerter)
 
 DaidalusCore (const Detection3D *det, double T)
 
void clear ()
 
void clear_wind ()
 
bool set_alerter_ownship (int alerter_idx)
 
bool set_alerter_traffic (int idx, int alerter_idx)
 
void clear_hysteresis ()
 
void stale ()
 
bool isFresh () const
 
void refresh ()
 
int DTAStatus ()
 
const TrafficStatemostUrgentAircraft ()
 
int epsilonH ()
 
int epsilonV ()
 
int epsilonH (bool recovery_case, const TrafficState &traffic)
 
int epsilonV (bool recovery_case, const TrafficState &traffic)
 
bool bands_for (int region)
 
double minHorizontalRecovery () const
 
double minVerticalRecovery () const
 
void set_ownship_state (const std::string &id, const Position &pos, const Velocity &vel, double time)
 
int find_traffic_state (const std::string &id) const
 
int set_traffic_state (const std::string &id, const Position &pos, const Velocity &vel, double time)
 
void reset_ownship (int idx)
 
bool remove_traffic (int idx)
 
void set_wind_velocity (const Velocity &wind)
 
bool linear_projection (double offset)
 
bool has_ownship () const
 
bool has_traffic () const
 
int horizontal_contours (std::vector< std::vector< Position > > &blobs, int idx, int alert_level)
 
int horizontal_hazard_zone (std::vector< Position > &haz, int idx, int alert_level, bool loss, bool from_ownship)
 
int alert_level (int idx, int turning, int accelerating, int climbing)
 
const std::vector< IndexLevelT > & acs_conflict_bands (int conflict_region)
 
const Intervaltiov (int conflict_region)
 
int alerter_index_of (const TrafficState &intruder)
 
TrafficState criteria_ac ()
 
TrafficState recovery_ac ()
 
std::string outputStringAircraftStates (bool internal) const
 
std::string rawString () const
 
std::string toString () const
 

Static Public Member Functions

static int epsilonH (const TrafficState &ownship, const TrafficState &ac)
 
static int epsilonV (const TrafficState &ownship, const TrafficState &ac)
 

Public Attributes

TrafficState ownship
 
std::vector< TrafficStatetraffic
 
double current_time
 
Velocity wind_vector
 
DaidalusParameters parameters
 

Private Member Functions

void copyFrom (const DaidalusCore &core)
 
void refresh_mua_eps ()
 
int dta_hysteresis_current_value (const TrafficState &ac)
 
int alerting_hysteresis_current_value (const TrafficState &intruder, int turning, int accelerating, int climbing)
 
bool greater_than_corrective () const
 
int raw_alert_level (const Alerter &alerter, const TrafficState &intruder, int turning, int accelerating, int climbing)
 
bool check_alerting_thresholds (const Alerter &alerter, int alert_level, const TrafficState &intruder, int turning, int accelerating, int climbing)
 
void conflict_aircraft (int conflict_region)
 

Private Attributes

const UrgencyStrategyurgency_strategy_
 
int cache_
 
TrafficState most_urgent_ac_
 
int epsh_
 
int epsv_
 
int dta_status_
 
std::vector< std::vector< IndexLevelT > > acs_conflict_bands_
 
Interval tiov_ [BandsRegion::NUMBER_OF_CONFLICT_BANDS]
 
bool bands4region_ [BandsRegion::NUMBER_OF_CONFLICT_BANDS]
 
std::map< std::string, HysteresisDataalerting_hysteresis_acs_
 
std::map< std::string, HysteresisDatadta_hysteresis_acs_
 

Member Function Documentation

◆ acs_conflict_bands()

const std::vector< IndexLevelT > & larcfm::DaidalusCore::acs_conflict_bands ( int  conflict_region)

Requires 0 <= conflict_region < CONFICT_BANDS

Returns
sorted list of aircraft indices and alert_levels contributing to conflict (non-peripheral) bands for given conflict region. INTERNAL USE ONLY

◆ alert_level()

int larcfm::DaidalusCore::alert_level ( int  idx,
int  turning,
int  accelerating,
int  climbing 
)

Computes alerting type of ownship and an the idx-th aircraft in the traffic list The number 0 means no alert. A negative number means that aircraft index is not valid. When the alerter object has been configured to consider ownship maneuvers, i.e., using spread values, the alerting logic could also use information about the ownship turning, accelerating, and climbing status as follows:

  • turning < 0: ownship is turning left, turning > 0: ownship is turning right, turning = 0: do not make any turning assumption about the ownship.
  • accelerating < 0: ownship is decelerating, accelerating > 0: ownship is accelerating, accelerating = 0: do not make any accelerating assumption about the ownship.
  • climbing < 0: ownship is descending, climbing > 0: ownship is climbing, climbing = 0: do not make any climbing assumption about the ownship. NOTES:
  1. This method uses a 0-based traffic index.
  2. This methods applies MofN alerting strategy

◆ alerter_index_of()

int larcfm::DaidalusCore::alerter_index_of ( const TrafficState intruder)

Return alert index used for intruder aircraft. The alert index depends on alerting logic and DTA logic. If ownship centric, it returns the alert index of ownship. Otherwise, returns the alert index of the intruder. If the DTA logic is enabled, the alerter of an aircraft is determined by its dta status.

◆ bands_for()

bool larcfm::DaidalusCore::bands_for ( int  region)

Return true if bands are computed for this particular region (0:NEAR, 1:MID, 2: FAR)

◆ check_alerting_thresholds()

bool larcfm::DaidalusCore::check_alerting_thresholds ( const Alerter alerter,
int  alert_level,
const TrafficState intruder,
int  turning,
int  accelerating,
int  climbing 
)
private

Return true if and only if threshold values, defining an alerting level, are violated.

◆ clear()

void larcfm::DaidalusCore::clear ( )

Clear ownship and traffic data from this object.

◆ clear_hysteresis()

void larcfm::DaidalusCore::clear_hysteresis ( )

Clear hysteresis information from this object.

Clear alerting hysteresis information from this object.

◆ clear_wind()

void larcfm::DaidalusCore::clear_wind ( )

Clear wind vector from this object.

◆ conflict_aircraft()

void larcfm::DaidalusCore::conflict_aircraft ( int  conflict_region)
private

Requires 0 <= conflict_region < CONFICT_BANDS Put in acs_conflict_bands_ the list of aircraft predicted to be in conflict for the given region. Put compute_bands_ a flag indicating if bands for given region are computed for some aircraft Put in tiov_ the time interval of violation for given region

◆ DTAStatus()

int larcfm::DaidalusCore::DTAStatus ( )

Returns DTA status: 0 : DTA is not active -1 : DTA is active, but special bands are not enabled yet 1 : DTA is active and special bands are enabled

◆ epsilonH() [1/2]

int larcfm::DaidalusCore::epsilonH ( )

Returns horizontal epsilon for implicit coordination with respect to criteria ac.

◆ epsilonH() [2/2]

int larcfm::DaidalusCore::epsilonH ( bool  recovery_case,
const TrafficState traffic 
)

Returns horizontal epsilon for implicit coordination with respect to criteria ac.

◆ epsilonV() [1/2]

int larcfm::DaidalusCore::epsilonV ( )

Returns vertical epsilon for implicit coordination with respect to criteria ac.

◆ epsilonV() [2/2]

int larcfm::DaidalusCore::epsilonV ( bool  recovery_case,
const TrafficState traffic 
)

Returns vertical epsilon for implicit coordination with respect to criteria ac.

◆ isFresh()

bool larcfm::DaidalusCore::isFresh ( ) const

Returns true is object is fresh

◆ minHorizontalRecovery()

double larcfm::DaidalusCore::minHorizontalRecovery ( ) const

Returns actual minimum horizontal separation for recovery bands in internal units.

◆ minVerticalRecovery()

double larcfm::DaidalusCore::minVerticalRecovery ( ) const

Returns actual minimum vertical separation for recovery bands in internal units.

◆ mostUrgentAircraft()

const TrafficState & larcfm::DaidalusCore::mostUrgentAircraft ( )
Returns
most urgent aircraft for implicit coordination

◆ refresh()

void larcfm::DaidalusCore::refresh ( )

Refresh cached values

◆ stale()

void larcfm::DaidalusCore::stale ( )

Set cached values to stale conditions as they are no longer fresh.

Set cached values to stale conditions as they are no longer fresh. If hysteresis is true, it also clears hysteresis variables

◆ tiov()

const Interval & larcfm::DaidalusCore::tiov ( int  conflict_region)

Requires 0 <= conflict_region < CONFICT_BANDS

Returns
Return time interval of conflict for given conflict region INTERNAL USE ONLY

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