etsi_its_messages v3.3.0
 
Loading...
Searching...
No Matches
cam_ts_setters.h File Reference

Setter functions for the ETSI ITS CAM (TS) More...

Go to the source code of this file.

Classes

struct  etsi_its_cam_ts_msgs::access::etsi_its_msgs::OneCentimeterHelper< SemiAxisLength, typename >
 
struct  etsi_its_cam_ts_msgs::access::etsi_its_msgs::OneCentimeterHelper< SemiAxisLength, std::void_t< decltype(SemiAxisLength::ONE_CENTIMETER)> >
 

Functions

template<typename T1, typename T2>
void etsi_its_cam_ts_msgs::access::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.
 
void etsi_its_cam_ts_msgs::access::throwIfNotPresent (const bool is_present, const std::string val_desc)
 Throws an exception if the given value is not present.
 
uint16_t etsi_its_cam_ts_msgs::access::etsi_its_msgs::getLeapSecondInsertionsSince2004 (const uint64_t unix_seconds)
 Get the leap second insertions since 2004 for given unix seconds.
 
void etsi_its_cam_ts_msgs::access::setTimestampITS (TimestampIts &timestamp_its, const uint64_t unix_nanosecs, const uint16_t n_leap_seconds=etsi_its_msgs::LEAP_SECOND_INSERTIONS_SINCE_2004.rbegin() ->second)
 Set the TimestampITS object.
 
void etsi_its_cam_ts_msgs::access::setLatitude (Latitude &latitude, const double deg)
 Set the Latitude object.
 
void etsi_its_cam_ts_msgs::access::setLongitude (Longitude &longitude, const double deg)
 Set the Longitude object.
 
void etsi_its_cam_ts_msgs::access::setAltitudeValue (AltitudeValue &altitude, const double value)
 Set the AltitudeValue object.
 
void etsi_its_cam_ts_msgs::access::setAltitude (Altitude &altitude, const double value)
 Set the Altitude object.
 
void etsi_its_cam_ts_msgs::access::setSpeedValue (SpeedValue &speed, const double value)
 Set the SpeedValue object.
 
void etsi_its_cam_ts_msgs::access::setSpeedConfidence (SpeedConfidence &speed_confidence, const double value)
 Set the Speed Confidence object.
 
void etsi_its_cam_ts_msgs::access::setSpeed (Speed &speed, const double value, const double confidence=std::numeric_limits< double >::infinity())
 Set the Speed object.
 
template<typename AccelerationMagnitudeValue>
void etsi_its_cam_ts_msgs::access::setAccelerationMagnitudeValue (AccelerationMagnitudeValue &accel_mag_value, const double value)
 Set the Acceleration Magnitude Value object.
 
template<typename AccelerationConfidence>
void etsi_its_cam_ts_msgs::access::setAccelerationMagnitudeConfidence (AccelerationConfidence &accel_mag_confidence, const double value)
 Set the AccelerationMagnitude Confidence object.
 
template<typename AccelerationMagnitude>
void etsi_its_cam_ts_msgs::access::setAccelerationMagnitude (AccelerationMagnitude &accel_mag, const double value, const double confidence=std::numeric_limits< double >::infinity())
 Set the AccelerationMagnitude object.
 
template<typename AccelerationConfidence>
void etsi_its_cam_ts_msgs::access::setAccelerationConfidence (AccelerationConfidence &accel_confidence, const double value)
 Set the Acceleration Confidence object.
 
template<typename T>
void etsi_its_cam_ts_msgs::access::setReferencePosition (T &ref_position, const double latitude, const double longitude, const double altitude=AltitudeValue::UNAVAILABLE)
 Sets the reference position in the given ReferencePostion object.
 
template<typename T>
void etsi_its_cam_ts_msgs::access::setFromUTMPosition (T &reference_position, const gm::PointStamped &utm_position, const int zone, const bool northp)
 Set the ReferencePosition from a given UTM-Position.
 
template<typename HeadingValue>
void etsi_its_cam_ts_msgs::access::setHeadingValue (HeadingValue &heading, const double value)
 Set the HeadingValue object.
 
template<typename HeadingConfidence>
void etsi_its_cam_ts_msgs::access::setHeadingConfidence (HeadingConfidence &heading_confidence, const double value)
 Set the Heading Confidence object.
 
template<typename Heading, typename HeadingConfidence = decltype(Heading::heading_confidence)>
void etsi_its_cam_ts_msgs::access::setHeadingCDD (Heading &heading, const double value, double confidence=std::numeric_limits< double >::infinity())
 Set the Heading object.
 
template<typename YawRate, typename YawRateValue = decltype(YawRate::yaw_rate_value), typename YawRateConfidence = decltype(YawRate::yaw_rate_confidence)>
void etsi_its_cam_ts_msgs::access::setYawRateCDD (YawRate &yaw_rate, const double value, double confidence=std::numeric_limits< double >::infinity())
 Set the Yaw Rate object.
 
template<typename SemiAxisLength>
void etsi_its_cam_ts_msgs::access::setSemiAxis (SemiAxisLength &semi_axis_length, const double length)
 Set the Semi Axis length.
 
template<typename PosConfidenceEllipse>
void etsi_its_cam_ts_msgs::access::setPosConfidenceEllipse (PosConfidenceEllipse &position_confidence_ellipse, const double semi_major_axis, const double semi_minor_axis, const double orientation)
 Set the Pos Confidence Ellipse object.
 
std::tuple< double, double, double > etsi_its_cam_ts_msgs::access::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.
 
std::tuple< double, double, double > etsi_its_cam_ts_msgs::access::confidenceEllipseFromWGSCovMatrix (const std::array< double, 4 > &covariance_matrix)
 Gets the values needed to set a confidence ellipse from a covariance matrix.
 
template<typename PosConfidenceEllipse>
void etsi_its_cam_ts_msgs::access::setPosConfidenceEllipse (PosConfidenceEllipse &position_confidence_ellipse, const std::array< double, 4 > &covariance_matrix, const double object_heading)
 Set the Pos Confidence Ellipse object.
 
template<typename PosConfidenceEllipse>
void etsi_its_cam_ts_msgs::access::setWGSPosConfidenceEllipse (PosConfidenceEllipse &position_confidence_ellipse, const std::array< double, 4 > &covariance_matrix)
 Set the Pos Confidence Ellipse object.
 
void etsi_its_cam_ts_msgs::access::setStationId (StationId &station_id, const uint32_t id_value)
 Set the Station Id object.
 
void etsi_its_cam_ts_msgs::access::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.
 
void etsi_its_cam_ts_msgs::access::setStationType (TrafficParticipantType &station_type, const uint8_t value)
 Set the Station Type.
 
void etsi_its_cam_ts_msgs::access::setLongitudinalAccelerationValue (AccelerationValue &accel, const double value)
 Set the LongitudinalAccelerationValue object.
 
void etsi_its_cam_ts_msgs::access::setLongitudinalAcceleration (AccelerationComponent &accel, const double value, const double confidence)
 Set the LongitudinalAcceleration object.
 
void etsi_its_cam_ts_msgs::access::setLateralAccelerationValue (AccelerationValue &accel, const double value)
 Set the LateralAccelerationValue object.
 
void etsi_its_cam_ts_msgs::access::setLateralAcceleration (AccelerationComponent &accel, const double value, const double confidence)
 Set the LateralAcceleration object.
 
template<typename PositionConfidenceEllipse, typename Wgs84AngleValue = decltype(PositionConfidenceEllipse::semi_major_axis_orientation)>
void etsi_its_cam_ts_msgs::access::setPositionConfidenceEllipse (PositionConfidenceEllipse &position_confidence_ellipse, const double semi_major_axis, const double semi_minor_axis, const double orientation)
 Set the Position Confidence Ellipse object.
 
template<typename PositionConfidenceEllipse>
void etsi_its_cam_ts_msgs::access::setPositionConfidenceEllipse (PositionConfidenceEllipse &position_confidence_ellipse, const std::array< double, 4 > &covariance_matrix, const double object_heading)
 Set the Position Confidence Ellipse object.
 
template<typename PositionConfidenceEllipse>
void etsi_its_cam_ts_msgs::access::setWGSPositionConfidenceEllipse (PositionConfidenceEllipse &position_confidence_ellipse, const std::array< double, 4 > &covariance_matrix)
 Set the Position Confidence Ellipse object.
 
template<typename T>
void etsi_its_cam_ts_msgs::access::setBitString (T &bitstring, const std::vector< bool > &bits)
 Set a Bit String by a vector of bools.
 
void etsi_its_cam_ts_msgs::access::setGenerationDeltaTime (GenerationDeltaTime &generation_delta_time, const uint64_t unix_nanosecs, const uint16_t n_leap_seconds=etsi_its_msgs::LEAP_SECOND_INSERTIONS_SINCE_2004.rbegin() ->second)
 Set the GenerationDeltaTime-Value.
 
void etsi_its_cam_ts_msgs::access::setGenerationDeltaTime (CAM &cam, const uint64_t unix_nanosecs, const uint16_t n_leap_seconds=etsi_its_msgs::LEAP_SECOND_INSERTIONS_SINCE_2004.rbegin() ->second)
 Set the Generation Delta Time object.
 
void etsi_its_cam_ts_msgs::access::setStationType (CAM &cam, const uint8_t value)
 Set the StationType for a CAM.
 
void etsi_its_cam_ts_msgs::access::setHeading (CAM &cam, const double heading_val, const double confidence=std::numeric_limits< double >::infinity())
 Set the Heading for a CAM.
 
void etsi_its_cam_ts_msgs::access::setYawRate (CAM &cam, const double yaw_rate_val, const double confidence=std::numeric_limits< double >::infinity())
 Set the Yaw Rate for a CAM.
 
void etsi_its_cam_ts_msgs::access::setVehicleWidth (VehicleWidth &vehicle_width, const double value)
 Set the VehicleWidth object.
 
void etsi_its_cam_ts_msgs::access::setVehicleLengthValue (VehicleLengthValue &vehicle_length, const double value)
 Set the VehicleLengthValue object.
 
void etsi_its_cam_ts_msgs::access::setVehicleLength (VehicleLength &vehicle_length, const double value)
 Set the VehicleLength object.
 
