DAIDALUSv2.0.1
Release DAIDALUS-v2.0.1:
-
January 11, 2021
- Fixed comment related to SUM setting in
Daidalus
class - Added interface to raw resolutions
- Fixed comment related to SUM setting in
-
December 11, 2020
- Fixed computation of TCPA hazard volume when
TTHR*||v|| < DTHR
and other volumes when relative velocity is zero (these fixes are only for display)
- Fixed computation of TCPA hazard volume when
-
October 9, 2020
- Added performance metrics methods to
Daidalus
class - Fixed bug in
Daidalus
class, wherenumberOfAircraft
was used instead oflastTrafficIndex
- Added performance metrics methods to
-
September 29, 2020
- Added documentation (automatically generated from code), updated README.
-
September 21, 2020
Fixed error in DaidalusCore copy constructor (DaidalusCore.h
andDaidalusCore.cpp
). Thanks to V-ALICE -
August 20, 2020
Fixed memory leak in non _MSC_VER compiled branch (Util.cpp
andutil_string.cpp
). Thanks to B. Shimanuki -
August 12, 2020
- Updated
Makefile
- Removed global variable
j_step_
(using instead local parameterstarget_step
andinstantaneous
) in integer bands and altitude bands - Removed parameters
B2
,T2
using instead0
,T
.
- Updated
-
August 4, 2020
Implemented hazard zones (for display purposes only)
Pre-Release DAIDALUS-v2.0.g
June 8, 2020
-
DTA logic is fully implemented. When DTA lat,lon, radius, and height
is provided, DAIDALUS automatically uses dta_alerter accordingly
to either ownship or intruder centric alerting. When DTA is active,
special bands are computed when an alert higher than corrective,
i.e., warning, is issued. The behavior of the special bands is
controlled by thedta_logic
value. When the value is positive,
vertical bands block the down side. When the value is negative,
vertical bands block the down side and horizontal direction bands
saturate. When the value of dta is zero, DTA logic is disabled. -
DTA can be manually activated by setting the DTA alerter of the
ownship, when ownship-centric alerting logic, or intruder, when
intruder-centric alerting logic, todta_alerter
. -
Winds in v2.0.g are sticky. Once they are set they remain set until
explicitly set to a different value or the are disable using the
methodsetNoWind()
in theDaidalus
class. -
Conflict bands, the ones in front of an aircraft, are computed until
lookahead time. In some encounter, this will provide wider bands. -
When hysteresis is enabled, e.g., after the first alert of a given
level, the subsequent alerts and maneuver guidance for the same
alerting aircraft are computed using early alerting time instead of
alerting time. Therefore, when ownship implements the resolutions
bands are still accurate even if the conflict moved beyond the
alerting time.
Pre-Release DAIDALUS-v2.0.f:
April 3, 2020
- Fixed bug in
DaidalusRealBands
, where boolean check
if (saturated)
should have beenif (recovery)
. - Fixed resolution and preferred direction persistence logic.
February 27, 2020
-
Implemented hysteresis logic (M of N and persistence) for maneuver
guidance. Bands persistance was experimentally implemented in v2d.
The implementation is v2f is different and more consistent with
alerting persistence. -
Setting configuration parameters in a
Daidalus
object resets hysteresis. -
The method
clean()
in the classDaidalus
resets hysteresis. In older
versions of DAIDALUS, the methodclean()
was needed before adding the
ownship. This is not needed anymore. -
When SUM parameters are set to 0, the
WCV_TAUMOD_SUM
detector is
equivalent to theWCV_TAUMOD
detector. In previous versions, a 10% of
value step error was always added toWCV_TAUMOD_SUM
. However, if SUM
is not required, it's recommended that theWCV_TAUMOD
detector is
used sinceWCV_TAUMOD_SUM
will add a bit of computation overhead. -
Eliminated
CD3Table
to avoid overhead. -
In C++:
Daidalus(Detection3D,double,double)
constructor changed to
Daidalus(Detection3D*,double,double)
for efficiency reasons. This
should only affect specialized users of DAIDALUS that use a
programatic configuration. -
In C++: The following static methods are now available
CDCylinder::CD3DCylinder()
WCV_TAUMOD::DO_365_DWC_Phase_I()
The return structures that are safe for referencing with &
operator
Pre-Release DAIDALUS-v2.0.e:
February 15, 2020
- Corrected bug in C++, where reserve was used instead of resize. This
caused a segmentation fault in Visual Studio C++ - Reorganized examples in directory outside
src
- Updated
Makefile
May 19, 2019
- Fixed issue with intervals of length 0 (i.e, only one point). These
intervals are now removed from the computations. - Fixed issue with
getTimeIn
andgetTimeOut
, where in case of
no-conflict, their return value is undefined. These methods are now guarded
by conflit predicated. In case of no conflict they return infinite
values. - Fixed issue in
WCV_TAUMOD_SUM
, whereviolationSUMAt
anddetectionSUM
return inconsistent values when aircraft are at the border of the
violation area. - Better use of cache information in
DaidalusCore
. Alerting doesn't
trigger re-computation of banding core information.
Pre-Release DAIDALUS-v2.0.2d:
April 4, 2019
-
Added hysteresis and persistence times
-
Added preferred resolution persistence
-
Added bands persistence
-
Added alerting M of N
-
Changed
max_delta_resolution_xxx
topersistence_preferred_xxx
. A
preferred resolution persists while the difference between the the
preferred resolution and the best resolution is less than this parameter. -
Method
setHorizontalSpeedUncertainty
is now called
setHorizontalVelocityUncertainty
. -
Method
setVerticalVelocityZScore
is now called
setVerticalSpeedZScore
. -
Method alerting in
Daidalus
is now deprecated. It has been renamed
alertLevel
. -
setAboveBelowHorizontalSpeed
inDaidalusBands
refactored as
setAboveRelativeHorizontalSpeed
andsetBelowRelativeHorizontalSpeed
.
Similar changes forsetRelativeVerticalSpeedBands
and
setRelativeAltitudeBands
. -
Added configurable parameters for relative bands.
-
Added
UNKNOWN
bands region in cases where relative bands are
used. -
Added hysteresis to alerting, preferred direction, and
resolution. Configurable through new parameters.
Implemented ownship/intruder centric alerting logic. There is a new
boolean configuration parameter ownship_centric_alerting
. By default,
ownship_centric_alerting
is set to true.
Programmatically this parameter can be changed through the
methods:
setAlertingLogic(boolean ownship_centric)
setOwnshipCentricAlertingLogic()
setIntruderCentricAlertingLogic()
The value of the parameter is obtained by the method
isAlertingLogicOwnshipCentric()
.
When the logic is ownship centric, an alerter for all traffic
aircraft is set by using
setAlerterIndex(0,alerter_idx)
.
When the logic is intruder centric, individual alerters for each
traffic aircraft (ac_idx) is set by using
- setAlerterIndex(ac_idx, alerter_idx)
The methods minHorizontalSeparationAtRecovery
and
minVerticalSeparationAtRecovery
in RecoveryInformation
are now called
recoveryHorizontalDistance
and recoveryVerticalDistance
.
Pre-Release DAIDALUS-v2.0.2b:
October 15, 2018
daa.set_WC_SC_228_MOPS
--> daa. set_WC_DO_365
daa.set_Buffered_WC_SC_228_MOPS
--> daa. set_Buffered_WC_DO_365
Daidalus.getMultiKinematicBands()
disappeared: The Daidalus object
implements all the functionality of MultiKinematicBands()
.
The field Daidalus.parameters
is not longer available. Daidalus
itself
implements all the methods available in DaidalusParameters
. Therefore,
something like daa.parameters.getLookaheadTime()
is now written
daa.getLookahaedTime();
VERY IMPORTANT List of alerters is now 1-indexed. 0 means none, 1 means first
alerter, 2 means second alerter, etc. More precisely:
-
Alerters are 1-indexed, i.e., 1 is the index of first alerter
(e.g., Phase I), 2 is the index of second alerter (e.g., Phase 2), 3 is the index of third alerter, etc. -
By default, Ownship is set to alerter 0 (meaning none)
-
By default, Traffic aircraft is set to alerter 1
-
If Onwship's alerter is set to 0, then the logic is "intruder-centric" and each aircraft's alerter is used for each aircraft. This is the default behavior.
-
If Ownship's alerter is set to a value different from 0, then the logic is "ownship-centric" and this is the alerter that is used for every traffic aircraft.
Pre-Release DAIDALUS-v2.0.2a:
October 4, 2018
-
DADIALUS-2 supports multiple alerting structures that can be
dynamically applied per traffic aircraft. -
DAIDALUS-2 corrects several misnomers in DAIDALUS-1 (see below).
-
The class
AlertLevels
is now calledAlerter
. Ifdaa
is an object of
the classDaidalus
, a particular alerter for this aircraft
can be set using the method:
daa.setAlerter(ac_idx,arleter_idx);
or equivalently,
daa.setAlerter(ac_idx,alerter_id);
In these calls, ac_idx
is the index of the aircraft in the traffic
list. The index 0 represents the ownship and the last index is the one
in daa.lastTrafficIndex().
Alerters are collected in a list indexed
from 0 (default alerter) to daa.parameters.numberOfAlerters()-1
.
Configuration by File
To configure alerters using a file (same as in DAIDALUS-1):
daa.loadFromFile("configuration_file.txt");
DAIDALUS-2 correctly reads DAIDALUS-1 configuration
files. In this case, only 1 alerter is configured. The configuration
file for multiple alerters is done by configuring a list of alerter identifiers, e.g.,
alerters = Buffered_DWC_Phase_I,DWC_Phase_I
The order in this list is important, the index 0 corresponds to
Buffered_DWC_Phase_I
and the index 1 corresponds to DWC_Phase_I
. The
definition of these alerters is provided in the lines that follows
this line in the configuration file. Each one is similar to the
configuration of alert_levels in DAIDALUS-1.
The field conflict_level
is replaced by a field corrective_region and
it takes a conflict region, e.g., FAR
, MID
, NEAR
, instead of a
number. The reason for this change is that different alerters may
configure the corrective volume at a different alerting level.
Programatic Configuration
It works as follows.
daa.parameters.clearAlerters(); // Remove all alerters
daa.parameters.addAlerter(Alerter. DWC_Phase_I()); // This put DWC_Phase_I alerter at the index 0
Alerter alerter1 = new Alerter(...);
... configuration of alerter 1 ...
daa.parameters.addAlerter(alerter1);
Aleter alertere2 = new Alerter(...);
... configuration of alerter 2...
daa.parameters.addAlerter(alerter2);
...
Misnomers
-
In the configuration file, the prefix, postfix
trk
is nowhdir
andgs
is nowhs
. Furthermore, all of them are postfix, e.g.,
trk_step
is nowstep_hdir
. However, DAIDALUS-2 still recognizes
the field names used in DAIDALUS-1. -
In the names of methods the prefix/postfix
Track
andGroundSpeed
have been replaced byHorizontalDirection
andHorizontalSpeed
,
respectively. The reason for this change is that these methods may
represent ground- or air- based values depending on whether a wind
vector was configured. -
The method
daa.setWindField(...)
is now called
daa.setWindVelocityTo(...)
. This clarifies that the "wind field" is
just a vector and that the direction of the wind is "to". The method
daa.setWindVelocityFrom(...)
can be sued in case the wind vector is
specified in the "from" direction.
Other Changes
- The class
KinematicMultiBands
is nowDaidalusBands
- The class
KinematicBands
disappeared as its functionality is fully integrated
intoDaidalusBands
. - The class
KinematicBandsCore
is nowDaidalusBandsCore
- The class
KinematicBandsParameters
is nowDaidalusParameters
In DaidalusBands
(former KinematicMultiBands
)
track()
->HorizontalDirectionAt()
groundSpeed()
->HorizontalSpeedAt()
verticalSpeed()
->VerticalSpeedAt()
altitude()
->altitudeAt()
directionRangeOf
->indexOfHorizontalDirection
trackLength
->horizontalDirectionBandsLength
groundSpeedLength
->horizontalSpeedBandsLength
verticalSpeedLength
->verticalSpeedBandsLength
altitudeLength
->altitudeBandsLength
timeIntervalOfViolation()
->timeIntervalOfRegionViolation()
horizontalSpeed
->horizontalSpeedIntervalAt
horizontalSpeedRegion
->horizontalSpeedRegionAt
horizontalSpeedRangeOf
->indexOfHorizontalSpeed
peripheralDirectionAircraft(level): list<AircraftStates>
->
peripheralHorizontalDirectionAircraft(region):list<string>
peripheralHorizontalSpeedAircraft(level): list<AircraftStates>
->
peripheralHorizontalSpeedBandsAircraft(region):list<string>
peripheralVerticalSpeedAircraft(level): list<AircraftStates>
->
peripheralVerticalSpeedBandsAircraft(region):list<string>
peripheralAltitudeAircraft(level): list<AircraftStates>
->
peripheralAltitudeBandsAircraft(region):list<string>
In Daidalus
:
getAircraftState
->getAircraftStateAt
timeToViolation
->timeToCorrectiveVolume
Gotchas:
- Spread bands will now compute
UNKNOWN
bands, for ranges outside
min/max values. - Check usage of method
getUnits
fromDaidalusParameters
as field
names have changed, e.g.,trk_step
is nowstep_hs
.