Releases: nasa/daidalus
DAIDALUSv2.0.3a
September-8-2023
- Change to
IntegerBands
to account for the time between discrete points in the kinematic maneuvers. Should address some 'thread the needle'
scnerios. - Renamed
RecoveryInformation::timeToToRecovery
toRecoveryInformation::timeToRecovery
.
DAIDALUSv2.0.3
- Added parameter
bands_add_time_to_maneuver
. By default this parameter is set to false. When set to true, the time to maneuver is considered against alerting time when computing peripheral bands. The latter was the behavior in v.2.0.1 and v1. - Fixed numerical instability bug in computing the
circular_
in directional bands.
Release DAIDALUSv2.0.2c
June 27, 2022
- Contact update
- Fixed remove_traffic to allow removing the first intruder.
- Change in commented documentation in Daidalus.cpp
- Hysteresis bugfix
- Updated Java to be compatible with Java 8
- Updated README -- Java compatibility
- Latest DAIDALUS-v2.0.2
DAIDALUSv2.0.2
Release DAIDALUS-v2.0.2
The main difference with v2.0.1 is that alerting time only counts after capturing a value in the calculation of maneuver guidance logic.
-
May 31, 2021
- IMPORTANT Fixed error where
dta_latitude
anddta_longitude
were exchanged when provided in Euclidean coordinates. Now, they corresponds to X (dta_longitude
) and Y (dta_latitude
), as expected. - Updated to FormalATM-v2.7.5
- Updated copyright to 2021
- Updated
doc/html
- Deprecated
Daidalus.maxAlertLevel()
, useDaidalus.maxNumberOfAlertLevels()
instead - Added
Daidalus.alertLevelAllTraffic()
- Added ownship and traffic selection to
DaidalusFileWaker
class
- IMPORTANT Fixed error where
-
January 23, 2021
- Added DO-365A configurations for completeness.
-
December 11, 2020
- Added DO-365B configurations
- Fixed computation of TCPA hazard volume when
TTHR*||v|| < DTHR
and
other volumes when relative velocity is zero (these fixes are only for display)
-
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
.
- Added documentation (automatically generated from code), updated
-
September 24, 2020
- Alerting time only counts after capture.
- Added raw resolutions (without persistence)
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 inde...
DAIDALUSv1.0.2
August 20, 2020
- Fix memory leak in non _MSC_VER compiled branch (
Util.cpp
). Thanks to B. Shimanuki
April 21, 2019
- Fixed bug in the method
toIntervalSet
of the classKinematicRealBands
, where a range of length 0, i.e., a point, is sometimes added to the list of bands due to numerical round-off errors. This zero-length range may yield a recovery bands that is slightly larger than necessary. - Fixed bug in the method find_resolution of the class
KinematicRealBands
, where a track resolution larger than 180 degrees is sometimes returned. The fixed method will return either negative infinity (left) or postive infinity (right) when no resolution exists within 180 of the current track.
DAIDALUSv1.0.1
October 11, 2017
- Fixed bug in line 635 and 637 of
Units.cpp
. This bug only affects
MSVC++ (Thanks to Randal Guendel for reporting this issue).
March 18, 2017
-
Added PVS specifications and proofs of core algorithms.
-
Modified algorithm that projects aircraft trajectories. The
core detection, alerting, and bands algorithms use an Euclidean
three-dimensional coordinate system, i.e., a local East, North, Up
(ENU) Cartesian coordinate system. This coordinate system is based on
the orthogonal projection of the ownship and traffic geodesic
coordinates onto a plane tangent to the projected ownship position on
the surface of the earth. In previous releases, kinematic bands were
generated by projecting in time aircraft Geodesic states and then
projecting the resulting states into the Euclidean coordinate system.
In this release, Geodesic coordinates are projected into the Euclidean
coordinate system first, and then projected in time. This change
significantly improves the performance of the bands algorithm.
CAVEAT: Projected states may not be precise enough for a lookahead
time larger than 5 minutes. -
Modified behavior of detection, alerting, and bands algorithms with
respect to lookahead time. In the previous release, lookahead time was
expected to be larger than early alerting time, which was expected to
be larger than alerting time, for all alerting levels. In this release,
the time horizon for the core algorithms is between current time and
current time+lookahead time. In other words, no violation, alert, or band is
computed after lookahead time (relative to current time). -
Modified algorithm that prints configuration parameters. In this
release, units from a configuration file are remembered and displayed
back when the configuration parameters are printed as a string or
saved into a file. Furthermore, configuration parameters are printed
in a better organized format. -
Fixed a bug that caused the region of a conflict band at 180 degrees
to be incorrectly computed asNONE
. The bug was due to numerical error
where 180 degrees and -180 degrees were not considered to be equal.