void etsi_its_cam_ts_msgs::access::setVehicleDimensions (CAM &cam, const double vehicle_length, const double vehicle_width)
 Set the vehicle dimensions.
 
void etsi_its_cam_ts_msgs::access::setSpeed (CAM &cam, const double speed_val, const double confidence=SpeedConfidence::UNAVAILABLE)
 Set the vehicle speed.
 
void etsi_its_cam_ts_msgs::access::setLongitudinalAcceleration (CAM &cam, const double lon_accel, const double confidence=std::numeric_limits< double >::infinity())
 Set the longitudinal acceleration.
 
void etsi_its_cam_ts_msgs::access::setLateralAcceleration (CAM &cam, const double lat_accel, const double confidence=std::numeric_limits< double >::infinity())
 Set the lateral acceleration.
 
void etsi_its_cam_ts_msgs::access::setReferencePosition (CAM &cam, const double latitude, const double longitude, const double altitude=AltitudeValue::UNAVAILABLE)
 Set the ReferencePosition for a CAM.
 
void etsi_its_cam_ts_msgs::access::setFromUTMPosition (CAM &cam, const gm::PointStamped &utm_position, const int &zone, const bool &northp)
 Set the ReferencePosition of a CAM from a given UTM-Position.
 
void etsi_its_cam_ts_msgs::access::setExteriorLights (ExteriorLights &exterior_lights, const std::vector< bool > &bits)
 Set the Exterior Lights by a vector of bools.
 
void etsi_its_cam_ts_msgs::access::setExteriorLights (CAM &cam, const std::vector< bool > &exterior_lights)
 Set the Exterior Lights by using a vector of bools.
 
void etsi_its_cam_ts_msgs::access::setAccelerationControl (AccelerationControl &acceleration_control, const std::vector< bool > &bits)
 Set the Acceleration Control by a vector of bools.
 
void etsi_its_cam_ts_msgs::access::setDrivingLaneStatus (DrivingLaneStatus &driving_lane_status, const std::vector< bool > &bits)
 Set the Driving Lane Status by a vector of bools.
 
void etsi_its_cam_ts_msgs::access::setSpecialTransportType (SpecialTransportType &special_transport_type, const std::vector< bool > &bits)
 Set the Special Transport Type by a vector of bools.
 
void etsi_its_cam_ts_msgs::access::setLightBarSirenInUse (LightBarSirenInUse &light_bar_siren_in_use, const std::vector< bool > &bits)
 Set the Lightbar Siren In Use by a vector of bools.
 
void etsi_its_cam_ts_msgs::access::setEmergencyPriority (EmergencyPriority &emergency_priority, const std::vector< bool > &bits)
 Set the Emergency Priority by a vector of bools.
 
void etsi_its_cam_ts_msgs::access::setItsPduHeader (CAM &cam, const uint32_t station_id, const uint8_t protocol_version=0)
 Set the ItsPduHeader-object for a CAM.
 
void etsi_its_cam_ts_msgs::access::setRefPosConfidence (CAM &cam, const std::array< double, 4 > &covariance_matrix, const double object_heading)
 Set the confidence of the reference position.
 
void etsi_its_cam_ts_msgs::access::setWGSRefPosConfidence (CAM &cam, const std::array< double, 4 > &covariance_matrix)
 Set the confidence of the reference position.
 

Detailed Description

Setter functions for the ETSI ITS CAM (TS)

Definition in file cam_ts_setters.h.

Function Documentation

◆ confidenceEllipseFromCovMatrix()

std::tuple< double, double, double > etsi_its_cam_ts_msgs::access::confidenceEllipseFromCovMatrix ( const std::array< double, 4 > & covariance_matrix,
const double object_heading )
inline

Gets the values needed to set a confidence ellipse from a covariance matrix.

Parameters
covariance_matrixThe four values of the covariance matrix in the order: cov_xx, cov_xy, cov_yx, cov_yy The matrix has to be SPD, otherwise a std::invalid_argument exception is thrown. Its coordinate system is aligned with the object (x = longitudinal, y = lateral)
object_headingThe heading of the object in rad, with respect to WGS84
Returns
std::tuple<double, double, double> semi_major_axis [m], semi_minor_axis [m], orientation [deg], with respect to WGS84

Definition at line 467 of file cam_ts_setters.h.

◆ confidenceEllipseFromWGSCovMatrix()

std::tuple< double, double, double > etsi_its_cam_ts_msgs::access::confidenceEllipseFromWGSCovMatrix ( const std::array< double, 4 > & covariance_matrix)
inline

Gets the values needed to set a confidence ellipse from a covariance matrix.

Parameters
covariance_matrixThe four values of the covariance matrix in the order: cov_xx, cov_xy, cov_yx, cov_yy The matrix has to be SPD, otherwise a std::invalid_argument exception is thrown. Its coordinate system is aligned with the WGS axes (x = North, y = East)
object_headingThe heading of the object in rad, with respect to WGS84
Returns
std::tuple<double, double, double> semi_major_axis [m], semi_minor_axis [m], orientation [deg], with respect to WGS84

Definition at line 508 of file cam_ts_setters.h.

541 {
542
544
546
554inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
555 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
556}
557
567inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
568 // First ensure, that the object has the correct heading by setting its value
569 double orientation = object_heading * 180 / M_PI; // Convert to degrees
570 // Normalize to [0, 360)
571 orientation = std::fmod(orientation + 360, 360);
572 while (orientation < 0) {
573 orientation += 360;
574 }
575 while (orientation >= 360) {
576 orientation -= 360;
577 }
578 setHeading(cam, orientation);
579 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
580 covariance_matrix, object_heading);
581}
582
591inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
592 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
593 covariance_matrix);
594}
595
596
597} // namespace etsi_its_cam_ts_msgs::access
Common setter functions for the ETSI ITS CAM (EN and TS)
void setWGSRefPosConfidence(CAM &cam, const std::array< double, 4 > &covariance_matrix)
Set the confidence of the reference position.
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 setHeading(CAM &cam, const double heading_val, const double confidence=std::numeric_limits< double >::infinity())
Set the Heading for a CAM.
void setWGSPositionConfidenceEllipse(PositionConfidenceEllipse &position_confidence_ellipse, const std::array< double, 4 > &covariance_matrix)
Set the Position Confidence Ellipse 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.
Setter functions for the ETSI ITS Common Data Dictionary (CDD) v2.1.1.

◆ getLeapSecondInsertionsSince2004()

uint16_t etsi_its_cam_ts_msgs::access::etsi_its_msgs::getLeapSecondInsertionsSince2004 ( const uint64_t unix_seconds)
inline

Get the leap second insertions since 2004 for given unix seconds.

Parameters
unix_secondsthe current unix seconds for that the leap second insertions since 2004 shall be provided
Returns
uint16_t the number of leap second insertions since 2004 for unix_seconds

Definition at line 61 of file cam_ts_access.h.

117 {
119}
Utility functions for the ETSI ITS CAM (EN and TS)

◆ setAccelerationConfidence()

template<typename AccelerationConfidence>
void etsi_its_cam_ts_msgs::access::setAccelerationConfidence ( AccelerationConfidence & accel_confidence,
const double value )
inline

Set the Acceleration Confidence object.

Parameters
accel_confidenceobject to set
valuestandard deviation in m/s^2 as decimal number

Definition at line 266 of file cam_ts_setters.h.

299 {
300
302
304
312inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
313 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
314}
315
325inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
326 // First ensure, that the object has the correct heading by setting its value
327 double orientation = object_heading * 180 / M_PI; // Convert to degrees
328 // Normalize to [0, 360)
329 orientation = std::fmod(orientation + 360, 360);
330 while (orientation < 0) {
331 orientation += 360;
332 }
333 while (orientation >= 360) {
334 orientation -= 360;
335 }
336 setHeading(cam, orientation);
337 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
338 covariance_matrix, object_heading);
339}
340
349inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
350 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
351 covariance_matrix);
352}
353
354
355} // namespace etsi_its_cam_ts_msgs::access

◆ setAccelerationControl()

void etsi_its_cam_ts_msgs::access::setAccelerationControl ( AccelerationControl & acceleration_control,
const std::vector< bool > & bits )
inline

Set the Acceleration Control by a vector of bools.

Parameters
acceleration_control
bits

Definition at line 307 of file cam_ts_setters.h.

340 {
341
343
345
353inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
354 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
355}
356
366inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
367 // First ensure, that the object has the correct heading by setting its value
368 double orientation = object_heading * 180 / M_PI; // Convert to degrees
369 // Normalize to [0, 360)
370 orientation = std::fmod(orientation + 360, 360);
371 while (orientation < 0) {
372 orientation += 360;
373 }
374 while (orientation >= 360) {
375 orientation -= 360;
376 }
377 setHeading(cam, orientation);
378 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
379 covariance_matrix, object_heading);
380}
381
390inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
391 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
392 covariance_matrix);
393}
394
395
396} // namespace etsi_its_cam_ts_msgs::access

◆ setAccelerationMagnitude()

template<typename AccelerationMagnitude>
void etsi_its_cam_ts_msgs::access::setAccelerationMagnitude ( AccelerationMagnitude & accel_mag,
const double value,
const double confidence = std::numeric_limits<double>::infinity() )
inline

Set the AccelerationMagnitude object.

AccelerationConfidence is set to UNAVAILABLE

Parameters
accel_magobject to set
valueAccelerationMagnitudeValue in m/s^2 as decimal number
confidencestandard deviation in m/s^2 as decimal number (default: infinity, mapping to AccelerationConfidence::UNAVAILABLE)

Definition at line 253 of file cam_ts_setters.h.

286 {
287
289
291
299inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
300 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
301}
302
312inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
313 // First ensure, that the object has the correct heading by setting its value
314 double orientation = object_heading * 180 / M_PI; // Convert to degrees
315 // Normalize to [0, 360)
316 orientation = std::fmod(orientation + 360, 360);
317 while (orientation < 0) {
318 orientation += 360;
319 }
320 while (orientation >= 360) {
321 orientation -= 360;
322 }
323 setHeading(cam, orientation);
324 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
325 covariance_matrix, object_heading);
326}
327
336inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
337 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
338 covariance_matrix);
339}
340
341
342} // namespace etsi_its_cam_ts_msgs::access

◆ setAccelerationMagnitudeConfidence()

