etsi_its_messages v3.4.0
Loading...
Searching...
No Matches
cdd_v2-1-1_setters.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// Copyright Institute for Automotive Engineering (ika), RWTH Aachen University
3
8
9#ifndef ETSI_ITS_MSGS_UTILS_IMPL_CDD_CDD_V2_1_1_SETTERS_H
10#define ETSI_ITS_MSGS_UTILS_IMPL_CDD_CDD_V2_1_1_SETTERS_H
11
14#include <GeographicLib/UTMUPS.hpp>
15#include <cstring>
16
25inline void setItsPduHeader(ItsPduHeader& header, const uint8_t message_id, const uint32_t station_id,
26 const uint8_t protocol_version = 0) {
27 setStationId(header.station_id, station_id);
28 throwIfOutOfRange(message_id, MessageId::MIN, MessageId::MAX, "MessageID");
29 header.message_id.value = message_id;
30 throwIfOutOfRange(protocol_version, OrdinalNumber1B::MIN, OrdinalNumber1B::MAX, "ProtocolVersion");
31 header.protocol_version.value = protocol_version;
32}
33
40inline void setLongitudinalAccelerationValue(AccelerationValue& accel, const double value) {
41 int64_t accel_val = (int64_t)std::round(value * 1e1);
42 if (accel_val >= AccelerationValue::MIN && accel_val <= AccelerationValue::MAX) {
43 accel.value = accel_val;
44 } else if (accel_val < AccelerationValue::MIN) {
45 accel.value = AccelerationValue::MIN;
46 } else if (accel_val > AccelerationValue::MAX) {
47 accel.value = AccelerationValue::MAX - 1;
48 }
49}
50
59inline void setLongitudinalAcceleration(AccelerationComponent& accel, const double value, const double confidence) {
60 setAccelerationConfidence(accel.confidence, confidence);
61 setLongitudinalAccelerationValue(accel.value, value);
62}
63
70inline void setLateralAccelerationValue(AccelerationValue& accel, const double value) {
71 int64_t accel_val = (int64_t)std::round(value * 1e1);
72 if (accel_val >= AccelerationValue::MIN && accel_val <= AccelerationValue::MAX) {
73 accel.value = accel_val;
74 } else if (accel_val < AccelerationValue::MIN) {
75 accel.value = AccelerationValue::MIN;
76 } else if (accel_val > AccelerationValue::MAX) {
77 accel.value = AccelerationValue::MAX - 1;
78 }
79}
80
89inline void setLateralAcceleration(AccelerationComponent& accel, const double value, const double confidence) {
90 setAccelerationConfidence(accel.confidence, confidence);
91 setLateralAccelerationValue(accel.value, value);
92}
93
102template <typename PositionConfidenceEllipse, typename Wgs84AngleValue = decltype(PositionConfidenceEllipse::semi_major_axis_orientation)>
103inline void setPositionConfidenceEllipse(PositionConfidenceEllipse& position_confidence_ellipse, const double semi_major_axis,
104 const double semi_minor_axis, const double orientation) {
105 setSemiAxis(position_confidence_ellipse.semi_major_axis_length, semi_major_axis);
106 setSemiAxis(position_confidence_ellipse.semi_minor_axis_length, semi_minor_axis);
107 setHeadingValue(position_confidence_ellipse.semi_major_axis_orientation, orientation);
108}
109
119template <typename PositionConfidenceEllipse>
120inline void setPositionConfidenceEllipse(PositionConfidenceEllipse& position_confidence_ellipse, const std::array<double, 4>& covariance_matrix, const double object_heading){
121 auto [semi_major_axis, semi_minor_axis, orientation] = confidenceEllipseFromCovMatrix(covariance_matrix, object_heading);
122 setPositionConfidenceEllipse(position_confidence_ellipse, semi_major_axis, semi_minor_axis, orientation);
123}
124
134template <typename PositionConfidenceEllipse>
135inline void setWGSPositionConfidenceEllipse(PositionConfidenceEllipse& position_confidence_ellipse, const std::array<double, 4>& covariance_matrix){
136 auto [semi_major_axis, semi_minor_axis, orientation] = confidenceEllipseFromWGSCovMatrix(covariance_matrix);
137 setPositionConfidenceEllipse(position_confidence_ellipse, semi_major_axis, semi_minor_axis, orientation);
138}
139
140#endif // ETSI_ITS_MSGS_UTILS_IMPL_CDD_CDD_V2_1_1_SETTERS_H
Common setter functions for the ETSI ITS Common Data Dictionary (CDD) v1.3.1, v2.1....
void setAccelerationConfidence(AccelerationConfidence &accel_confidence, const double value)
Set the Acceleration Confidence object.
void setStationId(StationId &station_id, const uint32_t id_value)
Set the Station Id object.
std::tuple< double, double, double > confidenceEllipseFromCovMatrix(const std::array< double, 4 > &covariance_matrix, const double object_heading)
Gets the values needed to set a confidence ellipse from a covariance matrix.
void setSemiAxis(SemiAxisLength &semi_axis_length, const double length)
Set the Semi Axis length.
void setHeadingValue(HeadingValue &heading, const double value)
Set the HeadingValue object.
std::tuple< double, double, double > confidenceEllipseFromWGSCovMatrix(const std::array< double, 4 > &covariance_matrix)
Gets the values needed to set a confidence ellipse from a covariance matrix.
void setLateralAccelerationValue(AccelerationValue &accel, const double value)
Set the LateralAccelerationValue object.
void setWGSPositionConfidenceEllipse(PositionConfidenceEllipse &position_confidence_ellipse, const std::array< double, 4 > &covariance_matrix)
Set the Position Confidence Ellipse object.
void setLateralAcceleration(AccelerationComponent &accel, const double value, const double confidence)
Set the LateralAcceleration object.
void setLongitudinalAcceleration(AccelerationComponent &accel, const double value, const double confidence)
Set the LongitudinalAcceleration object.
void setPositionConfidenceEllipse(PositionConfidenceEllipse &position_confidence_ellipse, const double semi_major_axis, const double semi_minor_axis, const double orientation)
Set the Position Confidence Ellipse object.
void setLongitudinalAccelerationValue(AccelerationValue &accel, const double value)
Set the LongitudinalAccelerationValue object.
void setItsPduHeader(ItsPduHeader &header, const uint8_t message_id, const uint32_t station_id, const uint8_t protocol_version=0)
Set the Its Pdu Header object.
Sanity-check functions etc.
void throwIfOutOfRange(const T1 &val, const T2 &min, const T2 &max, const std::string val_desc)
Throws an exception if a given value is out of a defined range.
Definition checks.h:23