cam_setters.h
Go to the documentation of this file.
1 /*
2 =============================================================================
3 MIT License
4 
5 Copyright (c) 2023-2025 Institute for Automotive Engineering (ika), RWTH Aachen University
6 
7 Permission is hereby granted, free of charge, to any person obtaining a copy
8 of this software and associated documentation files (the "Software"), to deal
9 in the Software without restriction, including without limitation the rights
10 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 copies of the Software, and to permit persons to whom the Software is
12 furnished to do so, subject to the following conditions:
13 
14 The above copyright notice and this permission notice shall be included in all
15 copies or substantial portions of the Software.
16 
17 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 SOFTWARE.
24 =============================================================================
25 */
26 
32 #pragma once
33 
34 namespace etsi_its_cam_msgs::access {
35 
37 
45 inline void setItsPduHeader(CAM &cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
46  setItsPduHeader(cam.header, ItsPduHeader::MESSAGE_ID_CAM, station_id, protocol_version);
47 }
48 
55 inline void setLongitudinalAccelerationValue(LongitudinalAccelerationValue& accel, const double value) {
56  auto accel_val = std::round(value * 1e1);
57  if (accel_val >= LongitudinalAccelerationValue::MIN && accel_val <= LongitudinalAccelerationValue::MAX) {
58  accel.value = static_cast<int16_t>(accel_val);
59  } else if (accel_val < LongitudinalAccelerationValue::MIN) {
60  accel.value = LongitudinalAccelerationValue::MIN;
61  } else if (accel_val > LongitudinalAccelerationValue::MAX) {
62  accel.value = LongitudinalAccelerationValue::MAX - 1;
63  }
64 }
65 
76 inline void setLongitudinalAcceleration(LongitudinalAcceleration& accel, const double value, const double confidence = std::numeric_limits<double>::infinity()) {
77  setAccelerationConfidence(accel.longitudinal_acceleration_confidence, confidence);
78  setLongitudinalAccelerationValue(accel.longitudinal_acceleration_value, value);
79 }
80 
87 inline void setLateralAccelerationValue(LateralAccelerationValue& accel, const double value) {
88  int64_t accel_val = (int64_t)std::round(value * 1e1);
89  if (accel_val >= LateralAccelerationValue::MIN && accel_val <= LateralAccelerationValue::MAX) {
90  accel.value = accel_val;
91  } else if (accel_val < LateralAccelerationValue::MIN) {
92  accel.value = LateralAccelerationValue::MIN;
93  } else if (accel_val > LateralAccelerationValue::MAX) {
94  accel.value = LateralAccelerationValue::MAX - 1;
95  }
96 }
97 
108 inline void setLateralAcceleration(LateralAcceleration& accel, const double value, const double confidence = std::numeric_limits<double>::infinity()) {
109  setAccelerationConfidence(accel.lateral_acceleration_confidence, confidence);
110  setLateralAccelerationValue(accel.lateral_acceleration_value, value);
111 }
112 
114 
124 inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
125  // First ensure, that the object has the correct heading by setting its value
126  double orientation = object_heading * 180 / M_PI; // Convert to degrees
127  // Normalize to [0, 360)
128  orientation = std::fmod(orientation + 360, 360);
129  while (orientation < 0) {
130  orientation += 360;
131  }
132  while (orientation >= 360) {
133  orientation -= 360;
134  }
135  setHeading(cam, orientation);
136  setPosConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
137  covariance_matrix, object_heading);
138 }
139 
148 inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
149  setWGSPosConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
150  covariance_matrix);
151 }
152 
153 } // namespace etsi_its_cam_msgs::access
setPosConfidenceEllipse
void setPosConfidenceEllipse(PosConfidenceEllipse &position_confidence_ellipse, const double semi_major_axis, const double semi_minor_axis, const double orientation)
Set the Pos Confidence Ellipse object.
Definition: cdd_setters_common.h:303
setAccelerationConfidence
void setAccelerationConfidence(AccelerationConfidence &accel_confidence, const double value)
Set the Acceleration Confidence object.
Definition: cdd_setters_common.h:163
etsi_its_cam_msgs::access::setLongitudinalAcceleration
void setLongitudinalAcceleration(LongitudinalAcceleration &accel, const double value, const double confidence=std::numeric_limits< double >::infinity())
Set the LongitudinalAcceleration object.
Definition: cam_setters.h:76
etsi_its_cam_msgs::access::setLateralAcceleration
void setLateralAcceleration(LateralAcceleration &accel, const double value, const double confidence=std::numeric_limits< double >::infinity())
Set the LateralAcceleration object.
Definition: cam_setters.h:108
cam_setters_common.h
Common setter functions for the ETSI ITS CAM (EN and TS)
setHeading
void setHeading(CAM &cam, const double heading_val, const double confidence=std::numeric_limits< double >::infinity())
Set the Heading for a CAM.
Definition: cam_setters_common.h:89
cdd_v1-3-1_setters.h
Setter functions for the ETSI ITS Common Data Dictionary (CDD) v1.3.1.
setWGSPosConfidenceEllipse
void setWGSPosConfidenceEllipse(PosConfidenceEllipse &position_confidence_ellipse, const std::array< double, 4 > &covariance_matrix)
Set the Pos Confidence Ellipse object.
Definition: cdd_setters_common.h:391
etsi_its_cam_msgs::access::setLateralAccelerationValue
void setLateralAccelerationValue(LateralAccelerationValue &accel, const double value)
Set the LateralAccelerationValue object.
Definition: cam_setters.h:87
etsi_its_cam_msgs::access::setWGSRefPosConfidence
void setWGSRefPosConfidence(CAM &cam, const std::array< double, 4 > &covariance_matrix)
Set the confidence of the reference position.
Definition: cam_setters.h:148
etsi_its_cam_msgs::access
Definition: impl/cam/cam_access.h:57
etsi_its_cam_msgs::access::setRefPosConfidence
void setRefPosConfidence(CAM &cam, const std::array< double, 4 > &covariance_matrix, const double object_heading)
Set the confidence of the reference position.
Definition: cam_setters.h:124
etsi_its_cam_msgs::access::setItsPduHeader
void setItsPduHeader(CAM &cam, const uint32_t station_id, const uint8_t protocol_version=0)
Set the ItsPduHeader-object for a CAM.
Definition: cam_setters.h:45
etsi_its_cam_msgs::access::setLongitudinalAccelerationValue
void setLongitudinalAccelerationValue(LongitudinalAccelerationValue &accel, const double value)
Set the LongitudinalAccelerationValue object.
Definition: cam_setters.h:55


etsi_its_msgs_utils
Author(s): Jean-Pierre Busch , Guido Küppers , Lennart Reiher
autogenerated on Sun May 18 2025 02:32:12