template<typename AccelerationConfidence>
void etsi_its_cam_ts_msgs::access::setAccelerationMagnitudeConfidence ( AccelerationConfidence & accel_mag_confidence,
const double value )
inline

Set the AccelerationMagnitude Confidence object.

Parameters
accel_mag_confidenceobject to set
valuestandard deviation in m/s^2 as decimal number

Definition at line 233 of file cam_ts_setters.h.

266 {
267
269
271
279inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
280 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
281}
282
292inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
293 // First ensure, that the object has the correct heading by setting its value
294 double orientation = object_heading * 180 / M_PI; // Convert to degrees
295 // Normalize to [0, 360)
296 orientation = std::fmod(orientation + 360, 360);
297 while (orientation < 0) {
298 orientation += 360;
299 }
300 while (orientation >= 360) {
301 orientation -= 360;
302 }
303 setHeading(cam, orientation);
304 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
305 covariance_matrix, object_heading);
306}
307
316inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
317 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
318 covariance_matrix);
319}
320
321
322} // namespace etsi_its_cam_ts_msgs::access

◆ setAccelerationMagnitudeValue()

template<typename AccelerationMagnitudeValue>
void etsi_its_cam_ts_msgs::access::setAccelerationMagnitudeValue ( AccelerationMagnitudeValue & accel_mag_value,
const double value )
inline

Set the Acceleration Magnitude Value object.

Parameters
accel_mag_valueobject to set
valueAccelerationMagnitudeValue in m/s^2 as decimal number

Definition at line 220 of file cam_ts_setters.h.

253 {
254
256
258
266inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
267 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
268}
269
279inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
280 // First ensure, that the object has the correct heading by setting its value
281 double orientation = object_heading * 180 / M_PI; // Convert to degrees
282 // Normalize to [0, 360)
283 orientation = std::fmod(orientation + 360, 360);
284 while (orientation < 0) {
285 orientation += 360;
286 }
287 while (orientation >= 360) {
288 orientation -= 360;
289 }
290 setHeading(cam, orientation);
291 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
292 covariance_matrix, object_heading);
293}
294
303inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
304 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
305 covariance_matrix);
306}
307
308
309} // namespace etsi_its_cam_ts_msgs::access

◆ setAltitude()

void etsi_its_cam_ts_msgs::access::setAltitude ( Altitude & altitude,
const double value )
inline

Set the Altitude object.

AltitudeConfidence is set to UNAVAILABLE

Parameters
altitudeobject to set
valueAltitude value (above the reference ellipsoid surface) in meter as decimal number

Definition at line 166 of file cam_ts_setters.h.

199 {
200
202
204
212inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
213 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
214}
215
225inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
226 // First ensure, that the object has the correct heading by setting its value
227 double orientation = object_heading * 180 / M_PI; // Convert to degrees
228 // Normalize to [0, 360)
229 orientation = std::fmod(orientation + 360, 360);
230 while (orientation < 0) {
231 orientation += 360;
232 }
233 while (orientation >= 360) {
234 orientation -= 360;
235 }
236 setHeading(cam, orientation);
237 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
238 covariance_matrix, object_heading);
239}
240
249inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
250 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
251 covariance_matrix);
252}
253
254
255} // namespace etsi_its_cam_ts_msgs::access

◆ setAltitudeValue()

void etsi_its_cam_ts_msgs::access::setAltitudeValue ( AltitudeValue & altitude,
const double value )
inline

Set the AltitudeValue object.

Parameters
altitudeobject to set
valueAltitudeValue value (above the reference ellipsoid surface) in meter as decimal number

Definition at line 147 of file cam_ts_setters.h.

180 {
181
183
185
193inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
194 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
195}
196
206inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
207 // First ensure, that the object has the correct heading by setting its value
208 double orientation = object_heading * 180 / M_PI; // Convert to degrees
209 // Normalize to [0, 360)
210 orientation = std::fmod(orientation + 360, 360);
211 while (orientation < 0) {
212 orientation += 360;
213 }
214 while (orientation >= 360) {
215 orientation -= 360;
216 }
217 setHeading(cam, orientation);
218 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
219 covariance_matrix, object_heading);
220}
221
230inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
231 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
232 covariance_matrix);
233}
234
235
236} // namespace etsi_its_cam_ts_msgs::access

◆ setBitString()

template<typename T>
void etsi_its_cam_ts_msgs::access::setBitString ( T & bitstring,
const std::vector< bool > & bits )
inline

Set a Bit String by a vector of bools.

Template Parameters
T
Parameters
bitstringBitString to set
bitsvector of bools

Definition at line 44 of file cam_ts_setters.h.

47 {
48 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
49}
50
60inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
61 // First ensure, that the object has the correct heading by setting its value
62 double orientation = object_heading * 180 / M_PI; // Convert to degrees
63 // Normalize to [0, 360)
64 orientation = std::fmod(orientation + 360, 360);
65 while (orientation < 0) {
66 orientation += 360;
67 }
68 while (orientation >= 360) {
69 orientation -= 360;

◆ setDrivingLaneStatus()

void etsi_its_cam_ts_msgs::access::setDrivingLaneStatus ( DrivingLaneStatus & driving_lane_status,
const std::vector< bool > & bits )
inline

Set the Driving Lane Status by a vector of bools.

Parameters
driving_lane_status
bits

Definition at line 317 of file cam_ts_setters.h.

350 {
351
353
355
363inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
364 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
365}
366
376inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
377 // First ensure, that the object has the correct heading by setting its value
378 double orientation = object_heading * 180 / M_PI; // Convert to degrees
379 // Normalize to [0, 360)
380 orientation = std::fmod(orientation + 360, 360);
381 while (orientation < 0) {
382 orientation += 360;
383 }
384 while (orientation >= 360) {
385 orientation -= 360;
386 }
387 setHeading(cam, orientation);
388 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
389 covariance_matrix, object_heading);
390}
391
400inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
401 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
402 covariance_matrix);
403}
404
405
406} // namespace etsi_its_cam_ts_msgs::access

◆ setEmergencyPriority()

void etsi_its_cam_ts_msgs::access::setEmergencyPriority ( EmergencyPriority & emergency_priority,
const std::vector< bool > & bits )
inline

Set the Emergency Priority by a vector of bools.

Parameters
emergency_priority
bits

Definition at line 347 of file cam_ts_setters.h.

380 {
381
383
385
393inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
394 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
395}
396
406inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
407 // First ensure, that the object has the correct heading by setting its value
408 double orientation = object_heading * 180 / M_PI; // Convert to degrees
409 // Normalize to [0, 360)
410 orientation = std::fmod(orientation + 360, 360);
411 while (orientation < 0) {
412 orientation += 360;
413 }
414 while (orientation >= 360) {
415 orientation -= 360;
416 }
417 setHeading(cam, orientation);
418 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
419 covariance_matrix, object_heading);
420}
421
430inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
431 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
432 covariance_matrix);
433}
434
435
436} // namespace etsi_its_cam_ts_msgs::access

◆ setExteriorLights() [1/2]

void etsi_its_cam_ts_msgs::access::setExteriorLights ( CAM & cam,
const std::vector< bool > & exterior_lights )
inline

Set the Exterior Lights by using a vector of bools.

Parameters
camCAM to set the exterior lights
exterior_lightsvector of bools to set the exterior lights

Definition at line 282 of file cam_ts_setters.h.

315 {
316
318
320
328inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
329 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
330}
331
341inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
342 // First ensure, that the object has the correct heading by setting its value
343 double orientation = object_heading * 180 / M_PI; // Convert to degrees
344 // Normalize to [0, 360)
345 orientation = std::fmod(orientation + 360, 360);
346 while (orientation < 0) {
347 orientation += 360;
348 }
349 while (orientation >= 360) {
350 orientation -= 360;
351 }
352 setHeading(cam, orientation);
353 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
354 covariance_matrix, object_heading);
355}
356
365inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
366 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
367 covariance_matrix);
368}
369
370
371} // namespace etsi_its_cam_ts_msgs::access

◆ setExteriorLights() [2/2]

void etsi_its_cam_ts_msgs::access::setExteriorLights ( ExteriorLights & exterior_lights,
const std::vector< bool > & bits )
inline

Set the Exterior Lights by a vector of bools.

Parameters
exterior_lights
bits

Definition at line 272 of file cam_ts_setters.h.

305 {
306
308
310
318inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
319 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
320}
321
331inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
332 // First ensure, that the object has the correct heading by setting its value
333 double orientation = object_heading * 180 / M_PI; // Convert to degrees
334 // Normalize to [0, 360)
335 orientation = std::fmod(orientation + 360, 360);
336 while (orientation < 0) {
337 orientation += 360;
338 }
339 while (orientation >= 360) {
340 orientation -= 360;
341 }
342 setHeading(cam, orientation);
343 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
344 covariance_matrix, object_heading);
345}
346
355inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
356 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
357 covariance_matrix);
358}
359
360
361} // namespace etsi_its_cam_ts_msgs::access

◆ setFromUTMPosition() [1/2]

void etsi_its_cam_ts_msgs::access::setFromUTMPosition ( CAM & cam,
const gm::PointStamped & utm_position,
const int & zone,
const bool & northp )
inline

Set the ReferencePosition of a CAM from a given UTM-Position.

The position is transformed to latitude and longitude by using GeographicLib::UTMUPS The z-Coordinate is directly used as altitude value The frame_id of the given utm_position must be set to 'utm_<zone><N/S>'

Parameters
[out]camCAM for which to set the ReferencePosition
[in]utm_positiongeometry_msgs::PointStamped describing the given utm position
[in]zonethe UTM zone (zero means UPS) of the given position
[in]northphemisphere (true means north, false means south)

Definition at line 262 of file cam_ts_setters.h.

295 {
296
298
300
308inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
309 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
310}
311
321inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
322 // First ensure, that the object has the correct heading by setting its value
323 double orientation = object_heading * 180 / M_PI; // Convert to degrees
324 // Normalize to [0, 360)
325 orientation = std::fmod(orientation + 360, 360);
326 while (orientation < 0) {
327 orientation += 360;
328 }
329 while (orientation >= 360) {
330 orientation -= 360;
331 }
332 setHeading(cam, orientation);
333 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
334 covariance_matrix, object_heading);
335}
336
345inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
346 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
347 covariance_matrix);
348}
349
350
351} // namespace etsi_its_cam_ts_msgs::access

