ICAROUS
|
Public Member Functions | |
DaidalusRealBands (double mod=0) | |
DaidalusRealBands (const DaidalusRealBands &b) | |
virtual bool | get_recovery (const DaidalusParameters ¶meters) const =0 |
virtual double | get_step (const DaidalusParameters ¶meters) const =0 |
virtual double | get_min (const DaidalusParameters ¶meters) const =0 |
virtual double | get_max (const DaidalusParameters ¶meters) const =0 |
virtual double | get_min_rel (const DaidalusParameters ¶meters) const =0 |
virtual double | get_max_rel (const DaidalusParameters ¶meters) const =0 |
virtual double | own_val (const TrafficState &ownship) const =0 |
virtual double | time_step (const DaidalusParameters ¶meters, const TrafficState &ownship) const =0 |
virtual bool | instantaneous_bands (const DaidalusParameters ¶meters) const =0 |
virtual double | max_delta_resolution (const DaidalusParameters ¶meters) const =0 |
virtual bool | saturate_corrective_bands (const DaidalusParameters ¶meters, int dta_status) const |
virtual void | set_special_configuration (const DaidalusParameters ¶meters, 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 ¶meters, const TrafficState &ownship, const TrafficState &traffic, Detection3D *detector, int epsh, int epsv, double alerting_time, int dta_status) |
int | length (DaidalusCore &core) |
const Interval & | interval (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 ¶meters, 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 ¶meters, 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 ¶meters, 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 ¶meters, 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 ¶meters, const TrafficState &ownship, const TrafficState &traffic) const |
std::string | rawString () const |
std::string | toString () const |
std::string | toPVS () const |
![]() | |
virtual std::pair< Vect3, Velocity > | trajectory (const DaidalusParameters ¶meters, 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 ¶meters, 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 ¶meters, const TrafficState &ownship, const TrafficState &traffic, int target_step, bool instantaneous) const |
bool | LOS_at (const Detection3D *det, bool trajdir, double tsk, const DaidalusParameters ¶meters, 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 ¶meters, 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 ¶meters, 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 ¶meters, const TrafficState &ownship, const TrafficState &traffic, int epsh, int epsv, int dir) const |
Private Member Functions | |
double | min_rel (const DaidalusParameters ¶meters) const |
double | max_rel (const DaidalusParameters ¶meters) const |
bool | set_input (const DaidalusParameters ¶meters, 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 ¶meters, const TrafficState &ownship) const |
int | maxup (const DaidalusParameters ¶meters, 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< BandsRange > | ranges_ |
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 void | append_intband (std::vector< Integerval > &l, std::vector< Integerval > &r) |
static void | neg (std::vector< Integerval > &l) |
const std::vector< IndexLevelT > & larcfm::DaidalusRealBands::acs_peripheral_bands | ( | DaidalusCore & | core, |
int | conflict_region | ||
) |
Requires 0 <= conflict_region < CONFICT_BANDS
|
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.
noneset | Interval set where (lb,ub) will be added |
lb | lower bound |
ub | upper bound When mod_ = 0, lb <= ub. |
void larcfm::DaidalusRealBands::clear_hysteresis | ( | ) |
clear hysteresis
|
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.
|
private |
Compute all bands.
|
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.
|
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
|
private |
Requires: compute_bands(conflict_region) = true && 0 <= conflict_region < CONFLICT_BANDS Compute bands for one region. Return true iff recovery bands were computed.
void larcfm::DaidalusRealBands::force_compute | ( | DaidalusCore & | core | ) |
Force computation of kinematic bands
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
bool larcfm::DaidalusRealBands::isFresh | ( | ) | const |
Returns true is object is fresh
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()
|
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.
|
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.
bool larcfm::DaidalusRealBands::preferred_direction | ( | DaidalusCore & | core | ) |
Compute preferred direction based on resolution that is closer to current value.
const std::vector< BandsRange > & larcfm::DaidalusRealBands::ranges | ( | DaidalusCore & | core | ) |
Return list of bands ranges
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 larcfm::DaidalusRealBands::recoveryInformation | ( | DaidalusCore & | core | ) |
Return recovery information.
void larcfm::DaidalusRealBands::refresh | ( | DaidalusCore & | core | ) |
Refresh cached values
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.
|
private |
Create an IntervalSet that represents a satured NONE band
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.
void larcfm::DaidalusRealBands::stale | ( | ) |
Set cached values to stale conditions as they are no longer fresh
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.