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::DaidalusRealBands Class Referenceabstract
Inheritance diagram for larcfm::DaidalusRealBands:
larcfm::DaidalusIntegerBands larcfm::DaidalusAltBands larcfm::DaidalusDirBands larcfm::DaidalusHsBands larcfm::DaidalusVsBands

Public Member Functions

 DaidalusRealBands (double mod=0)
 
 DaidalusRealBands (const DaidalusRealBands &b)
 
virtual bool get_recovery (const DaidalusParameters &parameters) const =0
 
virtual double get_step (const DaidalusParameters &parameters) const =0
 
virtual double get_min (const DaidalusParameters &parameters) const =0
 
virtual double get_max (const DaidalusParameters &parameters) const =0
 
virtual double get_min_rel (const DaidalusParameters &parameters) const =0
 
virtual double get_max_rel (const DaidalusParameters &parameters) const =0
 
virtual double own_val (const TrafficState &ownship) const =0
 
virtual double time_step (const DaidalusParameters &parameters, const TrafficState &ownship) const =0
 
virtual bool instantaneous_bands (const DaidalusParameters &parameters) const =0
 
virtual double max_delta_resolution (const DaidalusParameters &parameters) const =0
 
virtual bool saturate_corrective_bands (const DaidalusParameters &parameters, int dta_status) const
 
virtual void set_special_configuration (const DaidalusParameters &parameters, int dta_status)
 
double get_min_val_ () const
 
double get_max_val_ () const
 
double get_mod () const
 
void set_min_max_rel (double min_rel, double max_rel)
 
bool kinematic_conflict (const DaidalusParameters &parameters, const TrafficState &ownship, const TrafficState &traffic, Detection3D *detector, int epsh, int epsv, double alerting_time, int dta_status)
 
int length (DaidalusCore &core)
 
const Intervalinterval (DaidalusCore &core, int i)
 
BandsRegion::Region region (DaidalusCore &core, int i)
 
int indexOf (DaidalusCore &core, double val)
 
void stale ()
 
void clear_hysteresis ()
 
bool isFresh () const
 
void refresh (DaidalusCore &core)
 
void force_compute (DaidalusCore &core)
 
const std::vector< IndexLevelT > & acs_peripheral_bands (DaidalusCore &core, int conflict_region)
 
RecoveryInformation recoveryInformation (DaidalusCore &core)
 
const std::vector< BandsRange > & ranges (DaidalusCore &core)
 
double resolution (DaidalusCore &core, bool dir)
 
double raw_resolution (DaidalusCore &core, bool dir)
 
bool preferred_direction (DaidalusCore &core)
 
double last_time_to_maneuver (DaidalusCore &core, const TrafficState &intruder)
 
void toIntervalSet (IntervalSet &noneset, const std::vector< Integerval > &l, double scal, double add) const
 
virtual void none_bands (IntervalSet &noneset, const Detection3D *conflict_det, const Detection3D *recovery_det, int epsh, int epsv, double B, double T, const DaidalusParameters &parameters, const TrafficState &ownship, const TrafficState &traffic) const
 
virtual bool any_red (const Detection3D *conflict_det, const Detection3D *recovery_det, int epsh, int epsv, double B, double T, const DaidalusParameters &parameters, const TrafficState &ownship, const TrafficState &traffic) const
 
virtual bool all_red (const Detection3D *conflict_det, const Detection3D *recovery_det, int epsh, int epsv, double B, double T, const DaidalusParameters &parameters, const TrafficState &ownship, const TrafficState &traffic) const
 
bool all_green (const Detection3D *conflict_det, const Detection3D *recovery_det, int epsh, int epsv, double B, double T, const DaidalusParameters &parameters, const TrafficState &ownship, const TrafficState &traffic) const
 
bool any_green (const Detection3D *conflict_det, const Detection3D *recovery_det, int epsh, int epsv, double B, double T, const DaidalusParameters &parameters, const TrafficState &ownship, const TrafficState &traffic) const
 
std::string rawString () const
 
std::string toString () const
 
std::string toPVS () const
 
- Public Member Functions inherited from larcfm::DaidalusIntegerBands
virtual std::pair< Vect3, Velocitytrajectory (const DaidalusParameters &parameters, const TrafficState &ownship, double time, bool dir, int target_step, bool instantaneous) const =0
 
bool CD_future_traj (const Detection3D *det, double B, double T, bool trajdir, double tsk, const DaidalusParameters &parameters, const TrafficState &ownship, const TrafficState &traffic, int target_step, bool instantaneous) const
 
bool no_CD_future_traj (const Detection3D *conflict_det, const Detection3D *recovery_det, double B, double T, bool trajdir, double tsk, const DaidalusParameters &parameters, const TrafficState &ownship, const TrafficState &traffic, int target_step, bool instantaneous) const
 
bool LOS_at (const Detection3D *det, bool trajdir, double tsk, const DaidalusParameters &parameters, const TrafficState &ownship, const TrafficState &traffic, int target_step, bool instantaneous) const
 