◆ setFromUTMPosition() [2/2]

template<typename T>
void etsi_its_cam_ts_msgs::access::setFromUTMPosition ( T & reference_position,
const gm::PointStamped & utm_position,
const int zone,
const bool northp )
inline

Set the ReferencePosition from a given UTM-Position.

The position is transformed to latitude and longitude by using GeographicLib::UTMUPS The z-Coordinate is directly used as altitude value The frame_id of the given utm_position must be set to 'utm_<zone><N/S>'

Parameters
[out]reference_positionReferencePostion or ReferencePositionWithConfidence to set
[in]utm_positiongeometry_msgs::PointStamped describing the given utm position
[in]zonethe UTM zone (zero means UPS) of the given position
[in]northphemisphere (true means north, false means south)

Definition at line 314 of file cam_ts_setters.h.

347 {
348
350
352
360inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
361 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
362}
363
373inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
374 // First ensure, that the object has the correct heading by setting its value
375 double orientation = object_heading * 180 / M_PI; // Convert to degrees
376 // Normalize to [0, 360)
377 orientation = std::fmod(orientation + 360, 360);
378 while (orientation < 0) {
379 orientation += 360;
380 }
381 while (orientation >= 360) {
382 orientation -= 360;
383 }
384 setHeading(cam, orientation);
385 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
386 covariance_matrix, object_heading);
387}
388
397inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
398 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
399 covariance_matrix);
400}
401
402
403} // namespace etsi_its_cam_ts_msgs::access

◆ setGenerationDeltaTime() [1/2]

void etsi_its_cam_ts_msgs::access::setGenerationDeltaTime ( CAM & cam,
const uint64_t unix_nanosecs,
const uint16_t n_leap_seconds = etsi_its_msgs::LEAP_SECOND_INSERTIONS_SINCE_2004.rbegin()->second )
inline

Set the Generation Delta Time object.

Parameters
camCAM to set the GenerationDeltaTime-Value for
unix_nanosecsTimestamp in unix-nanoseconds to set the GenerationDeltaTime-Value from
n_leap_secondsNumber of leap seconds since 2004 for the given timestamp (Defaults to the todays number of leap seconds since 2004.)

Definition at line 97 of file cam_ts_setters.h.

130 {
131
133
135
143inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
144 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
145}
146
156inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
157 // First ensure, that the object has the correct heading by setting its value
158 double orientation = object_heading * 180 / M_PI; // Convert to degrees
159 // Normalize to [0, 360)
160 orientation = std::fmod(orientation + 360, 360);
161 while (orientation < 0) {
162 orientation += 360;
163 }
164 while (orientation >= 360) {
165 orientation -= 360;
166 }
167 setHeading(cam, orientation);
168 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
169 covariance_matrix, object_heading);
170}
171
180inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
181 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
182 covariance_matrix);
183}
184
185
186} // namespace etsi_its_cam_ts_msgs::access

◆ setGenerationDeltaTime() [2/2]

void etsi_its_cam_ts_msgs::access::setGenerationDeltaTime ( GenerationDeltaTime & generation_delta_time,
const uint64_t unix_nanosecs,
const uint16_t n_leap_seconds = etsi_its_msgs::LEAP_SECOND_INSERTIONS_SINCE_2004.rbegin()->second )
inline

Set the GenerationDeltaTime-Value.

Parameters
generation_delta_timeGenerationDeltaTime to set the GenerationDeltaTime-Value for
unix_nanosecsTimestamp in unix-nanoseconds to set the GenerationDeltaTime-Value from
n_leap_secondsNumber of leap seconds since 2004 for the given timestamp (Defaults to the todays number of leap seconds since 2004.)

Definition at line 80 of file cam_ts_setters.h.

80 : cov_xx, cov_xy, cov_yx, cov_yy
81 * The matrix has to be SPD, otherwise a std::invalid_argument exception is thrown.
82 * Its coordinate system is WGS84 (x = North, y = East)
83 */
84inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
85 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
86 covariance_matrix);
87}
88

◆ setHeading()

void etsi_its_cam_ts_msgs::access::setHeading ( CAM & cam,
const double heading_val,
const double confidence = std::numeric_limits<double>::infinity() )
inline

Set the Heading for a CAM.

0.0° equals WGS84 North, 90.0° equals WGS84 East, 180.0° equals WGS84 South and 270.0° equals WGS84 West HeadingConfidence is set to UNAVAILABLE

Parameters
camCAM to set the ReferencePosition
valueHeading value in degree as decimal number
confidencestandard deviation of heading in degree as decimal number (default: infinity, mapping to HeadingConfidence::UNAVAILABLE)

Definition at line 123 of file cam_ts_setters.h.

156 {
157
159
161
169inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
170 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
171}
172
182inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
183 // First ensure, that the object has the correct heading by setting its value
184 double orientation = object_heading * 180 / M_PI; // Convert to degrees
185 // Normalize to [0, 360)
186 orientation = std::fmod(orientation + 360, 360);
187 while (orientation < 0) {
188 orientation += 360;
189 }
190 while (orientation >= 360) {
191 orientation -= 360;
192 }
193 setHeading(cam, orientation);
194 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
195 covariance_matrix, object_heading);
196}
197
206inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
207 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
208 covariance_matrix);
209}
210
211
212} // namespace etsi_its_cam_ts_msgs::access

◆ setHeadingCDD()

template<typename Heading, typename HeadingConfidence = decltype(Heading::heading_confidence)>
void etsi_its_cam_ts_msgs::access::setHeadingCDD ( Heading & heading,
const double value,
double confidence = std::numeric_limits<double>::infinity() )

Set the Heading object.

0.0° equals WGS84 North, 90.0° equals WGS84 East, 180.0° equals WGS84 South and 270.0° equals WGS84 West HeadingConfidence is set to UNAVAILABLE

Parameters
headingobject to set
valueHeading value in degree as decimal number
confidencestandard deviation of heading in degree as decimal number (default: infinity, mapping to HeadingConfidence::UNAVAILABLE)

Definition at line 373 of file cam_ts_setters.h.

406 {
407
409
411
419inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
420 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
421}
422
432inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
433 // First ensure, that the object has the correct heading by setting its value
434 double orientation = object_heading * 180 / M_PI; // Convert to degrees
435 // Normalize to [0, 360)
436 orientation = std::fmod(orientation + 360, 360);
437 while (orientation < 0) {
438 orientation += 360;
439 }
440 while (orientation >= 360) {
441 orientation -= 360;
442 }
443 setHeading(cam, orientation);
444 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
445 covariance_matrix, object_heading);
446}
447
456inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
457 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
458 covariance_matrix);
459}
460
461
462} // namespace etsi_its_cam_ts_msgs::access

◆ setHeadingConfidence()

template<typename HeadingConfidence>
void etsi_its_cam_ts_msgs::access::setHeadingConfidence ( HeadingConfidence & heading_confidence,
const double value )
inline

Set the Heading Confidence object.

Parameters
heading_confidenceobject to set
valuestandard deviation of heading in degree as decimal number

Definition at line 352 of file cam_ts_setters.h.

385 {
386
388
390
398inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
399 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
400}
401
411inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
412 // First ensure, that the object has the correct heading by setting its value
413 double orientation = object_heading * 180 / M_PI; // Convert to degrees
414 // Normalize to [0, 360)
415 orientation = std::fmod(orientation + 360, 360);
416 while (orientation < 0) {
417 orientation += 360;
418 }
419 while (orientation >= 360) {
420 orientation -= 360;
421 }
422 setHeading(cam, orientation);
423 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
424 covariance_matrix, object_heading);
425}
426
435inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
436 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
437 covariance_matrix);
438}
439
440
441} // namespace etsi_its_cam_ts_msgs::access

◆ setHeadingValue()

template<typename HeadingValue>
void etsi_its_cam_ts_msgs::access::setHeadingValue ( HeadingValue & heading,
const double value )
inline

Set the HeadingValue object.

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

Parameters
headingobject to set
valueHeading value in degree as decimal number

Definition at line 339 of file cam_ts_setters.h.

372 {
373
375
377
385inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
386 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
387}
388
398inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
399 // First ensure, that the object has the correct heading by setting its value
400 double orientation = object_heading * 180 / M_PI; // Convert to degrees
401 // Normalize to [0, 360)
402 orientation = std::fmod(orientation + 360, 360);
403 while (orientation < 0) {
404 orientation += 360;
405 }
406 while (orientation >= 360) {
407 orientation -= 360;
408 }
409 setHeading(cam, orientation);
410 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
411 covariance_matrix, object_heading);
412}
413
422inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
423 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
424 covariance_matrix);
425}
426
427
428} // namespace etsi_its_cam_ts_msgs::access

◆ setItsPduHeader() [1/2]

void etsi_its_cam_ts_msgs::access::setItsPduHeader ( CAM & cam,
const uint32_t station_id,
const uint8_t protocol_version = 0 )
inline

Set the ItsPduHeader-object for a CAM.

Parameters
camCAM-Message to set the ItsPduHeader
station_id
protocol_version

Definition at line 360 of file cam_ts_setters.h.

393 {
394
396
398
406inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
407 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
408}
409
419inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
420 // First ensure, that the object has the correct heading by setting its value
421 double orientation = object_heading * 180 / M_PI; // Convert to degrees
422 // Normalize to [0, 360)
423 orientation = std::fmod(orientation + 360, 360);
424 while (orientation < 0) {
425 orientation += 360;
426 }
427 while (orientation >= 360) {
428 orientation -= 360;
429 }
430 setHeading(cam, orientation);
431 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
432 covariance_matrix, object_heading);
433}
434
443inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
444 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
445 covariance_matrix);
446}
447
448
449} // namespace etsi_its_cam_ts_msgs::access

◆ setItsPduHeader() [2/2]

void etsi_its_cam_ts_msgs::access::setItsPduHeader ( ItsPduHeader & header,
const uint8_t message_id,
const uint32_t station_id,
const uint8_t protocol_version = 0 )
inline

Set the Its Pdu Header object.

Parameters
headerItsPduHeader to be set
message_idID of the message
station_id
protocol_version

Definition at line 85 of file cam_ts_setters.h.

◆ setLateralAcceleration() [1/2]

void etsi_its_cam_ts_msgs::access::setLateralAcceleration ( AccelerationComponent & accel,
const double value,
const double confidence )
inline

