etsi_its_messages v3.4.0
Loading...
Searching...
No Matches
denm_getters.h File Reference

Getter functions for the ETSI ITS DENM (EN). More...

Go to the source code of this file.

Functions

uint32_t etsi_its_denm_msgs::access::getStationID (const ItsPduHeader &header)
 Get the StationID of ItsPduHeader.
double etsi_its_denm_msgs::access::getLatitude (const Latitude &latitude)
 Get the Latitude value.
double etsi_its_denm_msgs::access::getLongitude (const Longitude &longitude)
 Get the Longitude value.
double etsi_its_denm_msgs::access::getAltitude (const Altitude &altitude)
 Get the Altitude value.
double etsi_its_denm_msgs::access::getSpeed (const Speed &speed)
 Get the vehicle speed.
double etsi_its_denm_msgs::access::getSpeedConfidence (const Speed &speed)
 Get the Speed Confidence.
template<typename AccelerationMagnitude>
double etsi_its_denm_msgs::access::getAccelerationMagnitude (const AccelerationMagnitude &acceleration_magnitude)
 Get the AccelerationMagnitude value.
template<typename AccelerationMagnitude>
double etsi_its_denm_msgs::access::getAccelerationMagnitudeConfidence (const AccelerationMagnitude &acceleration_magnitude)
 Get the AccelerationMagnitude Confidence.
template<typename T>
gm::PointStamped etsi_its_denm_msgs::access::getUTMPosition (const T &reference_position, int &zone, bool &northp)
 Get the UTM Position defined by the given ReferencePosition.
template<typename Heading>
double etsi_its_denm_msgs::access::getHeadingCDD (const Heading &heading)
 Get the Heading value.
template<typename Heading>
double etsi_its_denm_msgs::access::getHeadingConfidenceCDD (const Heading &heading)
 Get the Heading value.
template<typename YawRate>
double etsi_its_denm_msgs::access::getYawRateCDD (const YawRate &yaw_rate)
 Get the Yaw Rate value.
template<typename YawRate, typename YawRateConfidence = decltype(YawRate::yaw_rate_confidence)>
double etsi_its_denm_msgs::access::getYawRateConfidenceCDD (const YawRate &yaw_rate)
 Get the Yaw Rate Confidence.
template<typename SemiAxisLength>
double etsi_its_denm_msgs::access::getSemiAxis (const SemiAxisLength &semi_axis_length)
 Get the Semi Axis object.
template<typename PosConfidenceEllipse>
std::tuple< double, double, double > etsi_its_denm_msgs::access::getPosConfidenceEllipse (const PosConfidenceEllipse &position_confidence_ellipse)
 Extract major axis length, minor axis length and orientation from the given position confidence ellipse.
std::array< double, 4 > etsi_its_denm_msgs::access::CovMatrixFromConfidenceEllipse (double semi_major, double semi_minor, double major_orientation, const double object_heading)
 Convert the confidence ellipse to a covariance matrix.
std::array< double, 4 > etsi_its_denm_msgs::access::WGSCovMatrixFromConfidenceEllipse (double semi_major, double semi_minor, double major_orientation)
 Convert the confidence ellipse to a covariance matrix.
template<typename PosConfidenceEllipse>
std::array< double, 4 > etsi_its_denm_msgs::access::getPosConfidenceEllipse (const PosConfidenceEllipse &position_confidence_ellipse, const double object_heading)
 Get the covariance matrix of the position confidence ellipse.
template<typename PosConfidenceEllipse>
std::array< double, 4 > etsi_its_denm_msgs::access::getWGSPosConfidenceEllipse (const PosConfidenceEllipse &position_confidence_ellipse)
 Get the covariance matrix of the position confidence ellipse.
std::vector< bool > etsi_its_denm_msgs::access::getBitString (const std::vector< uint8_t > &buffer, const int bits_unused)
 Get a Bit String in form of bool vector.
uint32_t etsi_its_denm_msgs::access::getStationID (const DENM &denm)
 Get the Station ID object.
TimestampIts etsi_its_denm_msgs::access::getReferenceTime (const DENM &denm)
 Get the Reference Time object.
uint64_t etsi_its_denm_msgs::access::getReferenceTimeValue (const DENM &denm)
 Get the ReferenceTime-Value.
uint8_t etsi_its_denm_msgs::access::getStationType (const DENM &denm)
 Get the stationType object.
double etsi_its_denm_msgs::access::getLatitude (const DENM &denm)
 Get the Latitude value of DENM.
double etsi_its_denm_msgs::access::getLongitude (const DENM &denm)
 Get the Longitude value of DENM.
double etsi_its_denm_msgs::access::getAltitude (const DENM &denm)
 Get the Altitude value of DENM.
bool etsi_its_denm_msgs::access::getIsHeadingPresent (const DENM &denm)
 Get the IsHeadingPresent object.
