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 244 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 103 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 114 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 71 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 91 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 43 of file denm_getters.h.

64inline double getHeadingConfidence(const DENM& denm) {
65 if (denm.denm.location_is_present) {
66 if (denm.denm.location.event_position_heading_is_present) {
67 return getHeadingConfidenceCDD(denm.denm.location.event_position_heading);
68 } 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 82 of file denm_getters.h.

82{ 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 100 of file denm_getters.h.

100 {
101 if (denm.denm.situation_is_present) {
102 int cause_code = getCauseCode(denm);
103 std::string cause_code_type = "undefined";
104
105 if (cause_code == CauseCodeType().TRAFFIC_CONDITION)
106 cause_code_type = "traffic condition";
107 else if (cause_code == CauseCodeType().ACCIDENT)
108 cause_code_type = "accident";
109 else if (cause_code == CauseCodeType().ROADWORKS)
110 cause_code_type = "roadworks";
111 else if (cause_code == CauseCodeType().IMPASSABILITY)
112 cause_code_type = "impassibility";
113 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION)
114 cause_code_type = "adverse weather condition - adhesion";
115 else if (cause_code == CauseCodeType().AQUAPLANNNING)
116 cause_code_type = "aquaplanning";
117 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION)
118 cause_code_type = "hazardous location - surface condition";
119 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD)
120 cause_code_type = "hazardous location - obstacle on the road";
121 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD)
122 cause_code_type = "hazardous location - animal on the road";
123 else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD)
124 cause_code_type = "human presence on the road";
125 else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING)
126 cause_code_type = "wrong way driving";
127 else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS)
128 cause_code_type = "rescue and recovery in progress";
129 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION)
130 cause_code_type = "adverse weather condition - extreme weather condition";
131 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY)
132 cause_code_type = "adverse weather condition - visibility";
133 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION)
134 cause_code_type = "adverse weather condition - precipitation";
135 else if (cause_code == CauseCodeType().SLOW_VEHICLE)
136 cause_code_type = "slow vehicle";
137 else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE)
138 cause_code_type = "dangerous end of queue";
139 else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN)
140 cause_code_type = "vehicle breakdown";
141 else if (cause_code == CauseCodeType().POST_CRASH)
142 cause_code_type = "post crash";
143 else if (cause_code == CauseCodeType().HUMAN_PROBLEM)
144 cause_code_type = "human problem";
145 else if (cause_code == CauseCodeType().STATIONARY_VEHICLE)
146 cause_code_type = "stationary vehicle";
147 else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING)
148 cause_code_type = "emergency vehicle approaching";
149 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE)
150 cause_code_type = "hazardous location - dangerous curve";
151 else if (cause_code == CauseCodeType().COLLISION_RISK)
152 cause_code_type = "collision risk";
153 else if (cause_code == CauseCodeType().SIGNAL_VIOLATION)
154 cause_code_type = "signal violation";
155 else if (cause_code == CauseCodeType().DANGEROUS_SITUATION)
156 cause_code_type = "dangerous situation";
157
158 return cause_code_type;
159 } else {
160 throw std::invalid_argument("SituationContainer is not present!");
161 }
162}
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 180 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 46 of file denm_getters.h.

46 {
47 if (denm.denm.location_is_present) {
48 if (denm.denm.location.event_position_heading_is_present) {
49 return getHeadingCDD(denm.denm.location.event_position_heading);
50 } else {
51 throw std::invalid_argument("Heading is not present!");
52 }
53 } else {
54 throw std::invalid_argument("LocationContainer is not present!");
55 }
56}

◆ 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 159 of file denm_getters.h.

159{

◆ 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 64 of file denm_getters.h.

64 {
65 if (denm.denm.location_is_present) {
66 if (denm.denm.location.event_position_heading_is_present) {
67 return getHeadingConfidenceCDD(denm.denm.location.event_position_heading);
68 } else {
69 throw std::invalid_argument("Heading is not present!");
70 }
71 } else {
72 throw std::invalid_argument("LocationContainer is not present!");
73 }
74}

◆ 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 170 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 99 of file denm_getters.h.

100 {
101 if (denm.denm.situation_is_present) {
102 int cause_code = getCauseCode(denm);
103 std::string cause_code_type = "undefined";
104
105 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 131 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 75 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 55 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 190 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 83 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 63 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 225 of file denm_getters.h.

228 {
229 if (sub_cause_code == 0)
230 sub_cause_code_type = "unavailable";
231 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 286 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 51 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 59 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 214 of file denm_getters.h.

216 {

◆ 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 113 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 84 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 145 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 92 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 43 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 47 of file denm_getters.h.

47{

◆ 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 67 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 90 of file denm_getters.h.

90{ 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 172 of file denm_getters.h.

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

172 {

◆ 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 158 of file denm_getters.h.

159 {
160 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 130 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 299 of file denm_getters.h.

299 {
300 if (sub_cause_code == 0)
301 sub_cause_code_type = "unavailable";
302 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 179 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 190 of file denm_getters.h.

196 {
197 if (sub_cause_code == 0)
198 sub_cause_code_type = "unavailable";
199 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
200 sub_cause_code_type = "not defined";
201 else if (sub_cause_code == 8)
202 sub_cause_code_type = "assistance requested (e-Call)";
203 } else if (cause_code == CauseCodeType().ROADWORKS) {
204 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 273 of file denm_getters.h.

275 {
276 if (sub_cause_code == 0)