Set the LateralAcceleration object.

AccelerationConfidence is set to UNAVAILABLE

Parameters
accelobject to set
valueLaterallAccelerationValue in m/s^2 as decimal number (left is positive)

Definition at line 160 of file cam_ts_setters.h.

193 {
194
196
198
206inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
207 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
208}
209
219inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
220 // First ensure, that the object has the correct heading by setting its value
221 double orientation = object_heading * 180 / M_PI; // Convert to degrees
222 // Normalize to [0, 360)
223 orientation = std::fmod(orientation + 360, 360);
224 while (orientation < 0) {
225 orientation += 360;
226 }
227 while (orientation >= 360) {
228 orientation -= 360;
229 }
230 setHeading(cam, orientation);
231 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
232 covariance_matrix, object_heading);
233}
234
243inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
244 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
245 covariance_matrix);
246}
247
248
249} // namespace etsi_its_cam_ts_msgs::access

◆ setLateralAcceleration() [2/2]

void etsi_its_cam_ts_msgs::access::setLateralAcceleration ( CAM & cam,
const double lat_accel,
const double confidence = std::numeric_limits<double>::infinity() )
inline

Set the lateral acceleration.

Parameters
camCAM to set the acceleration value s
lat_accellateral acceleration to set in m/s^2 as decimal number (left is positiv), if not available use 16.1 m/s^2
confidencestandard deviation of the lateral acceleration in m/s^2 as decimal number Default is infinity, mapping to AccelerationConfidence::UNAVAILABLE

Definition at line 226 of file cam_ts_setters.h.

259 {
260
262
264
272inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
273 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
274}
275
285inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
286 // First ensure, that the object has the correct heading by setting its value
287 double orientation = object_heading * 180 / M_PI; // Convert to degrees
288 // Normalize to [0, 360)
289 orientation = std::fmod(orientation + 360, 360);
290 while (orientation < 0) {
291 orientation += 360;
292 }
293 while (orientation >= 360) {
294 orientation -= 360;
295 }
296 setHeading(cam, orientation);
297 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
298 covariance_matrix, object_heading);
299}
300
309inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
310 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
311 covariance_matrix);
312}
313
314
315} // namespace etsi_its_cam_ts_msgs::access

◆ setLateralAccelerationValue()

void etsi_its_cam_ts_msgs::access::setLateralAccelerationValue ( AccelerationValue & accel,
const double value )
inline

Set the LateralAccelerationValue object.

Parameters
accelobject to set
valueLateralAccelerationValue in m/s^2 as decimal number (left is positive)

Definition at line 141 of file cam_ts_setters.h.

174 {
175
177
179
187inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
188 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
189}
190
200inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
201 // First ensure, that the object has the correct heading by setting its value
202 double orientation = object_heading * 180 / M_PI; // Convert to degrees
203 // Normalize to [0, 360)
204 orientation = std::fmod(orientation + 360, 360);
205 while (orientation < 0) {
206 orientation += 360;
207 }
208 while (orientation >= 360) {
209 orientation -= 360;
210 }
211 setHeading(cam, orientation);
212 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
213 covariance_matrix, object_heading);
214}
215
224inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
225 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
226 covariance_matrix);
227}
228
229
230} // namespace etsi_its_cam_ts_msgs::access

◆ setLatitude()

void etsi_its_cam_ts_msgs::access::setLatitude ( Latitude & latitude,
const double deg )
inline

Set the Latitude object.

Parameters
latitudeobject to set
degLatitude value in degree as decimal number

Definition at line 123 of file cam_ts_setters.h.

156 {
157
159
161
169inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
170 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
171}
172
182inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
183 // First ensure, that the object has the correct heading by setting its value
184 double orientation = object_heading * 180 / M_PI; // Convert to degrees
185 // Normalize to [0, 360)
186 orientation = std::fmod(orientation + 360, 360);
187 while (orientation < 0) {
188 orientation += 360;
189 }
190 while (orientation >= 360) {
191 orientation -= 360;
192 }
193 setHeading(cam, orientation);
194 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
195 covariance_matrix, object_heading);
196}
197
206inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
207 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
208 covariance_matrix);
209}
210
211
212} // namespace etsi_its_cam_ts_msgs::access

◆ setLightBarSirenInUse()

void etsi_its_cam_ts_msgs::access::setLightBarSirenInUse ( LightBarSirenInUse & light_bar_siren_in_use,
const std::vector< bool > & bits )
inline

Set the Lightbar Siren In Use by a vector of bools.

Parameters
light_bar_siren_in_use
bits

Definition at line 337 of file cam_ts_setters.h.

370 {
371
373
375
383inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
384 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
385}
386
396inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
397 // First ensure, that the object has the correct heading by setting its value
398 double orientation = object_heading * 180 / M_PI; // Convert to degrees
399 // Normalize to [0, 360)
400 orientation = std::fmod(orientation + 360, 360);
401 while (orientation < 0) {
402 orientation += 360;
403 }
404 while (orientation >= 360) {
405 orientation -= 360;
406 }
407 setHeading(cam, orientation);
408 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
409 covariance_matrix, object_heading);
410}
411
420inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
421 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
422 covariance_matrix);
423}
424
425
426} // namespace etsi_its_cam_ts_msgs::access

◆ setLongitude()

void etsi_its_cam_ts_msgs::access::setLongitude ( Longitude & longitude,
const double deg )
inline

Set the Longitude object.

Parameters
longitudeobject to set
degLongitude value in degree as decimal number

Definition at line 135 of file cam_ts_setters.h.

168 {
169
171
173
181inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
182 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
183}
184
194inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
195 // First ensure, that the object has the correct heading by setting its value
196 double orientation = object_heading * 180 / M_PI; // Convert to degrees
197 // Normalize to [0, 360)
198 orientation = std::fmod(orientation + 360, 360);
199 while (orientation < 0) {
200 orientation += 360;
201 }
202 while (orientation >= 360) {
203 orientation -= 360;
204 }
205 setHeading(cam, orientation);
206 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
207 covariance_matrix, object_heading);
208}
209
218inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
219 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
220 covariance_matrix);
221}
222
223
224} // namespace etsi_its_cam_ts_msgs::access

◆ setLongitudinalAcceleration() [1/2]

void etsi_its_cam_ts_msgs::access::setLongitudinalAcceleration ( AccelerationComponent & accel,
const double value,
const double confidence )
inline

Set the LongitudinalAcceleration object.

AccelerationConfidence is set to UNAVAILABLE

Parameters
accelobject to set
valueLongitudinalAccelerationValue in m/s^2 as decimal number (braking is negative)

Definition at line 130 of file cam_ts_setters.h.

163 {
164
166
168
176inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
177 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
178}
179
189inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
190 // First ensure, that the object has the correct heading by setting its value
191 double orientation = object_heading * 180 / M_PI; // Convert to degrees
192 // Normalize to [0, 360)
193 orientation = std::fmod(orientation + 360, 360);
194 while (orientation < 0) {
195 orientation += 360;
196 }
197 while (orientation >= 360) {
198 orientation -= 360;
199 }
200 setHeading(cam, orientation);
201 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
202 covariance_matrix, object_heading);
203}
204
213inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
214 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
215 covariance_matrix);
216}
217
218
219} // namespace etsi_its_cam_ts_msgs::access

◆ setLongitudinalAcceleration() [2/2]

void etsi_its_cam_ts_msgs::access::setLongitudinalAcceleration ( CAM & cam,
const double lon_accel,
const double confidence = std::numeric_limits<double>::infinity() )
inline

Set the longitudinal acceleration.

Parameters
camCAM to set the acceleration value s
lon_accellongitudinal acceleration to set in m/s^2 as decimal number (braking is negative), if not available use 16.1 m/s^2
confidencestandard deviation of the longitudinal acceleration in m/s^2 as decimal number Default is infinity, mapping to AccelerationConfidence::UNAVAILABLE

Definition at line 212 of file cam_ts_setters.h.

245 {
246
248
250
258inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
259 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
260}
261
271inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
272 // First ensure, that the object has the correct heading by setting its value
273 double orientation = object_heading * 180 / M_PI; // Convert to degrees
274 // Normalize to [0, 360)
275 orientation = std::fmod(orientation + 360, 360);
276 while (orientation < 0) {
277 orientation += 360;
278 }
279 while (orientation >= 360) {
280 orientation -= 360;
281 }
282 setHeading(cam, orientation);
283 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
284 covariance_matrix, object_heading);
285}
286
295inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
296 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
297 covariance_matrix);
298}
299
300
301} // namespace etsi_its_cam_ts_msgs::access

◆ setLongitudinalAccelerationValue()

void etsi_its_cam_ts_msgs::access::setLongitudinalAccelerationValue ( AccelerationValue & accel,
const double value )
inline

Set the LongitudinalAccelerationValue object.

Parameters
accelobject to set
valueLongitudinalAccelerationValue in m/s^2 as decimal number (braking is negative)

Definition at line 111 of file cam_ts_setters.h.

144 {
145
147
149
157inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
158 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
159}
160
170inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
171 // First ensure, that the object has the correct heading by setting its value
172 double orientation = object_heading * 180 / M_PI; // Convert to degrees
173 // Normalize to [0, 360)
174 orientation = std::fmod(orientation + 360, 360);
175 while (orientation < 0) {
176 orientation += 360;
177 }
178 while (orientation >= 360) {
179 orientation -= 360;
180 }
181 setHeading(cam, orientation);
182 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
183 covariance_matrix, object_heading);
184}
185
194inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
195 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
196 covariance_matrix);
197}
198
199
200} // namespace etsi_its_cam_ts_msgs::access

◆ setPosConfidenceEllipse() [1/2]

template<typename PosConfidenceEllipse>
void etsi_its_cam_ts_msgs::access::setPosConfidenceEllipse ( PosConfidenceEllipse & position_confidence_ellipse,
const double semi_major_axis,
const double semi_minor_axis,
const double orientation )
inline

Set the Pos Confidence Ellipse object.

Parameters
[out]position_confidence_ellipseThe PosConfidenceEllipse to set
[in]semi_major_axislength of the semi-major axis in meters
[in]semi_minor_axislength of the semi-minor axis in meters
[in]orientationof the semi-major axis in degrees, with respect to WGS84