double etsi_its_denm_msgs::access::getSpeed (const DENM &denm)
 Get the vehicle speed.
bool etsi_its_denm_msgs::access::getIsSpeedPresent (const DENM &denm)
 Get the IsSpeedPresent object.
double etsi_its_denm_msgs::access::getSpeedConfidence (const DENM &denm)
 Get the Speed Confidence.
gm::PointStamped etsi_its_denm_msgs::access::getUTMPosition (const DENM &denm, int &zone, bool &northp)
 Get the UTM Position defined within the ManagementContainer of the DENM.
gm::PointStamped etsi_its_denm_msgs::access::getUTMPosition (const DENM &denm)
 Get the UTM Position defined within the ManagementContainer of the DENM.
std::vector< bool > etsi_its_denm_msgs::access::getDrivingLaneStatus (const DrivingLaneStatus &driving_lane_status)
 Get the Driving Lane Status in form of bool vector.
std::vector< bool > etsi_its_denm_msgs::access::getLightBarSirenInUse (const LightBarSirenInUse &light_bar_siren_in_use)
 Get the Lightbar Siren In Use in form of bool vector.
double etsi_its_denm_msgs::access::getHeading (const DENM &denm)
 Get the Heading object.
double etsi_its_denm_msgs::access::getHeadingConfidence (const DENM &denm)
 Get the Heading confidence.
uint8_t etsi_its_denm_msgs::access::getCauseCode (const DENM &denm)
 Get the Cause Code object.
uint8_t etsi_its_denm_msgs::access::getSubCauseCode (const DENM &denm)
 Get the Sub Cause Code object.
std::string etsi_its_denm_msgs::access::getCauseCodeType (const DENM &denm)
 Get the Cause Code Type object.
std::string etsi_its_denm_msgs::access::getSubCauseCodeType (const DENM &denm)
 Get the Sub Cause Code Type object.

Detailed Description

Getter functions for the ETSI ITS DENM (EN).

Definition in file denm_getters.h.

Function Documentation

◆ CovMatrixFromConfidenceEllipse()

std::array< double, 4 > etsi_its_denm_msgs::access::CovMatrixFromConfidenceEllipse ( double semi_major,
double semi_minor,
double major_orientation,
const double object_heading )
inline

Convert the confidence ellipse to a covariance matrix.

Note that the major_orientation is given in degrees, while the object_heading is given in radians!

Parameters
semi_majorSemi major axis length in meters
semi_minorSemi minor axis length in meters
major_orientationOrientation of the major axis in degrees, relative to WGS84
object_headingobject heading in radians, relative to WGS84
Returns
std::array<double, 4> The covariance matrix in vehicle coordinates (x = longitudinal, y = lateral)

Definition at line 221 of file denm_getters.h.

◆ getAccelerationMagnitude()

template<typename AccelerationMagnitude>
double etsi_its_denm_msgs::access::getAccelerationMagnitude ( const AccelerationMagnitude & acceleration_magnitude)
inline

Get the AccelerationMagnitude value.

Parameters
acceleration_magnitudeto get the AccelerationMagnitude from
Returns
double acceleration magnitude in m/s^2 as decimal number

Definition at line 80 of file denm_getters.h.

◆ getAccelerationMagnitudeConfidence()

template<typename AccelerationMagnitude>
double etsi_its_denm_msgs::access::getAccelerationMagnitudeConfidence ( const AccelerationMagnitude & acceleration_magnitude)
inline

Get the AccelerationMagnitude Confidence.

Parameters
acceleration_magnitudeto get the AccelerationMagnitudeConfidence from
Returns
double acceleration magnitude standard deviation in m/s^2 as decimal number

Definition at line 91 of file denm_getters.h.

◆ getAltitude() [1/2]

double etsi_its_denm_msgs::access::getAltitude ( const Altitude & altitude)
inline

Get the Altitude value.

Parameters
altitudeto get the Altitude value from
Returns
Altitude value (above the reference ellipsoid surface) in meter as decimal number (0 if unavailable)

Definition at line 48 of file denm_getters.h.

◆ getAltitude() [2/2]

double etsi_its_denm_msgs::access::getAltitude ( const DENM & denm)
inline

Get the Altitude value of DENM.

Parameters
denmDENM to get the Altitude value from
Returns
Altitude value (above the reference ellipsoid surface) in meter as decimal number

Definition at line 68 of file denm_getters.h.

◆ getBitString()

std::vector< bool > etsi_its_denm_msgs::access::getBitString ( const std::vector< uint8_t > & buffer,
const int bits_unused )
inline

Get a Bit String in form of bool vector.

Parameters
bufferas uint8_t vector
bits_unusednumber of bits to ignore at the end of the bit string
Returns
std::vector<bool>

Definition at line 20 of file denm_getters.h.