void integer_bands_combine (std::vector< Integerval > &l, const Detection3D *conflict_det, const Detection3D *recovery_det, double tstep, double B, double T, int maxl, int maxr, const DaidalusParameters &parameters, const TrafficState &ownship, const TrafficState &traffic, int epsh, int epsv) const
 
bool all_integer_red (const Detection3D *conflict_det, const Detection3D *recovery_det, double tstep, double B, double T, int maxl, int maxr, const DaidalusParameters &parameters, const TrafficState &ownship, const TrafficState &traffic, int epsh, int epsv, int dir) const
 
bool any_integer_red (const Detection3D *conflict_det, const Detection3D *recovery_det, double tstep, double B, double T, int maxl, int maxr, const DaidalusParameters &parameters, const TrafficState &ownship, const TrafficState &traffic, int epsh, int epsv, int dir) const
 

Private Member Functions

double min_rel (const DaidalusParameters &parameters) const
 
double max_rel (const DaidalusParameters &parameters) const
 
bool set_input (const DaidalusParameters &parameters, const TrafficState &ownship, int dta_status)
 
void peripheral_aircraft (DaidalusCore &core, int conflict_region)
 
void color_values (std::vector< ColorValue > &lcvs, const std::vector< IntervalSet > &none_sets, DaidalusCore &core, bool recovery, int last_region)
 
void saturateNoneIntervalSet (IntervalSet &noneset) const
 
void compute_none_bands (IntervalSet &none_set_region, const std::vector< IndexLevelT > &ilts, Detection3D *det, Detection3D *recovery, bool recovery_case, double B, DaidalusCore &core)
 
bool compute_recovery_bands (IntervalSet &none_set_region, const std::vector< IndexLevelT > &ilts, DaidalusCore &core)
 
bool compute_region (std::vector< IntervalSet > &none_sets, int conflict_region, int corrective_region, DaidalusCore &core)
 
void compute (DaidalusCore &core)
 
int maxdown (const DaidalusParameters &parameters, const TrafficState &ownship) const
 
int maxup (const DaidalusParameters &parameters, const TrafficState &ownship) const
 
void add_noneset (IntervalSet &noneset, double lb, double ub) const
 

Private Attributes

double mod_
 
double min_rel_
 
double max_rel_
 
bool outdated_
 
int checked_
 
std::vector< std::vector< IndexLevelT > > acs_peripheral_bands_
 
std::vector< std::vector< IndexLevelT > > acs_bands_
 
std::vector< BandsRangeranges_
 
double recovery_time_
 
int recovery_nfactor_
 
double recovery_horizontal_distance_
 
double recovery_vertical_distance_
 
double min_val_
 
double max_val_
 
double min_relative_
 
double max_relative_
 
bool circular_
 
BandsHysteresis bands_hysteresis_
 

Additional Inherited Members

- Static Public Member Functions inherited from larcfm::DaidalusIntegerBands
static void append_intband (std::vector< Integerval > &l, std::vector< Integerval > &r)
 
static void neg (std::vector< Integerval > &l)
 

Member Function Documentation

◆ acs_peripheral_bands()

const std::vector< IndexLevelT > & larcfm::DaidalusRealBands::acs_peripheral_bands ( DaidalusCore core,
int  conflict_region 
)

Requires 0 <= conflict_region < CONFICT_BANDS

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

◆ add_noneset()

void larcfm::DaidalusRealBands::add_noneset ( IntervalSet noneset,
double  lb,
double  ub 
) const
private

Add (lb,ub) to noneset. In the case of mod_ > 0, lb can be greater than ub. This function takes care of the mod logic. This function doesn't do anything when lb and ub are almost equals.

Parameters
nonesetInterval set where (lb,ub) will be added
lblower bound
ubupper bound When mod_ = 0, lb <= ub.

◆ clear_hysteresis()

void larcfm::DaidalusRealBands::clear_hysteresis ( )

clear hysteresis

◆ color_values()

void larcfm::DaidalusRealBands::color_values ( std::vector< ColorValue > &  lcvs,
const std::vector< IntervalSet > &  none_sets,
DaidalusCore core,
bool  recovery,
int  last_region 
)
private

Compute list of color values in lcvs from sets of none bands Ensure that the intervals are "complete", filling in missing intervals and ensuring the bands end at the proper bounds.

◆ compute()

void larcfm::DaidalusRealBands::compute ( DaidalusCore core)
private

Compute all bands.

◆ compute_none_bands()

void larcfm::DaidalusRealBands::compute_none_bands ( IntervalSet none_set_region,
const std::vector< IndexLevelT > &  ilts,
Detection3D det,
Detection3D recovery,
bool  recovery_case,
double  B,
DaidalusCore core 
)
private

Compute none bands for a const std::vector<IndexLevelT>& ilts of IndexLevelT in none_set_region. The none_set_region is initiated as a saturated green band. Uses aircraft detector if parameter detector is none. The epsilon parameters for coordinations are handled according to the recovery_case flag.