Definition at line 451 of file cam_ts_setters.h.

484 {
485
487
489
497inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
498 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
499}
500
510inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
511 // First ensure, that the object has the correct heading by setting its value
512 double orientation = object_heading * 180 / M_PI; // Convert to degrees
513 // Normalize to [0, 360)
514 orientation = std::fmod(orientation + 360, 360);
515 while (orientation < 0) {
516 orientation += 360;
517 }
518 while (orientation >= 360) {
519 orientation -= 360;
520 }
521 setHeading(cam, orientation);
522 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
523 covariance_matrix, object_heading);
524}
525
534inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
535 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
536 covariance_matrix);
537}
538
539
540} // namespace etsi_its_cam_ts_msgs::access

◆ setPosConfidenceEllipse() [2/2]

template<typename PosConfidenceEllipse>
void etsi_its_cam_ts_msgs::access::setPosConfidenceEllipse ( PosConfidenceEllipse & position_confidence_ellipse,
const std::array< double, 4 > & covariance_matrix,
const double object_heading )
inline

Set the Pos Confidence Ellipse object.

Parameters
position_confidence_ellipse
covariance_matrixThe four values of the covariance matrix in the order: cov_xx, cov_xy, cov_yx, cov_yy The matrix has to be SPD, otherwise a std::invalid_argument exception is thrown. Its coordinate system is aligned with the object (x = longitudinal, y = lateral)
object_headingThe heading of the object in rad, with respect to WGS84

Definition at line 524 of file cam_ts_setters.h.

557 {
558
560
562
570inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
571 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
572}
573
583inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
584 // First ensure, that the object has the correct heading by setting its value
585 double orientation = object_heading * 180 / M_PI; // Convert to degrees
586 // Normalize to [0, 360)
587 orientation = std::fmod(orientation + 360, 360);
588 while (orientation < 0) {
589 orientation += 360;
590 }
591 while (orientation >= 360) {
592 orientation -= 360;
593 }
594 setHeading(cam, orientation);
595 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
596 covariance_matrix, object_heading);
597}
598
607inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
608 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
609 covariance_matrix);
610}
611
612
613} // namespace etsi_its_cam_ts_msgs::access

◆ setPositionConfidenceEllipse() [1/2]

template<typename PositionConfidenceEllipse, typename Wgs84AngleValue = decltype(PositionConfidenceEllipse::semi_major_axis_orientation)>
void etsi_its_cam_ts_msgs::access::setPositionConfidenceEllipse ( PositionConfidenceEllipse & position_confidence_ellipse,
const double semi_major_axis,
const double semi_minor_axis,
const double orientation )
inline

Set the Position Confidence Ellipse object.

Parameters
position_confidence_ellipseThe position confidence ellipse to set
semi_major_axisThe length of the semi-major axis in meters
semi_minor_axisThe length of the semi-minor axis in meters
orientationThe orientation of the semi-major axis in degrees, relative to WGS84

Definition at line 174 of file cam_ts_setters.h.

207 {
208
210
212
220inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
221 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
222}
223
233inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
234 // First ensure, that the object has the correct heading by setting its value
235 double orientation = object_heading * 180 / M_PI; // Convert to degrees
236 // Normalize to [0, 360)
237 orientation = std::fmod(orientation + 360, 360);
238 while (orientation < 0) {
239 orientation += 360;
240 }
241 while (orientation >= 360) {
242 orientation -= 360;
243 }
244 setHeading(cam, orientation);
245 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
246 covariance_matrix, object_heading);
247}
248
257inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
258 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
259 covariance_matrix);
260}
261
262
263} // namespace etsi_its_cam_ts_msgs::access

◆ setPositionConfidenceEllipse() [2/2]

template<typename PositionConfidenceEllipse>
void etsi_its_cam_ts_msgs::access::setPositionConfidenceEllipse ( PositionConfidenceEllipse & position_confidence_ellipse,
const std::array< double, 4 > & covariance_matrix,
const double object_heading )
inline

Set the Position Confidence Ellipse object.

Parameters
position_confidence_ellipse
covariance_matrixThe four values of the covariance matrix in the order: cov_xx, cov_xy, cov_yx, cov_yy The matrix has to be SPD, otherwise a std::invalid_argument exception is thrown. Its coordinate system is aligned with the object (x = longitudinal, y = lateral)
object_headingThe heading of the object in rad, with respect to WGS84

Definition at line 191 of file cam_ts_setters.h.

224 {
225
227
229
237inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
238 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
239}
240
250inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
251 // First ensure, that the object has the correct heading by setting its value
252 double orientation = object_heading * 180 / M_PI; // Convert to degrees
253 // Normalize to [0, 360)
254 orientation = std::fmod(orientation + 360, 360);
255 while (orientation < 0) {
256 orientation += 360;
257 }
258 while (orientation >= 360) {
259 orientation -= 360;
260 }
261 setHeading(cam, orientation);
262 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
263 covariance_matrix, object_heading);
264}
265
274inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
275 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
276 covariance_matrix);
277}
278
279
280} // namespace etsi_its_cam_ts_msgs::access

◆ setReferencePosition() [1/2]

void etsi_its_cam_ts_msgs::access::setReferencePosition ( CAM & cam,
const double latitude,
const double longitude,
const double altitude = AltitudeValue::UNAVAILABLE )
inline

Set the ReferencePosition for a CAM.

This function sets the latitude, longitude, and altitude of the CAMs reference position. If the altitude is not provided, it is set to AltitudeValue::UNAVAILABLE.

Parameters
camCAM to set the ReferencePosition
latitudeThe latitude value position in degree as decimal number.
longitudeThe longitude value in degree as decimal number.
altitudeThe altitude value (above the reference ellipsoid surface) in meter as decimal number (optional).

Definition at line 245 of file cam_ts_setters.h.

278 {
279
281
283
291inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
292 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
293}
294
304inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
305 // First ensure, that the object has the correct heading by setting its value
306 double orientation = object_heading * 180 / M_PI; // Convert to degrees
307 // Normalize to [0, 360)
308 orientation = std::fmod(orientation + 360, 360);
309 while (orientation < 0) {
310 orientation += 360;
311 }
312 while (orientation >= 360) {
313 orientation -= 360;
314 }
315 setHeading(cam, orientation);
316 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
317 covariance_matrix, object_heading);
318}
319
328inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
329 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
330 covariance_matrix);
331}
332
333
334} // namespace etsi_its_cam_ts_msgs::access

◆ setReferencePosition() [2/2]

template<typename T>
void etsi_its_cam_ts_msgs::access::setReferencePosition ( T & ref_position,
const double latitude,
const double longitude,
const double altitude = AltitudeValue::UNAVAILABLE )
inline

Sets the reference position in the given ReferencePostion object.

This function sets the latitude, longitude, and altitude of the reference position. If the altitude is not provided, it is set to AltitudeValue::UNAVAILABLE.

Parameters
ref_positionReferencePostion or ReferencePositionWithConfidence object to set the reference position in.
latitudeThe latitude value position in degree as decimal number.
longitudeThe longitude value in degree as decimal number.
altitudeThe altitude value (above the reference ellipsoid surface) in meter as decimal number (optional).

Definition at line 288 of file cam_ts_setters.h.

321 {
322
324
326
334inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
335 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
336}
337
347inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
348 // First ensure, that the object has the correct heading by setting its value
349 double orientation = object_heading * 180 / M_PI; // Convert to degrees
350 // Normalize to [0, 360)
351 orientation = std::fmod(orientation + 360, 360);
352 while (orientation < 0) {
353 orientation += 360;
354 }
355 while (orientation >= 360) {
356 orientation -= 360;
357 }
358 setHeading(cam, orientation);
359 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
360 covariance_matrix, object_heading);
361}
362
371inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
372 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
373 covariance_matrix);
374}
375
376
377} // namespace etsi_its_cam_ts_msgs::access

◆ setRefPosConfidence()

void etsi_its_cam_ts_msgs::access::setRefPosConfidence ( CAM & cam,
const std::array< double, 4 > & covariance_matrix,
const double object_heading )
inline

Set the confidence of the reference position.

Parameters
camCAM-Message to set the confidence
covariance_matrixThe four values of the covariance matrix in the order: cov_xx, cov_xy, cov_yx, cov_yy The matrix has to be SPD, otherwise a std::invalid_argument exception is thrown. Its coordinate system is aligned with the object (x = longitudinal, y = lateral)
object_headingheading of the object in rad, with respect to WGS84

Definition at line 373 of file cam_ts_setters.h.

406 {
407
409
411
419inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
420 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
421}
422
432inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
433 // First ensure, that the object has the correct heading by setting its value
434 double orientation = object_heading * 180 / M_PI; // Convert to degrees
435 // Normalize to [0, 360)
436 orientation = std::fmod(orientation + 360, 360);
437 while (orientation < 0) {
438 orientation += 360;
439 }
440 while (orientation >= 360) {
441 orientation -= 360;
442 }
443 setHeading(cam, orientation);
444 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
445 covariance_matrix, object_heading);
446}
447
456inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
457 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
458 covariance_matrix);
459}
460
461
462} // namespace etsi_its_cam_ts_msgs::access

◆ setSemiAxis()

template<typename SemiAxisLength>
void etsi_its_cam_ts_msgs::access::setSemiAxis ( SemiAxisLength & semi_axis_length,
const double length )
inline

Set the Semi Axis length.

// See https://godbolt.org/z/Eceavfo99 on how the OneCentimeterHelper works with this template

Parameters
semi_axis_lengthThe SemiAxisLength to set
lengththe desired length in meters

Definition at line 432 of file cam_ts_setters.h.

465 {
466
468
470
478inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
479 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
480}
481
491inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
492 // First ensure, that the object has the correct heading by setting its value
493 double orientation = object_heading * 180 / M_PI; // Convert to degrees
494 // Normalize to [0, 360)
495 orientation = std::fmod(orientation + 360, 360);
496 while (orientation < 0) {
497 orientation += 360;
498 }
499 while (orientation >= 360) {
500 orientation -= 360;
501 }
502 setHeading(cam, orientation);
503 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
504 covariance_matrix, object_heading);
505}
506
515inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
516 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
517 covariance_matrix);
518}
519
520
521} // namespace etsi_its_cam_ts_msgs::access

◆ setSpecialTransportType()