41inline double getHeadingConfidence(const DENM& denm) {
42 if (denm.denm.location_is_present) {
43 if (denm.denm.location.event_position_heading_is_present) {
44 return getHeadingConfidenceCDD(denm.denm.location.event_position_heading);
45 } else {
double getHeadingConfidence(const DENM &denm)
Get the Heading confidence.
double getHeadingCDD(const Heading &heading)
Get the Heading value.
double getHeadingConfidenceCDD(const Heading &heading)
Get the Heading value.

◆ getCauseCode()

uint8_t etsi_its_denm_msgs::access::getCauseCode ( const DENM & denm)
inline

Get the Cause Code object.

Parameters
denmDENM to get the causeCode value from
Returns
causeCode value

Definition at line 59 of file denm_getters.h.

59{ return denm.denm.situation.event_type.cause_code.value; }

◆ getCauseCodeType()

std::string etsi_its_denm_msgs::access::getCauseCodeType ( const DENM & denm)
inline

Get the Cause Code Type object.

https://www.etsi.org/deliver/etsi_en/302600_302699/30263703/01.02.01_30/en_30263703v010201v.pdf

Parameters
denmDENM to get the causeCodeType value from
Returns
causeCodeType value

Definition at line 77 of file denm_getters.h.

77 {
78 if (denm.denm.situation_is_present) {
79 int cause_code = getCauseCode(denm);
80 std::string cause_code_type = "undefined";
81
82 if (cause_code == CauseCodeType().TRAFFIC_CONDITION)
83 cause_code_type = "traffic condition";
84 else if (cause_code == CauseCodeType().ACCIDENT)
85 cause_code_type = "accident";
86 else if (cause_code == CauseCodeType().ROADWORKS)
87 cause_code_type = "roadworks";
88 else if (cause_code == CauseCodeType().IMPASSABILITY)
89 cause_code_type = "impassibility";
90 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION)
91 cause_code_type = "adverse weather condition - adhesion";
92 else if (cause_code == CauseCodeType().AQUAPLANNNING)
93 cause_code_type = "aquaplanning";
94 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION)
95 cause_code_type = "hazardous location - surface condition";
96 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD)
97 cause_code_type = "hazardous location - obstacle on the road";
98 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD)
99 cause_code_type = "hazardous location - animal on the road";
100 else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD)
101 cause_code_type = "human presence on the road";
102 else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING)
103 cause_code_type = "wrong way driving";
104 else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS)
105 cause_code_type = "rescue and recovery in progress";
106 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION)
107 cause_code_type = "adverse weather condition - extreme weather condition";
108 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY)
109 cause_code_type = "adverse weather condition - visibility";
110 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION)
111 cause_code_type = "adverse weather condition - precipitation";
112 else if (cause_code == CauseCodeType().SLOW_VEHICLE)
113 cause_code_type = "slow vehicle";
114 else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE)
115 cause_code_type = "dangerous end of queue";
116 else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN)
117 cause_code_type = "vehicle breakdown";
118 else if (cause_code == CauseCodeType().POST_CRASH)
119 cause_code_type = "post crash";
120 else if (cause_code == CauseCodeType().HUMAN_PROBLEM)
121 cause_code_type = "human problem";
122 else if (cause_code == CauseCodeType().STATIONARY_VEHICLE)
123 cause_code_type = "stationary vehicle";
124 else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING)
125 cause_code_type = "emergency vehicle approaching";
126 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE)
127 cause_code_type = "hazardous location - dangerous curve";
128 else if (cause_code == CauseCodeType().COLLISION_RISK)
129 cause_code_type = "collision risk";
130 else if (cause_code == CauseCodeType().SIGNAL_VIOLATION)
131 cause_code_type = "signal violation";
132 else if (cause_code == CauseCodeType().DANGEROUS_SITUATION)
133 cause_code_type = "dangerous situation";
134
135 return cause_code_type;
136 } else {
137 throw std::invalid_argument("SituationContainer is not present!");
138 }
139}
uint8_t getCauseCode(const DENM &denm)
Get the Cause Code object.

◆ getDrivingLaneStatus()

std::vector< bool > etsi_its_denm_msgs::access::getDrivingLaneStatus ( const DrivingLaneStatus & driving_lane_status)
inline

Get the Driving Lane Status in form of bool vector.

Parameters
driving_lane_status
Returns
std::vector<bool>

Definition at line 157 of file denm_getters.h.

◆ getHeading()

double etsi_its_denm_msgs::access::getHeading ( const DENM & denm)
inline

Get the Heading object.

Parameters
denmDENM to get the Heading-Value from
Returns
heading value in degree as decimal number

Definition at line 23 of file denm_getters.h.

23 {
24 if (denm.denm.location_is_present) {
25 if (denm.denm.location.event_position_heading_is_present) {
26 return getHeadingCDD(denm.denm.location.event_position_heading);
27 } else {
28 throw std::invalid_argument("Heading is not present!");
29 }
30 } else {
31 throw std::invalid_argument("LocationContainer is not present!");
32 }
33}