◆ compute_recovery_bands()

bool larcfm::DaidalusRealBands::compute_recovery_bands ( IntervalSet none_set_region,
const std::vector< IndexLevelT > &  ilts,
DaidalusCore core 
)
private

Compute recovery bands. Class variables recovery_time_, recovery_horizontal_distance_, and recovery_vertical_distance_ are set. Return true if non-saturated recovery bands where computed

◆ compute_region()

bool larcfm::DaidalusRealBands::compute_region ( std::vector< IntervalSet > &  none_sets,
int  conflict_region,
int  corrective_region,
DaidalusCore core 
)
private

Requires: compute_bands(conflict_region) = true && 0 <= conflict_region < CONFLICT_BANDS Compute bands for one region. Return true iff recovery bands were computed.

◆ force_compute()

void larcfm::DaidalusRealBands::force_compute ( DaidalusCore core)

Force computation of kinematic bands

◆ indexOf()

int larcfm::DaidalusRealBands::indexOf ( DaidalusCore core,
double  val 
)

Return index in ranges_ where val is found, -1 if invalid input or not found

Return index in ranges_ where val is found, -1 if invalid input, >= length if not found

◆ isFresh()

bool larcfm::DaidalusRealBands::isFresh ( ) const

Returns true is object is fresh

◆ last_time_to_maneuver()

double larcfm::DaidalusRealBands::last_time_to_maneuver ( DaidalusCore core,
const TrafficState intruder 
)

Return last time to maneuver, in seconds, for ownship with respect to traffic aircraft at ac_idx for conflict alert level. Return NaN if the ownship is not in conflict with aircraft within lookahead time. Return negative infinity if there is no time to maneuver. Note: 1 <= alert_level <= alerter.size()

◆ none_bands()

void larcfm::DaidalusRealBands::none_bands ( IntervalSet noneset,
const Detection3D conflict_det,
const Detection3D recovery_det,
int  epsh,
int  epsv,
double  B,
double  T,
const DaidalusParameters parameters,
const TrafficState ownship,
const TrafficState traffic 
) const
virtual

The output parameter noneset has a list of non-conflict ranges orderd within [min,max] values (or [0,mod] in the case of circular bands, i.e., when mod == 0).

Reimplemented in larcfm::DaidalusAltBands.

◆ peripheral_aircraft()

void larcfm::DaidalusRealBands::peripheral_aircraft ( DaidalusCore core,
int  conflict_region 
)
private

Requires 0 <= conflict_region < CONFICT_BANDS and acs_peripheral_bands_ is empty Put in acs_peripheral_bands_ the list of aircraft predicted to have a peripheral band for the given region.

◆ preferred_direction()

bool larcfm::DaidalusRealBands::preferred_direction ( DaidalusCore core)

Compute preferred direction based on resolution that is closer to current value.

◆ ranges()

const std::vector< BandsRange > & larcfm::DaidalusRealBands::ranges ( DaidalusCore core)

Return list of bands ranges

◆ raw_resolution()

double larcfm::DaidalusRealBands::raw_resolution ( DaidalusCore core,
bool  dir 
)

Returns raw resolution maneuver (no hysteresis, no persistence). Return NaN if there is no conflict or if input is invalid. Return positive/negative infinity if there is no resolution to the right/up and negative infinity if there is no resolution to the left/down.

◆ recoveryInformation()

RecoveryInformation larcfm::DaidalusRealBands::recoveryInformation ( DaidalusCore core)

Return recovery information.

◆ refresh()

void larcfm::DaidalusRealBands::refresh ( DaidalusCore core)

Refresh cached values

◆ resolution()

double larcfm::DaidalusRealBands::resolution ( DaidalusCore core,
bool  dir 
)

Returns resolution maneuver. Return NaN if there is no conflict or if input is invalid. Return positive/negative infinity if there is no resolution to the right/up and negative infinity if there is no resolution to the left/down.

◆ saturateNoneIntervalSet()

void larcfm::DaidalusRealBands::saturateNoneIntervalSet ( IntervalSet noneset) const
private

Create an IntervalSet that represents a satured NONE band

◆ set_min_max_rel()

void larcfm::DaidalusRealBands::set_min_max_rel ( double  min_rel,
double  max_rel 
)

Overwrite relative values from those in the parameters. When mod_ > 0, requires min_rel and max_rel to be in [0,mod/2]. When mod_ == 0, a negative min_rel value represents val-min and a negative value max_rel value represents max-val.

◆ stale()

void larcfm::DaidalusRealBands::stale ( )

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

◆ toIntervalSet()

void larcfm::DaidalusRealBands::toIntervalSet ( IntervalSet noneset,
const std::vector< Integerval > &  l,
double  scal,
double  add 
) const

This function scales the interval, add a constant, and constraint the intervals to min and max. The function takes care of modulo logic, in the case of circular bands.


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