void etsi_its_cam_ts_msgs::access::setSpecialTransportType ( SpecialTransportType & special_transport_type,
const std::vector< bool > & bits )
inline

Set the Special Transport Type by a vector of bools.

Parameters
special_transport_type
bits

Definition at line 327 of file cam_ts_setters.h.

360 {
361
363
365
373inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
374 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
375}
376
386inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
387 // First ensure, that the object has the correct heading by setting its value
388 double orientation = object_heading * 180 / M_PI; // Convert to degrees
389 // Normalize to [0, 360)
390 orientation = std::fmod(orientation + 360, 360);
391 while (orientation < 0) {
392 orientation += 360;
393 }
394 while (orientation >= 360) {
395 orientation -= 360;
396 }
397 setHeading(cam, orientation);
398 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
399 covariance_matrix, object_heading);
400}
401
410inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
411 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
412 covariance_matrix);
413}
414
415
416} // namespace etsi_its_cam_ts_msgs::access

◆ setSpeed() [1/2]

void etsi_its_cam_ts_msgs::access::setSpeed ( CAM & cam,
const double speed_val,
const double confidence = SpeedConfidence::UNAVAILABLE )
inline

Set the vehicle speed.

Parameters
camCAM to set the speed value
speed_valspeed value to set in m/s as decimal number

Definition at line 200 of file cam_ts_setters.h.

233 {
234
236
238
246inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
247 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
248}
249
259inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
260 // First ensure, that the object has the correct heading by setting its value
261 double orientation = object_heading * 180 / M_PI; // Convert to degrees
262 // Normalize to [0, 360)
263 orientation = std::fmod(orientation + 360, 360);
264 while (orientation < 0) {
265 orientation += 360;
266 }
267 while (orientation >= 360) {
268 orientation -= 360;
269 }
270 setHeading(cam, orientation);
271 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
272 covariance_matrix, object_heading);
273}
274
283inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
284 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
285 covariance_matrix);
286}
287
288
289} // namespace etsi_its_cam_ts_msgs::access

◆ setSpeed() [2/2]

void etsi_its_cam_ts_msgs::access::setSpeed ( Speed & speed,
const double value,
const double confidence = std::numeric_limits<double>::infinity() )
inline

Set the Speed object.

SpeedConfidence is set to UNAVAILABLE

Parameters
speedobject to set
valueSpeed in in m/s as decimal number
confidencestandard deviation in m/s as decimal number (Optional. Default is std::numeric_limits<double>::infinity(), mapping to SpeedConfidence::UNAVAILABLE)

Definition at line 208 of file cam_ts_setters.h.

241 {
242
244
246
254inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
255 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
256}
257
267inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
268 // First ensure, that the object has the correct heading by setting its value
269 double orientation = object_heading * 180 / M_PI; // Convert to degrees
270 // Normalize to [0, 360)
271 orientation = std::fmod(orientation + 360, 360);
272 while (orientation < 0) {
273 orientation += 360;
274 }
275 while (orientation >= 360) {
276 orientation -= 360;
277 }
278 setHeading(cam, orientation);
279 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
280 covariance_matrix, object_heading);
281}
282
291inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
292 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
293 covariance_matrix);
294}
295
296
297} // namespace etsi_its_cam_ts_msgs::access

◆ setSpeedConfidence()

void etsi_its_cam_ts_msgs::access::setSpeedConfidence ( SpeedConfidence & speed_confidence,
const double value )
inline

Set the Speed Confidence object.

Parameters
speed_confidenceobject to set
valuestandard deviation in m/s as decimal number

Definition at line 189 of file cam_ts_setters.h.

222 {
223
225
227
235inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
236 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
237}
238
248inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
249 // First ensure, that the object has the correct heading by setting its value
250 double orientation = object_heading * 180 / M_PI; // Convert to degrees
251 // Normalize to [0, 360)
252 orientation = std::fmod(orientation + 360, 360);
253 while (orientation < 0) {
254 orientation += 360;
255 }
256 while (orientation >= 360) {
257 orientation -= 360;
258 }
259 setHeading(cam, orientation);
260 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
261 covariance_matrix, object_heading);
262}
263
272inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
273 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
274 covariance_matrix);
275}
276
277
278} // namespace etsi_its_cam_ts_msgs::access

◆ setSpeedValue()

void etsi_its_cam_ts_msgs::access::setSpeedValue ( SpeedValue & speed,
const double value )
inline

Set the SpeedValue object.

Parameters
speedobject to set
valueSpeedValue in m/s as decimal number

Definition at line 177 of file cam_ts_setters.h.

210 {
211
213
215
223inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
224 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
225}
226
236inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
237 // First ensure, that the object has the correct heading by setting its value
238 double orientation = object_heading * 180 / M_PI; // Convert to degrees
239 // Normalize to [0, 360)
240 orientation = std::fmod(orientation + 360, 360);
241 while (orientation < 0) {
242 orientation += 360;
243 }
244 while (orientation >= 360) {
245 orientation -= 360;
246 }
247 setHeading(cam, orientation);
248 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
249 covariance_matrix, object_heading);
250}
251
260inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
261 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
262 covariance_matrix);
263}
264
265
266} // namespace etsi_its_cam_ts_msgs::access

◆ setStationId()

void etsi_its_cam_ts_msgs::access::setStationId ( StationId & station_id,
const uint32_t id_value )
inline

Set the Station Id object.

Parameters
station_id
id_value

Definition at line 72 of file cam_ts_setters.h.

◆ setStationType() [1/2]

void etsi_its_cam_ts_msgs::access::setStationType ( CAM & cam,
const uint8_t value )
inline

Set the StationType for a CAM.

Parameters
camCAM-Message to set the station_type value
valuestation_type value to set

Definition at line 109 of file cam_ts_setters.h.

142 {
143
145
147
155inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
156 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
157}
158
168inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
169 // First ensure, that the object has the correct heading by setting its value
170 double orientation = object_heading * 180 / M_PI; // Convert to degrees
171 // Normalize to [0, 360)
172 orientation = std::fmod(orientation + 360, 360);
173 while (orientation < 0) {
174 orientation += 360;
175 }
176 while (orientation >= 360) {
177 orientation -= 360;
178 }
179 setHeading(cam, orientation);
180 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
181 covariance_matrix, object_heading);
182}
183
192inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
193 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
194 covariance_matrix);
195}
196
197
198} // namespace etsi_its_cam_ts_msgs::access

◆ setStationType() [2/2]

void etsi_its_cam_ts_msgs::access::setStationType ( TrafficParticipantType & station_type,
const uint8_t value )
inline

Set the Station Type.

Parameters
station_type
value

Definition at line 100 of file cam_ts_setters.h.

133 {
134
136
138
146inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
147 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
148}
149
159inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
160 // First ensure, that the object has the correct heading by setting its value
161 double orientation = object_heading * 180 / M_PI; // Convert to degrees
162 // Normalize to [0, 360)
163 orientation = std::fmod(orientation + 360, 360);
164 while (orientation < 0) {
165 orientation += 360;
166 }
167 while (orientation >= 360) {
168 orientation -= 360;
169 }
170 setHeading(cam, orientation);
171 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
172 covariance_matrix, object_heading);
173}
174
183inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
184 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
185 covariance_matrix);
186}
187
188
189} // namespace etsi_its_cam_ts_msgs::access

◆ setTimestampITS()

void etsi_its_cam_ts_msgs::access::setTimestampITS ( TimestampIts & timestamp_its,
const uint64_t unix_nanosecs,
const uint16_t n_leap_seconds = etsi_its_msgs::LEAP_SECOND_INSERTIONS_SINCE_2004.rbegin()->second )
inline

Set the TimestampITS object.

Parameters
[in]timestamp_itsTimestampITS object to set the timestamp
[in]unix_nanosecsUnix-Nanoseconds to set the timestamp for
[in]n_leap_secondsNumber of leap-seconds since 2004. (Defaults to the todays number of leap seconds since 2004.)
[in]epoch_offsetUnix-Timestamp in seconds for the 01.01.2004 at 00:00:00

Definition at line 109 of file cam_ts_setters.h.

142 {
143
145
147
155inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
156 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
157}
158
168inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
169 // First ensure, that the object has the correct heading by setting its value
170 double orientation = object_heading * 180 / M_PI; // Convert to degrees
171 // Normalize to [0, 360)
172 orientation = std::fmod(orientation + 360, 360);
173 while (orientation < 0) {
174 orientation += 360;
175 }
176 while (orientation >= 360) {
177 orientation -= 360;
178 }
179 setHeading(cam, orientation);
180 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
181 covariance_matrix, object_heading);
182}
183
192inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
193 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
194 covariance_matrix);
195}
196
197
198} // namespace etsi_its_cam_ts_msgs::access

◆ setVehicleDimensions()

void etsi_its_cam_ts_msgs::access::setVehicleDimensions ( CAM & cam,
const double vehicle_length,
const double vehicle_width )
inline

Set the vehicle dimensions.

Parameters
camCAM to set the vehicle dimensions
vehicle_lengthvehicle length in meter as decimal number
vehicle_widthvehicle width in meter as decimal number

Definition at line 186 of file cam_ts_setters.h.

219 {
220
222
224
232inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
233 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
234}
235
245inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
246 // First ensure, that the object has the correct heading by setting its value
247 double orientation = object_heading * 180 / M_PI; // Convert to degrees
248 // Normalize to [0, 360)
249 orientation = std::fmod(orientation + 360, 360);
250 while (orientation < 0) {
251 orientation += 360;
252 }
253 while (orientation >= 360) {
254 orientation -= 360;
255 }
256 setHeading(cam, orientation);
257 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
258 covariance_matrix, object_heading);
259}
260
269inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
270 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
271 covariance_matrix);
272}
273
274
275} // namespace etsi_its_cam_ts_msgs::access

◆ setVehicleLength()

void etsi_its_cam_ts_msgs::access::setVehicleLength ( VehicleLength & vehicle_length,
const double value )
inline

Set the VehicleLength object.

VehicleLengthConfidenceIndication is set to UNAVAILABLE

Parameters
vehicle_lengthobject to set
valueVehicleLengthValue in meter as decimal number

Definition at line 174 of file cam_ts_setters.h.