◆ getHeadingCDD()

template<typename Heading>
double etsi_its_denm_msgs::access::getHeadingCDD ( const Heading & heading)
inline

Get the Heading value.

0.0° equals WGS84 North, 90.0° equals WGS84 East, 180.0° equals WGS84 South and 270.0° equals WGS84 West

Parameters
headingto get the Heading value from
Returns
Heading value in degree as decimal number

Definition at line 136 of file denm_getters.h.

136{

◆ getHeadingConfidence()

double etsi_its_denm_msgs::access::getHeadingConfidence ( const DENM & denm)
inline

Get the Heading confidence.

Parameters
denmDENM to get the Heading-Value from
Returns
standard deviation of heading in degrees as decimal number

Definition at line 41 of file denm_getters.h.

41 {
42 if (denm.denm.location_is_present) {
43 if (denm.denm.location.event_position_heading_is_present) {
44 return getHeadingConfidenceCDD(denm.denm.location.event_position_heading);
45 } else {
46 throw std::invalid_argument("Heading is not present!");
47 }
48 } else {
49 throw std::invalid_argument("LocationContainer is not present!");
50 }
51}

◆ getHeadingConfidenceCDD()

template<typename Heading>
double etsi_its_denm_msgs::access::getHeadingConfidenceCDD ( const Heading & heading)
inline

Get the Heading value.

0.0° equals WGS84 North, 90.0° equals WGS84 East, 180.0° equals WGS84 South and 270.0° equals WGS84 West

Parameters
headingto get the Heading standard deviation from
Returns
Heading standard deviation in degree as decimal number

Definition at line 147 of file denm_getters.h.

◆ getIsHeadingPresent()

bool etsi_its_denm_msgs::access::getIsHeadingPresent ( const DENM & denm)
inline

Get the IsHeadingPresent object.

Parameters
denmDENM to get the IsHeadingPresent-Value from
Returns
IsHeadingPresent-Value (true or false)

Definition at line 76 of file denm_getters.h.

77 {
78 if (denm.denm.situation_is_present) {
79 int cause_code = getCauseCode(denm);
80 std::string cause_code_type = "undefined";
81
82 if (cause_code == CauseCodeType().TRAFFIC_CONDITION)

◆ getIsSpeedPresent()

bool etsi_its_denm_msgs::access::getIsSpeedPresent ( const DENM & denm)
inline

Get the IsSpeedPresent object.

Parameters
denmDENM to get the IsSpeedPresent-Value from
Returns
IsSpeedPresent-Value (true or false)

Definition at line 108 of file denm_getters.h.

◆ getLatitude() [1/2]

double etsi_its_denm_msgs::access::getLatitude ( const DENM & denm)
inline

Get the Latitude value of DENM.

Parameters
denmDENM to get the Latitude value from
Returns
Latitude value in degree as decimal number

Definition at line 52 of file denm_getters.h.

◆ getLatitude() [2/2]

double etsi_its_denm_msgs::access::getLatitude ( const Latitude & latitude)
inline

Get the Latitude value.

Parameters
latitudeto get the Latitude value from
Returns
Latitude value in degree as decimal number

Definition at line 32 of file denm_getters.h.

◆ getLightBarSirenInUse()

std::vector< bool > etsi_its_denm_msgs::access::getLightBarSirenInUse ( const LightBarSirenInUse & light_bar_siren_in_use)
inline

Get the Lightbar Siren In Use in form of bool vector.

Parameters
light_bar_siren_in_use
Returns
std::vector<bool>

Definition at line 167 of file denm_getters.h.

◆ getLongitude() [1/2]

double etsi_its_denm_msgs::access::getLongitude ( const DENM & denm)
inline

Get the Longitude value of DENM.

Parameters
denmDENM to get the Longitude value from
Returns
Longitude value in degree as decimal number

Definition at line 60 of file denm_getters.h.

◆ getLongitude() [2/2]

double etsi_its_denm_msgs::access::getLongitude ( const Longitude & longitude)
inline

Get the Longitude value.

Parameters
longitudeto get the Longitude value from
Returns
Longitude value in degree as decimal number

Definition at line 40 of file denm_getters.h.

◆ getPosConfidenceEllipse() [1/2]

template<typename PosConfidenceEllipse>
std::tuple< double, double, double > etsi_its_denm_msgs::access::getPosConfidenceEllipse ( const PosConfidenceEllipse & position_confidence_ellipse)
inline

Extract major axis length, minor axis length and orientation from the given position confidence ellipse.

Parameters
position_confidence_ellipseThe position confidence ellipse to extract the values from
Returns
std::tuple<double, double, double> major axis length in meters, minor axis length in meters, and orientation in degrees

Definition at line 202 of file denm_getters.h.

205 {
206 if (sub_cause_code == 0)
207 sub_cause_code_type = "unavailable";
208 else if (sub_cause_code >= 1 && sub_cause_code <= 7)

◆ getPosConfidenceEllipse() [2/2]

template<typename PosConfidenceEllipse>
std::array< double, 4 > etsi_its_denm_msgs::access::getPosConfidenceEllipse ( const PosConfidenceEllipse & position_confidence_ellipse,
const double object_heading )
inline

Get the covariance matrix of the position confidence ellipse.

Parameters
position_confidence_ellipseThe position confidence ellipse to get the covariance matrix from
object_headingThe object heading in radians
Returns
std::array<double, 4> The covariance matrix of the position confidence ellipse in vehicle coordinates (x = longitudinal, y = lateral)

Definition at line 263 of file denm_getters.h.

◆ getReferenceTime()

TimestampIts etsi_its_denm_msgs::access::getReferenceTime ( const DENM & denm)
inline

Get the Reference Time object.

Parameters
denmDENM to get the ReferenceTime-Value from
Returns
TimestampIts

Definition at line 28 of file denm_getters.h.

◆ getReferenceTimeValue()

uint64_t etsi_its_denm_msgs::access::getReferenceTimeValue ( const DENM & denm)
inline

Get the ReferenceTime-Value.

Parameters
denmDENM to get the ReferenceTime-Value from
Returns
uint64_t the ReferenceTime-Value

Definition at line 36 of file denm_getters.h.

◆ getSemiAxis()

template<typename SemiAxisLength>
double etsi_its_denm_msgs::access::getSemiAxis ( const SemiAxisLength & semi_axis_length)
inline

Get the Semi Axis object.

Parameters
semi_axis_lengthThe SemiAxisLength object to get the semi axis from
Returns
double the semi axis length in meters

Definition at line 191 of file denm_getters.h.

193 {

◆ getSpeed() [1/2]

double etsi_its_denm_msgs::access::getSpeed ( const DENM & denm)
inline

Get the vehicle speed.

Parameters
denmDENM to get the speed value from
Returns
speed value in m/s as decimal number

Definition at line 90 of file denm_getters.h.

◆ getSpeed() [2/2]

double etsi_its_denm_msgs::access::getSpeed ( const Speed & speed)
inline

Get the vehicle speed.

Parameters
speedto get the speed value from
Returns
speed value in m/s as decimal number

Definition at line 61 of file denm_getters.h.

◆ getSpeedConfidence() [1/2]

double etsi_its_denm_msgs::access::getSpeedConfidence ( const DENM & denm)
inline

Get the Speed Confidence.

Parameters
denmDENM to get the Speed Confidence from
Returns
double standard deviation of the speed in m/s as decimal number

Definition at line 122 of file denm_getters.h.

◆ getSpeedConfidence() [2/2]

double etsi_its_denm_msgs::access::getSpeedConfidence ( const Speed & speed)
inline

Get the Speed Confidence.

Parameters
speedto get the SpeedConfidence from
Returns
double speed standard deviation in m/s as decimal number

Definition at line 69 of file denm_getters.h.

◆ getStationID() [1/2]

uint32_t etsi_its_denm_msgs::access::getStationID ( const DENM & denm)
inline

Get the Station ID object.

Parameters
denmDENM to get the StationID value from
Returns
stationID value

Definition at line 20 of file denm_getters.h.

◆ getStationID() [2/2]

uint32_t etsi_its_denm_msgs::access::getStationID ( const ItsPduHeader & header)
inline

Get the StationID of ItsPduHeader.

Parameters
headerItsPduHeader to get the StationID value from
Returns
stationID value

Definition at line 24 of file denm_getters.h.

24{

◆ getStationType()

uint8_t etsi_its_denm_msgs::access::getStationType ( const DENM & denm)
inline

Get the stationType object.

Parameters
denmDENM to get the stationType value from
Returns
stationType value

Definition at line 44 of file denm_getters.h.

◆ getSubCauseCode()

uint8_t etsi_its_denm_msgs::access::getSubCauseCode ( const DENM & denm)
inline

Get the Sub Cause Code object.

Parameters
denmDENM to get the subCauseCode value from
Returns
subCauseCode value

Definition at line 67 of file denm_getters.h.

67{ return denm.denm.situation.event_type.sub_cause_code.value; }

◆ getSubCauseCodeType()

std::string etsi_its_denm_msgs::access::getSubCauseCodeType ( const DENM & denm)
inline

Get the Sub Cause Code Type object.

https://www.etsi.org/deliver/etsi_en/302600_302699/30263703/01.02.01_30/en_30263703v010201v.pdf

Parameters
denmDENM to get the subCauseCodeType value from
Returns
causeCodeType value

Definition at line 149 of file denm_getters.h.

149 {
150 if (denm.denm.situation_is_present) {
151 int cause_code = getCauseCode(denm);
152 int sub_cause_code = getSubCauseCode(denm);
153 std::string sub_cause_code_type = "undefined";
154 if (cause_code == CauseCodeType().TRAFFIC_CONDITION) {
155 if (sub_cause_code == 0)
156 sub_cause_code_type = "unavailable";
157 else if (sub_cause_code == 1)
158 sub_cause_code_type = "not defined";
159 else if (sub_cause_code == 2)
160 sub_cause_code_type = "traffic jam slowly increasing";
161 else if (sub_cause_code == 3)
162 sub_cause_code_type = "traffic jam increasing";
163 else if (sub_cause_code == 4)
164 sub_cause_code_type = "traffic jam strongly increasing";
165 else if (sub_cause_code == 5)
166 sub_cause_code_type = "traffic stationary";
167 else if (sub_cause_code == 6)
168 sub_cause_code_type = "traffic jam slightly decreasing";
169 else if (sub_cause_code == 7)
170 sub_cause_code_type = "traffic jam decreasing";
171 else if (sub_cause_code == 8)
172 sub_cause_code_type = "traffic jam strongly decreasing";
173 } else if (cause_code == CauseCodeType().ACCIDENT) {
174 if (sub_cause_code == 0)
175 sub_cause_code_type = "unavailable";
176 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
177 sub_cause_code_type = "not defined";
178 else if (sub_cause_code == 8)
179 sub_cause_code_type = "assistance requested (e-Call)";
180 } else if (cause_code == CauseCodeType().ROADWORKS) {
181 if (sub_cause_code == 0)
182 sub_cause_code_type = "unavailable";
183 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
184 sub_cause_code_type = "not defined";
185 else if (sub_cause_code == 4)
186 sub_cause_code_type = "short-term stationary roadworks";
187 else if (sub_cause_code == 5)
188 sub_cause_code_type = "street cleaning";
189 else if (sub_cause_code == 6)
190 sub_cause_code_type = "winter service";
191 } else if (cause_code == CauseCodeType().IMPASSABILITY)
192 sub_cause_code_type = "not defined";
193 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION) {
194 if (sub_cause_code == 0)
195 sub_cause_code_type = "unavailable";
196 else if (sub_cause_code >= 1 && sub_cause_code <= 10)
197 sub_cause_code_type = "not defined";
198 } else if (cause_code == CauseCodeType().AQUAPLANNNING)
199 sub_cause_code_type = "not defined";
200 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION) {
201 if (sub_cause_code == 0)
202 sub_cause_code_type = "unavailable";
203 else if (sub_cause_code >= 1 && sub_cause_code <= 9)
204 sub_cause_code_type = "not defined";
205 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD) {
206 if (sub_cause_code == 0)
207 sub_cause_code_type = "unavailable";
208 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
209 sub_cause_code_type = "not defined";
210 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD) {
211 if (sub_cause_code == 0)
212 sub_cause_code_type = "unavailable";
213 else if (sub_cause_code >= 1 && sub_cause_code <= 4)
214 sub_cause_code_type = "not defined";
215 } else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD) {
216 if (sub_cause_code == 0)
217 sub_cause_code_type = "unavailable";
218 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
219 sub_cause_code_type = "not defined";
220 } else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING) {
221 if (sub_cause_code == 0)
222 sub_cause_code_type = "unavailable";
223 else if (sub_cause_code == 1)
224 sub_cause_code_type = "vehicle driving in wrong lane";
225 else if (sub_cause_code == 2)
226 sub_cause_code_type = "vehicle driving in wrong driving direction";
227 } else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS) {
228 if (sub_cause_code == 0)
229 sub_cause_code_type = "unavailable";
230 else if (sub_cause_code >= 1 && sub_cause_code <= 5)
231 sub_cause_code_type = "not defined";
232 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION) {
233 if (sub_cause_code == 0)
234 sub_cause_code_type = "unavailable";
235 else if (sub_cause_code >= 1 && sub_cause_code <= 6)
236 sub_cause_code_type = "not defined";
237 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY) {
238 if (sub_cause_code == 0)
239 sub_cause_code_type = "unavailable";
240 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
241 sub_cause_code_type = "not defined";
242 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION) {
243 if (sub_cause_code == 0)
244 sub_cause_code_type = "unavailable";
245 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
246 sub_cause_code_type = "not defined";
247 } else if (cause_code == CauseCodeType().SLOW_VEHICLE) {
248 if (sub_cause_code == 0)
249 sub_cause_code_type = "unavailable";
250 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
251 sub_cause_code_type = "not defined";
252 } else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE) {
253 if (sub_cause_code == 0)
254 sub_cause_code_type = "unavailable";
255 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
256 sub_cause_code_type = "not defined";
257 } else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN) {
258 if (sub_cause_code == 0)
259 sub_cause_code_type = "unavailable";
260 else if (sub_cause_code == 1)
261 sub_cause_code_type = "lack of fuel";
262 else if (sub_cause_code == 2)
263 sub_cause_code_type = "lack of battery";
264 else if (sub_cause_code == 3)
265 sub_cause_code_type = "engine problem";
266 else if (sub_cause_code == 4)
267 sub_cause_code_type = "transmission problem";
268 else if (sub_cause_code == 5)
269 sub_cause_code_type = "engine cooling problem";
270 else if (sub_cause_code == 6)
271 sub_cause_code_type = "braking system problem";
272 else if (sub_cause_code == 7)
273 sub_cause_code_type = "steering problem";
274 else if (sub_cause_code == 8)
275 sub_cause_code_type = "tyre puncture";
276 } else if (cause_code == CauseCodeType().POST_CRASH) {
277 if (sub_cause_code == 0)
278 sub_cause_code_type = "unavailable";
279 else if (sub_cause_code == 1)
280 sub_cause_code_type = "accident without e-Call triggered";
281 else if (sub_cause_code == 2)
282 sub_cause_code_type = "accident with e-Call manually triggered";
283 else if (sub_cause_code == 3)
284 sub_cause_code_type = "accident with e-Call automatical triggered";
285 else if (sub_cause_code == 4)
286 sub_cause_code_type = "accident with e-Call triggered without a possible access to a cell network";
287 } else if (cause_code == CauseCodeType().HUMAN_PROBLEM) {
288 if (sub_cause_code == 0)
289 sub_cause_code_type = "unavailable";
290 else if (sub_cause_code == 1)
291 sub_cause_code_type = "glycaemia problem";
292 else if (sub_cause_code == 2)
293 sub_cause_code_type = "heart problem";
294 } else if (cause_code == CauseCodeType().STATIONARY_VEHICLE) {
295 if (sub_cause_code == 0)
296 sub_cause_code_type = "unavailable";
297 else if (sub_cause_code == 1)
298 sub_cause_code_type = "human problem";
299 else if (sub_cause_code == 2)
300 sub_cause_code_type = "vehicle breakdown";
301 else if (sub_cause_code == 3)
302 sub_cause_code_type = "post crash";
303 else if (sub_cause_code == 4)
304 sub_cause_code_type = "public transport stop";
305 else if (sub_cause_code == 5)
306 sub_cause_code_type = "carrying dangerous goods";
307 } else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING) {
308 if (sub_cause_code == 0)
309 sub_cause_code_type = "unavailable";
310 else if (sub_cause_code == 1)
311 sub_cause_code_type = "emergency vehicle approaching";
312 else if (sub_cause_code == 2)
313 sub_cause_code_type = "prioritized vehicle approaching";
314 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE) {
315 if (sub_cause_code == 0)
316 sub_cause_code_type = "unavailable";
317 else if (sub_cause_code == 1)
318 sub_cause_code_type = "dangerous left turn curve";
319 else if (sub_cause_code == 2)
320 sub_cause_code_type = "dangerous right turn curve";
321 else if (sub_cause_code == 3)
322 sub_cause_code_type = "multiple curves starting with unknown turning direction";
323 else if (sub_cause_code == 4)
324 sub_cause_code_type = "multiple curves starting with left turn";
325 else if (sub_cause_code == 5)
326 sub_cause_code_type = "multiple curves starting with right turn";
327 } else if (cause_code == CauseCodeType().COLLISION_RISK) {
328 if (sub_cause_code == 0)
329 sub_cause_code_type = "unavailable";
330 else if (sub_cause_code == 1)
331 sub_cause_code_type = "longitudinal collision risk";
332 else if (sub_cause_code == 2)
333 sub_cause_code_type = "crossing collision risk";
334 else if (sub_cause_code == 3)
335 sub_cause_code_type = "lateral collision risk";
336 else if (sub_cause_code == 4)
337 sub_cause_code_type = "collision risk involving vulnerable road user";
338 } else if (cause_code == CauseCodeType().SIGNAL_VIOLATION) {
339 if (sub_cause_code == 0)
340 sub_cause_code_type = "unavailable";
341 else if (sub_cause_code == 1)
342 sub_cause_code_type = "stop sign violation";
343 else if (sub_cause_code == 2)
344 sub_cause_code_type = "traffic light violation";
345 else if (sub_cause_code == 3)
346 sub_cause_code_type = "turning regulation violation";
347 } else if (cause_code == CauseCodeType().DANGEROUS_SITUATION) {
348 if (sub_cause_code == 0)
349 sub_cause_code_type = "unavailable";
350 else if (sub_cause_code == 1)
351 sub_cause_code_type = "emergency electronic break lights";
352 else if (sub_cause_code == 2)
353 sub_cause_code_type = "pre-crash system activated";
354 else if (sub_cause_code == 3)
355 sub_cause_code_type = "ESP (electronic stability program) activated";
356 else if (sub_cause_code == 4)
357 sub_cause_code_type = "ABS (anti-lock breaking system) activated";
358 else if (sub_cause_code == 5)
359 sub_cause_code_type = "AEB (automatic emergency breaking) activated";
360 else if (sub_cause_code == 6)
361 sub_cause_code_type = "break warning activated";
362 else if (sub_cause_code == 7)
363 sub_cause_code_type = "collision risk warning activated";
364 }
365 return sub_cause_code_type;
366 } else {
367 throw std::invalid_argument("SituationContainer is not present!");
368 }
369}
uint8_t getSubCauseCode(const DENM &denm)
Get the Sub Cause Code object.

