ICAROUS
|
#include <CDSIPolygon.h>
Public Member Functions | |
CDSIPolygon (DetectionPolygon *d) | |
int | size () const |
bool | conflict () const |
double | getTimeIn (int i) const |
double | getTimeOut (int i) const |
double | getTimeClosest (int i) const |
double | getDistanceClosest (int i) const |
bool | violation (const Position &so, const Velocity &vo, const PolyPath &intent, double tm) const |
bool | detection (const Position &so, const Velocity &vo, double t0, double state_horizon, PolyPath &intent, double B, double T) |
bool | detectionXYZ (Vect3 so, const Velocity &vo, double t0, double state_horizon, PolyPath &intent, double B, double T) |
bool | detectionLL (const LatLonAlt &so, const Velocity &vo, double t0, double state_horizon, PolyPath &intent, double B, double T) |
bool | conflictOnlyXYZ (const Vect3 &so, const Velocity &vo, double t0, double state_horizon, PolyPath &intent, double B, double T) const |
bool | conflictOnlyLL (const LatLonAlt &so, const Velocity &vo, double t0, double state_horizon, PolyPath &intent, double B, double T) const |
std::string | toString () const |
bool | hasError () const |
bool | hasMessage () const |
std::string | getMessage () |
std::string | getMessageNoClear () const |
void | setCorePolygonDetectionPtr (const DetectionPolygon *d) |
void | setCorePolygonDetectionRef (const DetectionPolygon &d) |
DetectionPolygon * | getCorePolygonDetectionPtr () const |
DetectionPolygon & | getCorePolygonDetectionRef () const |
Static Public Member Functions | |
static bool | cdsicore (const Position &so, const Velocity &vo, double t0, double state_horizon, PolyPath &intent, double B, double T) |
Private Member Functions | |
void | captureOutput (double t_base, int conf, DetectionPolygon *cd) |
void | merge () |
Private Attributes | |
std::vector< double > | tin |
std::vector< double > | tout |
std::vector< double > | tca |
std::vector< double > | dist_tca |
DetectionPolygon * | cdss |
ErrorLog | error |
Static Private Attributes | |
static CDSIPolygon | def = CDSIPolygon(new CDPolyIter()) |
This class implements the core algorithms for conflict detection between an ownship (modeled with a state vector) and a traffic aircraft trajectory (modeled with a intent). This class assumes all inputs are in internal units. As such, this class is most appropriate to be part of a larger system, not as a stand-alone conflict detection algorithm. For that functionality, see the class CDSI.
This class can be used two ways: through an object or through a static method. The static method approach has the advantage that an object does not need to be created. The object approach has the advantage that more information is available. Specifically, the start and end times for every conflict are available in the object approach.
In addition, for each of these types of use, the aircraft can be specified in two different coordinate systems: a Euclidean space and a latitude and longitude reference frame.
|
explicit |
Create a new conflict detection (state information for the ownship and intent information for the traffic) object with the given parameters for the minimum horizontal distance and the minimum vertical information.
|
static |
Returns if there is a conflict between two aircraft: the state aircraft and the intent aircraft. The state aircraft is assumed to move linearly from it position. The intent aircraft is assumed to move according to the given flight plan.
so | the Position of the state aircraft |
vo | the velocity of the state aircraft |
t0 | the time of the state aircraft when located at so with respect to the traffic intent. This can be 0.0 to represent "now" |
state_horizon | the largest time where the state aircraft's position can be predicted. |
intent | the flight plan of the intent aircraft |
D | the minimum horizontal separation distance |
H | the minimum vertical separation distance |
B | the time to start looking for conflicts relative to t0. This can be 0.0. |
T | the time to end looking for conflicts relative to t0 |
bool larcfm::CDSIPolygon::conflict | ( | ) | const |
Returns if there were any conflicts
bool larcfm::CDSIPolygon::conflictOnlyLL | ( | const LatLonAlt & | so, |
const Velocity & | vo, | ||
double | t0, | ||
double | state_horizon, | ||
PolyPath & | intent, | ||
double | B, | ||
double | T | ||
) | const |
EXPERIMENTAL
so | |
vo | |
t0 | |
state_horizon | |
intent | |
B | |
T |
bool larcfm::CDSIPolygon::detection | ( | const Position & | so, |
const Velocity & | vo, | ||
double | t0, | ||
double | state_horizon, | ||
PolyPath & | intent, | ||
double | B, | ||
double | T | ||
) |
Returns if there is a conflict between two aircraft: the state aircraft and the intent aircraft. The state aircraft is assumed to move linearly from it position. The intent aircraft is assumed to move according to the given flight plan.
so | the position of the state aircraft |
vo | velocity of the state aircraft |
t0 | the time of the state aircraft when located at so with respect to the traffic intent. This can be 0.0 to represent "now" |
state_horizon | the maximum amount of time after t0 that the position of the state aircraft's position can be predicted |
intent | the flight plan of the intent aircraft |
B | the time to start looking for conflicts relative to t0. This can be 0.0. |
T | the time to end looking for conflicts relative to t0 |
bool larcfm::CDSIPolygon::detectionLL | ( | const LatLonAlt & | so, |
const Velocity & | vo, | ||
double | t0, | ||
double | state_horizon, | ||
PolyPath & | intent, | ||
double | B, | ||
double | T | ||
) |
Returns if there is a conflict between two aircraft: the state aircraft and the intent aircraft. The state aircraft is assumed to move linearly from it position. The intent aircraft is assumed to move according to the given flight plan. Both aircraft are assumed to be represented in a latitude/longitude reference frame.
so | the latitude/longitude/altitude of the state aircraft |
vo | velocity of the state aircraft |
t0 | the time of the state aircraft when located at (lat, lon, alt). This can be 0.0 to represent "now" |
state_horizon | the maximum amount of time after t0 that the position of the state aircraft's position can be predicted |
intent | the flight plan of the intent aircraft |
B | the time to start looking for conflicts relative to t0. This can be 0.0. |
T | the time to end looking for conflicts relative to t0 |
bool larcfm::CDSIPolygon::detectionXYZ | ( | Vect3 | so, |
const Velocity & | vo, | ||
double | t0, | ||
double | state_horizon, | ||
PolyPath & | intent, | ||
double | B, | ||
double | T | ||
) |
Returns if there is a conflict between two aircraft: the state aircraft and the intent aircraft. The state aircraft is assumed to move linearly from it position. The intent aircraft is assumed to move according to the given flight plan. Both aircraft are assumed to be represented in a Euclidean reference frame at the time t0.
so | the position of the state aircraft |
vo | velocity of the state aircraft |
t0 | the time of the state aircraft when located at (so.x,so.y,so.z). This can be 0.0 to represent "now" |
state_horizon | the maximum amount of time after t0 that the position of the state aircraft's position can be predicted |
intent | the flight plan of the intent aircraft |
B | the time to start looking for conflicts relative to t0. This can be 0.0. |
T | the time to end looking for conflicts relative to t0 |
|
virtual |
Return a pointer to this object's Detection3D instance.
Implements larcfm::DetectionPolygonAcceptor.
|
virtual |
Return a reference to this object's Detection3D instance.
Implements larcfm::DetectionPolygonAcceptor.
double larcfm::CDSIPolygon::getDistanceClosest | ( | int | i | ) | const |
Returns the cylindrical distance at the time of closest approach.
i | the i-th conflict, must be between 0..size()-1 |
|
virtual |
Return a string representation of any errors or warnings. Calling this method will clear any messages and reset both the error and warning status to none.
Implements larcfm::ErrorReporter.
|
virtual |
Return a string representation of any errors or warnings. Calling this method will not clear the error or warning status (i.e., hasError() will return the same value before and after this call.)
Implements larcfm::ErrorReporter.
double larcfm::CDSIPolygon::getTimeClosest | ( | int | i | ) | const |
Returns an estimate of the time of closest approach. This value is in absolute time (not relative from a waypoint). This point approximates the point where the two aircraft are closest. The definition of closest is not simple. Specifically, space in the vertical dimension counts more than space in the horizontal dimension: encroaching in the protected zone 100 vertically is much more serious than encroaching 100 ft. horizontally.
i | the i-th conflict, must be between 0..size()-1 |
double larcfm::CDSIPolygon::getTimeIn | ( | int | i | ) | const |
Returns the start time of the conflict. This value is in absolute time. If there was not a conflict, then this value is meaningless.
i | the i-th conflict, must be between 0..size()-1 |
double larcfm::CDSIPolygon::getTimeOut | ( | int | i | ) | const |
Returns the end time of the conflict. This value is in absolute time. If there was not a conflict, then this value is meaningless.
i | the i-th conflict, must be between 0..size()-1 |
|
virtual |
|
virtual |
Does this object have an error or a warning?
Implements larcfm::ErrorReporter.
|
virtual |
Apply a deep copy of the Detection3D object pointed to to this object at the lowest level. The user is responsible for cleaning up the original instance.
Implements larcfm::DetectionPolygonAcceptor.
|
virtual |
Apply a deep copy of the referenced Detection3D object to this object at the lowest level. The user is responsible for cleaning up the original instance.
Implements larcfm::DetectionPolygonAcceptor.
int larcfm::CDSIPolygon::size | ( | ) | const |
Returns the number of conflicts
bool larcfm::CDSIPolygon::violation | ( | const Position & | so, |
const Velocity & | vo, | ||
const PolyPath & | intent, | ||
double | tm | ||
) | const |
Return true if the given position and velocity are in violation with the intent aircraft at time tm. If tm is outisde the intent information, return false;
so | |
vo | |
intent | |
tm |
Return true if the given position and velocity are in violation with the intent aircraft at time tm. If tm is outisde the intent information, return false;
so | |
vo | |
intent | |
tm |
|
staticprivate |
This class implements the core algorithms for conflict detection between an ownship (modeled with a state vector) and a traffic aircraft trajectory (modeled with a intent). This class assumes all inputs are in internal units. As such, this class is most appropriate to be part of a larger system, not as a stand-alone conflict detection algorithm. For that functionality, see the class CDSI.
This class can be used two ways: through an object or through a static method. The static method approach has the advantage that an object does not need to be created. The object approach has the advantage that more information is available. Specifically, the start and end times for every conflict are available in the object approach.
In addition, for each of these types of use, the aircraft can be specified in two different coordinate systems: a Euclidean space and a latitude and longitude reference frame.