207 {
208
210
212
220inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
221 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
222}
223
233inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
234 // First ensure, that the object has the correct heading by setting its value
235 double orientation = object_heading * 180 / M_PI; // Convert to degrees
236 // Normalize to [0, 360)
237 orientation = std::fmod(orientation + 360, 360);
238 while (orientation < 0) {
239 orientation += 360;
240 }
241 while (orientation >= 360) {
242 orientation -= 360;
243 }
244 setHeading(cam, orientation);
245 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
246 covariance_matrix, object_heading);
247}
248
257inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
258 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
259 covariance_matrix);
260}
261
262
263} // namespace etsi_its_cam_ts_msgs::access

◆ setVehicleLengthValue()

void etsi_its_cam_ts_msgs::access::setVehicleLengthValue ( VehicleLengthValue & vehicle_length,
const double value )
inline

Set the VehicleLengthValue object.

Parameters
vehicle_lengthobject to set
valueVehicleLengthValue in meter as decimal number

Definition at line 160 of file cam_ts_setters.h.

193 {
194
196
198
206inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
207 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
208}
209
219inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
220 // First ensure, that the object has the correct heading by setting its value
221 double orientation = object_heading * 180 / M_PI; // Convert to degrees
222 // Normalize to [0, 360)
223 orientation = std::fmod(orientation + 360, 360);
224 while (orientation < 0) {
225 orientation += 360;
226 }
227 while (orientation >= 360) {
228 orientation -= 360;
229 }
230 setHeading(cam, orientation);
231 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
232 covariance_matrix, object_heading);
233}
234
243inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
244 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
245 covariance_matrix);
246}
247
248
249} // namespace etsi_its_cam_ts_msgs::access

◆ setVehicleWidth()

void etsi_its_cam_ts_msgs::access::setVehicleWidth ( VehicleWidth & vehicle_width,
const double value )
inline

Set the VehicleWidth object.

Parameters
vehicle_widthobject to set
valueVehicleWidth in meter as decimal number

Definition at line 148 of file cam_ts_setters.h.

181 {
182
184
186
194inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
195 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
196}
197
207inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
208 // First ensure, that the object has the correct heading by setting its value
209 double orientation = object_heading * 180 / M_PI; // Convert to degrees
210 // Normalize to [0, 360)
211 orientation = std::fmod(orientation + 360, 360);
212 while (orientation < 0) {
213 orientation += 360;
214 }
215 while (orientation >= 360) {
216 orientation -= 360;
217 }
218 setHeading(cam, orientation);
219 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
220 covariance_matrix, object_heading);
221}
222
231inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
232 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
233 covariance_matrix);
234}
235
236
237} // namespace etsi_its_cam_ts_msgs::access

◆ setWGSPosConfidenceEllipse()

template<typename PosConfidenceEllipse>
void etsi_its_cam_ts_msgs::access::setWGSPosConfidenceEllipse ( PosConfidenceEllipse & position_confidence_ellipse,
const std::array< double, 4 > & covariance_matrix )
inline

Set the Pos Confidence Ellipse object.

Parameters
position_confidence_ellipse
covariance_matrixThe four values of the covariance matrix in the order: cov_xx, cov_xy, cov_yx, cov_yy The matrix has to be SPD, otherwise a std::invalid_argument exception is thrown. Its coordinate system is aligned with the WGS axes (x = North, y = East)
object_headingThe heading of the object in rad, with respect to WGS84

Definition at line 539 of file cam_ts_setters.h.

572 {
573
575
577
585inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
586 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
587}
588
598inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
599 // First ensure, that the object has the correct heading by setting its value
600 double orientation = object_heading * 180 / M_PI; // Convert to degrees
601 // Normalize to [0, 360)
602 orientation = std::fmod(orientation + 360, 360);
603 while (orientation < 0) {
604 orientation += 360;
605 }
606 while (orientation >= 360) {
607 orientation -= 360;
608 }
609 setHeading(cam, orientation);
610 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
611 covariance_matrix, object_heading);
612}
613
622inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
623 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
624 covariance_matrix);
625}
626
627
628} // namespace etsi_its_cam_ts_msgs::access

◆ setWGSPositionConfidenceEllipse()

template<typename PositionConfidenceEllipse>
void etsi_its_cam_ts_msgs::access::setWGSPositionConfidenceEllipse ( PositionConfidenceEllipse & position_confidence_ellipse,
const std::array< double, 4 > & covariance_matrix )
inline

Set the Position Confidence Ellipse object.

Parameters
position_confidence_ellipse
covariance_matrixThe four values of the covariance matrix in the order: cov_xx, cov_xy, cov_yx, cov_yy The matrix has to be SPD, otherwise a std::invalid_argument exception is thrown. Its coordinate system is aligned with the WGS axes (x = North, y = East)
object_headingThe heading of the object in rad, with respect to WGS84

Definition at line 206 of file cam_ts_setters.h.

239 {
240
242
244
252inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
253 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
254}
255
265inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
266 // First ensure, that the object has the correct heading by setting its value
267 double orientation = object_heading * 180 / M_PI; // Convert to degrees
268 // Normalize to [0, 360)
269 orientation = std::fmod(orientation + 360, 360);
270 while (orientation < 0) {
271 orientation += 360;
272 }
273 while (orientation >= 360) {
274 orientation -= 360;
275 }
276 setHeading(cam, orientation);
277 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
278 covariance_matrix, object_heading);
279}
280
289inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
290 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
291 covariance_matrix);
292}
293
294
295} // namespace etsi_its_cam_ts_msgs::access

◆ setWGSRefPosConfidence()

void etsi_its_cam_ts_msgs::access::setWGSRefPosConfidence ( CAM & cam,
const std::array< double, 4 > & covariance_matrix )
inline

Set the confidence of the reference position.

Parameters
camCAM-Message to set the confidence
covariance_matrixThe four values of the covariance matrix in the order: cov_xx, cov_xy, cov_yx, cov_yy The matrix has to be SPD, otherwise a std::invalid_argument exception is thrown. Its coordinate system is WGS84 (x = North, y = East)

Definition at line 397 of file cam_ts_setters.h.

430 {
431
433
435
443inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
444 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
445}
446
456inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
457 // First ensure, that the object has the correct heading by setting its value
458 double orientation = object_heading * 180 / M_PI; // Convert to degrees
459 // Normalize to [0, 360)
460 orientation = std::fmod(orientation + 360, 360);
461 while (orientation < 0) {
462 orientation += 360;
463 }
464 while (orientation >= 360) {
465 orientation -= 360;
466 }
467 setHeading(cam, orientation);
468 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
469 covariance_matrix, object_heading);
470}
471
480inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
481 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
482 covariance_matrix);
483}
484
485
486} // namespace etsi_its_cam_ts_msgs::access

◆ setYawRate()

void etsi_its_cam_ts_msgs::access::setYawRate ( CAM & cam,
const double yaw_rate_val,
const double confidence = std::numeric_limits<double>::infinity() )
inline

Set the Yaw Rate for a CAM.

Parameters
camCAM to set the YawRate
yaw_rate_valYaw rate value in degrees per second as decimal number
confidencestandard deviation of yaw rate in degrees per second as decimal number (default: infinity, mapping to YawRateConfidence::UNAVAILABLE)

Definition at line 136 of file cam_ts_setters.h.

169 {
170
172
174
182inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
183 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
184}
185
195inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
196 // First ensure, that the object has the correct heading by setting its value
197 double orientation = object_heading * 180 / M_PI; // Convert to degrees
198 // Normalize to [0, 360)
199 orientation = std::fmod(orientation + 360, 360);
200 while (orientation < 0) {
201 orientation += 360;
202 }
203 while (orientation >= 360) {
204 orientation -= 360;
205 }
206 setHeading(cam, orientation);
207 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
208 covariance_matrix, object_heading);
209}
210
219inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
220 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
221 covariance_matrix);
222}
223
224
225} // namespace etsi_its_cam_ts_msgs::access

◆ setYawRateCDD()

template<typename YawRate, typename YawRateValue = decltype(YawRate::yaw_rate_value), typename YawRateConfidence = decltype(YawRate::yaw_rate_confidence)>
void etsi_its_cam_ts_msgs::access::setYawRateCDD ( YawRate & yaw_rate,
const double value,
double confidence = std::numeric_limits<double>::infinity() )
inline

Set the Yaw Rate object.

Parameters
yaw_rateobject to set
valueYaw rate in degrees per second as decimal number
confidencestandard deviation of yaw rate in degrees per second as decimal number (default: infinity, mapping to YawRateConfidence::UNAVAILABLE)

Definition at line 386 of file cam_ts_setters.h.

419 {
420
422
424
432inline void setItsPduHeader(CAM& cam, const uint32_t station_id, const uint8_t protocol_version = 0) {
433 setItsPduHeader(cam.header, MessageId::CAM, station_id, protocol_version);
434}
435
445inline void setRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix, const double object_heading) {
446 // First ensure, that the object has the correct heading by setting its value
447 double orientation = object_heading * 180 / M_PI; // Convert to degrees
448 // Normalize to [0, 360)
449 orientation = std::fmod(orientation + 360, 360);
450 while (orientation < 0) {
451 orientation += 360;
452 }
453 while (orientation >= 360) {
454 orientation -= 360;
455 }
456 setHeading(cam, orientation);
457 setPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
458 covariance_matrix, object_heading);
459}
460
469inline void setWGSRefPosConfidence(CAM& cam, const std::array<double, 4>& covariance_matrix) {
470 setWGSPositionConfidenceEllipse(cam.cam.cam_parameters.basic_container.reference_position.position_confidence_ellipse,
471 covariance_matrix);
472}
473
474
475} // namespace etsi_its_cam_ts_msgs::access

◆ throwIfNotPresent()

void etsi_its_cam_ts_msgs::access::throwIfNotPresent ( const bool is_present,
const std::string val_desc )
inline

Throws an exception if the given value is not present.

Parameters
is_presentWhether the value is present.
val_descDescription of the value for the exception message.

Definition at line 58 of file cam_ts_access.h.

◆ throwIfOutOfRange()

template<typename T1, typename T2>
void etsi_its_cam_ts_msgs::access::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.

Template Parameters
T1
T2
Parameters
valThe value to check if it is in the range.
minThe minimum value of the range.
maxThe maximum value of the range.
val_descDescription of the value for the exception message.

Definition at line 47 of file cam_ts_access.h.