◆ getUTMPosition() [1/3]

gm::PointStamped etsi_its_denm_msgs::access::getUTMPosition ( const DENM & denm)
inline

Get the UTM Position defined within the ManagementContainer of the DENM.

Parameters
denmDENM to get the UTM Position from
Returns
gm::PointStamped geometry_msgs::PointStamped of the given position

Definition at line 145 of file denm_getters.h.

149 {

◆ getUTMPosition() [2/3]

gm::PointStamped etsi_its_denm_msgs::access::getUTMPosition ( const DENM & denm,
int & zone,
bool & northp )
inline

Get the UTM Position defined within the ManagementContainer of the DENM.

Parameters
denmDENM to get the UTM Position from
zonethe UTM zone (zero means UPS)
northphemisphere (true means north, false means south)
Returns
gm::PointStamped geometry_msgs::PointStamped of the given position

Definition at line 135 of file denm_getters.h.

136 {
137 throw std::invalid_argument("SituationContainer is not present!");

◆ getUTMPosition() [3/3]

template<typename T>
gm::PointStamped etsi_its_denm_msgs::access::getUTMPosition ( const T & reference_position,
int & zone,
bool & northp )
inline

Get the UTM Position defined by the given ReferencePosition.

The position is transformed into UTM by using GeographicLib::UTMUPS The altitude value is directly used as z-Coordinate

Parameters
[in]reference_positionReferencePosition or ReferencePositionWithConfidence to get the UTM Position from
[out]zonethe UTM zone (zero means UPS)
[out]northphemisphere (true means north, false means south)
Returns
gm::PointStamped geometry_msgs::PointStamped of the given position

Definition at line 107 of file denm_getters.h.

◆ getWGSPosConfidenceEllipse()

template<typename PosConfidenceEllipse>
std::array< double, 4 > etsi_its_denm_msgs::access::getWGSPosConfidenceEllipse ( const PosConfidenceEllipse & position_confidence_ellipse)
inline

Get the covariance matrix of the position confidence ellipse.

Parameters
position_confidence_ellipseThe position confidence ellipse to get the covariance matrix from
object_headingThe object heading in radians
Returns
std::array<double, 4> The covariance matrix of the position confidence ellipse in WGS coordinates (x = North, y = East)

Definition at line 276 of file denm_getters.h.

276 {
277 if (sub_cause_code == 0)
278 sub_cause_code_type = "unavailable";
279 else if (sub_cause_code == 1)

◆ getYawRateCDD()

template<typename YawRate>
double etsi_its_denm_msgs::access::getYawRateCDD ( const YawRate & yaw_rate)
inline

Get the Yaw Rate value.

Parameters
yaw_rateThe YawRate object to get the yaw rate from
Returns
double The yaw rate in degrees per second

Definition at line 156 of file denm_getters.h.

◆ getYawRateConfidenceCDD()

template<typename YawRate, typename YawRateConfidence = decltype(YawRate::yaw_rate_confidence)>
double etsi_its_denm_msgs::access::getYawRateConfidenceCDD ( const YawRate & yaw_rate)
inline

Get the Yaw Rate Confidence.

Parameters
yaw_rateThe YawRate object to get the yaw rate confidence from
Returns
double The yaw rate standard deviation in degrees per second

Definition at line 167 of file denm_getters.h.

173 {
174 if (sub_cause_code == 0)
175 sub_cause_code_type = "unavailable";
176 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
177 sub_cause_code_type = "not defined";
178 else if (sub_cause_code == 8)
179 sub_cause_code_type = "assistance requested (e-Call)";
180 } else if (cause_code == CauseCodeType().ROADWORKS) {
181 if (sub_cause_code == 0)

◆ WGSCovMatrixFromConfidenceEllipse()

std::array< double, 4 > etsi_its_denm_msgs::access::WGSCovMatrixFromConfidenceEllipse ( double semi_major,
double semi_minor,
double major_orientation )
inline

Convert the confidence ellipse to a covariance matrix.

Note that the major_orientation is given in degrees, while the object_heading is given in radians!

Parameters
semi_majorSemi major axis length in meters
semi_minorSemi minor axis length in meters
major_orientationOrientation of the major axis in degrees, relative to WGS84
Returns
std::array<double, 4> The covariance matrix in WGS coordinates (x = North, y = East)

Definition at line 250 of file denm_getters.h.

252 {
253 if (sub_cause_code == 0)