14namespace etsi_its_cpm_ts_msgs::access {
27inline void setItsPduHeader(CollectivePerceptionMessage& cpm,
const uint32_t station_id,
28 const uint8_t protocol_version = 0) {
29 setItsPduHeader(cpm.header, MessageId::CPM, station_id, protocol_version);
44 CollectivePerceptionMessage& cpm,
const uint64_t unix_nanosecs,
48 throwIfOutOfRange(t_its.value, TimestampIts::MIN, TimestampIts::MAX,
"TimestampIts");
49 cpm.payload.management_container.reference_time = t_its;
63inline void setReferencePosition(CollectivePerceptionMessage& cpm,
const double latitude,
const double longitude,
64 const double altitude = AltitudeValue::UNAVAILABLE) {
80inline void setFromUTMPosition(CollectivePerceptionMessage& cpm,
const gm::PointStamped& utm_position,
const int& zone,
82 setFromUTMPosition(cpm.payload.management_container.reference_position, utm_position, zone, northp);
94 object.object_id.value = id;
95 object.object_id_is_present =
true;
110 if (delta_time < DeltaTimeMilliSecondSigned::MIN || delta_time > DeltaTimeMilliSecondSigned::MAX) {
111 throw std::invalid_argument(
"MeasurementDeltaTime out of range");
113 object.measurement_delta_time.value = delta_time;
131 const double confidence = std::numeric_limits<double>::infinity()) {
133 if (value < CartesianCoordinateLarge::NEGATIVE_OUT_OF_RANGE) {
134 coordinate.value.value = CartesianCoordinateLarge::NEGATIVE_OUT_OF_RANGE;
135 }
else if (value > CartesianCoordinateLarge::POSITIVE_OUT_OF_RANGE) {
136 coordinate.value.value = CartesianCoordinateLarge::POSITIVE_OUT_OF_RANGE;
138 coordinate.value.value =
static_cast<int32_t
>(value);
142 if (confidence == std::numeric_limits<double>::infinity()) {
143 coordinate.confidence.value = CoordinateConfidence::UNAVAILABLE;
144 }
else if (confidence > CoordinateConfidence::MAX || confidence < CoordinateConfidence::MIN) {
145 coordinate.confidence.value = CoordinateConfidence::OUT_OF_RANGE;
147 coordinate.confidence.value =
static_cast<uint16_t
>(confidence);
163 const double x_std = std::numeric_limits<double>::infinity(),
164 const double y_std = std::numeric_limits<double>::infinity(),
165 const double z_std = std::numeric_limits<double>::infinity()) {
168 if (point.z != 0.0) {
170 object.position.z_coordinate_is_present =
true;
190 const gm::PointStamped& utm_position,
191 const double x_std = std::numeric_limits<double>::infinity(),
192 const double y_std = std::numeric_limits<double>::infinity(),
193 const double z_std = std::numeric_limits<double>::infinity()) {
195 if (utm_position.header.frame_id != reference_position.header.frame_id) {
196 throw std::invalid_argument(
"UTM-Position frame_id (" + utm_position.header.frame_id +
197 ") does not match the reference position frame_id (" + reference_position.header.frame_id +
200 setCartesianCoordinateWithConfidence(
object.position.x_coordinate,
201 (utm_position.point.x - reference_position.point.x) * 100, x_std * 100 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
202 setCartesianCoordinateWithConfidence(
object.position.y_coordinate,
203 (utm_position.point.y - reference_position.point.y) * 100, y_std * 100 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
204 if (utm_position.point.z != 0.0) {
205 setCartesianCoordinateWithConfidence(
object.position.z_coordinate,
206 (utm_position.point.z - reference_position.point.z) * 100, z_std * 100 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
207 object.position.z_coordinate_is_present =
true;
223 const double confidence = std::numeric_limits<double>::infinity()) {
225 if (value < VelocityComponentValue::NEGATIVE_OUT_OF_RANGE) {
226 velocity.value.value = VelocityComponentValue::NEGATIVE_OUT_OF_RANGE;
227 }
else if (value > VelocityComponentValue::POSITIVE_OUT_OF_RANGE) {
228 velocity.value.value = VelocityComponentValue::POSITIVE_OUT_OF_RANGE;
230 velocity.value.value =
static_cast<int16_t
>(value);
234 if(confidence == std::numeric_limits<double>::infinity()) {
235 velocity.confidence.value = SpeedConfidence::UNAVAILABLE;
236 }
else if (confidence > SpeedConfidence::MAX || confidence < SpeedConfidence::MIN) {
237 velocity.confidence.value = SpeedConfidence::OUT_OF_RANGE;
239 velocity.confidence.value =
static_cast<uint8_t
>(confidence);
251 double confidence = std::numeric_limits<double>::infinity()) {
253 double wrapped_value = fmod(value, 2*M_PI);
254 if (wrapped_value < 0.0) {
255 wrapped_value += 2 * M_PI;
257 angle.value.value =
static_cast<uint16_t
>(wrapped_value * 180 / M_PI * 10);
259 confidence *= 180.0 / M_PI * 10.0 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR;
261 if(confidence == std::numeric_limits<double>::infinity() || confidence <= 0.0) {
262 angle.confidence.value = AngleConfidence::UNAVAILABLE;
263 }
else if (confidence > AngleConfidence::MAX || confidence < AngleConfidence::MIN) {
264 angle.confidence.value = AngleConfidence::OUT_OF_RANGE;
266 angle.confidence.value =
static_cast<uint8_t
>(confidence);
283 const double x_std = std::numeric_limits<double>::infinity(),
284 const double y_std = std::numeric_limits<double>::infinity(),
285 const double z_std = std::numeric_limits<double>::infinity()) {
286 object.velocity.choice = Velocity3dWithConfidence::CHOICE_CARTESIAN_VELOCITY;
287 setVelocityComponent(
object.velocity.cartesian_velocity.x_velocity, cartesian_velocity.x * 100, x_std * 100 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
288 setVelocityComponent(
object.velocity.cartesian_velocity.y_velocity, cartesian_velocity.y * 100, y_std * 100 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
289 if (cartesian_velocity.z != 0.0) {
290 setVelocityComponent(
object.velocity.cartesian_velocity.z_velocity, cartesian_velocity.z * 100, z_std * 100 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
291 object.velocity.cartesian_velocity.z_velocity_is_present =
true;
293 object.velocity.cartesian_velocity.z_velocity_is_present =
false;
295 object.velocity_is_present =
true;
313 const double magnitude,
315 const double z = 0.0,
316 const double magnitude_std = std::numeric_limits<double>::infinity(),
317 const double angle_std = std::numeric_limits<double>::infinity(),
318 const double z_std = std::numeric_limits<double>::infinity()) {
319 object.velocity.choice = Velocity3dWithConfidence::CHOICE_POLAR_VELOCITY;
320 setSpeed(
object.velocity.polar_velocity.velocity_magnitude, magnitude, magnitude_std);
321 setCartesianAngle(
object.velocity.polar_velocity.velocity_direction, angle, angle_std);
323 setVelocityComponent(
object.velocity.polar_velocity.z_velocity, z * 100, z_std * 100 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
324 object.velocity.polar_velocity.z_velocity_is_present =
true;
326 object.velocity.polar_velocity.z_velocity_is_present =
false;
342 const double confidence = std::numeric_limits<double>::infinity()) {
344 if (value < AccelerationValue::NEGATIVE_OUT_OF_RANGE) {
345 acceleration.value.value = AccelerationValue::NEGATIVE_OUT_OF_RANGE;
346 }
else if (value > AccelerationValue::POSITIVE_OUT_OF_RANGE) {
347 acceleration.value.value = AccelerationValue::POSITIVE_OUT_OF_RANGE;
349 acceleration.value.value =
static_cast<int16_t
>(value);
353 if(confidence == std::numeric_limits<double>::infinity()) {
354 acceleration.confidence.value = AccelerationConfidence::UNAVAILABLE;
355 }
else if (confidence > AccelerationConfidence::MAX || confidence < AccelerationConfidence::MIN) {
356 acceleration.confidence.value = AccelerationConfidence::OUT_OF_RANGE;
358 acceleration.confidence.value =
static_cast<uint8_t
>(confidence);
375 const double x_std = std::numeric_limits<double>::infinity(),
376 const double y_std = std::numeric_limits<double>::infinity(),
377 const double z_std = std::numeric_limits<double>::infinity()) {
378 object.acceleration.choice = Acceleration3dWithConfidence::CHOICE_CARTESIAN_ACCELERATION;
380 x_std * 10 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
382 y_std * 10 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
383 if (cartesian_acceleration.z != 0.0) {
385 z_std * 10 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
386 object.acceleration.cartesian_acceleration.z_acceleration_is_present =
true;
388 object.acceleration_is_present =
true;
403 const double magnitude,
405 const double z = 0.0,
406 const double magnitude_std = std::numeric_limits<double>::infinity(),
407 const double angle_std = std::numeric_limits<double>::infinity(),
408 const double z_std = std::numeric_limits<double>::infinity()) {
409 object.acceleration.choice = Acceleration3dWithConfidence::CHOICE_POLAR_ACCELERATION;
411 setCartesianAngle(
object.acceleration.polar_acceleration.acceleration_direction, angle, angle_std);
414 z_std * 10 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
415 object.acceleration.polar_acceleration.z_acceleration_is_present =
true;
417 object.acceleration.polar_acceleration.z_acceleration_is_present =
false;
419 object.acceleration_is_present =
true;
433 double yaw_std = std::numeric_limits<double>::infinity()) {
435 double yaw_in_degrees = yaw * 180 / M_PI;
436 while (yaw_in_degrees >= 360.0) yaw_in_degrees -= 360.0;
437 while (yaw_in_degrees < 0.0) yaw_in_degrees += 360.0;
438 object.angles.z_angle.value.value = yaw_in_degrees * 10;
440 if(yaw_std == std::numeric_limits<double>::infinity()) {
441 object.angles.z_angle.confidence.value = AngleConfidence::UNAVAILABLE;
443 yaw_std *= 180.0 / M_PI;
444 yaw_std *= 10 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR;
446 if (yaw_std > AngleConfidence::MAX || yaw_std < AngleConfidence::MIN) {
447 object.angles.z_angle.confidence.value = AngleConfidence::OUT_OF_RANGE;
449 object.angles.z_angle.confidence.value =
static_cast<uint8_t
>(yaw_std);
452 object.angles_is_present =
true;
467 double yaw_rate_std = std::numeric_limits<double>::infinity()) {
468 double yaw_rate_in_degrees = yaw_rate * 180.0 / M_PI;
470 if (yaw_rate_in_degrees < CartesianAngularVelocityComponentValue::NEGATIVE_OUTOF_RANGE) {
471 yaw_rate_in_degrees = CartesianAngularVelocityComponentValue::NEGATIVE_OUTOF_RANGE;
472 }
else if (yaw_rate_in_degrees > CartesianAngularVelocityComponentValue::POSITIVE_OUT_OF_RANGE) {
473 yaw_rate_in_degrees = CartesianAngularVelocityComponentValue::POSITIVE_OUT_OF_RANGE;
476 object.z_angular_velocity.value.value = yaw_rate_in_degrees;
478 if(yaw_rate_std == std::numeric_limits<double>::infinity()) {
479 object.z_angular_velocity.confidence.value = AngularSpeedConfidence::UNAVAILABLE;
481 yaw_rate_std *= 180.0 / M_PI;
482 yaw_rate_std *= etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR;
484 static const std::map<double, uint8_t> confidence_map = {
485 {1.0, AngularSpeedConfidence::DEG_SEC_01},
486 {2.0, AngularSpeedConfidence::DEG_SEC_02},
487 {5.0, AngularSpeedConfidence::DEG_SEC_05},
488 {10.0, AngularSpeedConfidence::DEG_SEC_10},
489 {20.0, AngularSpeedConfidence::DEG_SEC_20},
490 {50.0, AngularSpeedConfidence::DEG_SEC_50},
491 {std::numeric_limits<double>::infinity(), AngularSpeedConfidence::OUT_OF_RANGE},
493 for(
const auto& [thresh, conf_val] : confidence_map) {
494 if (yaw_rate_std <= thresh) {
495 object.z_angular_velocity.confidence.value = conf_val;
501 object.z_angular_velocity_is_present =
true;
519 const double confidence = std::numeric_limits<double>::infinity()) {
521 if (value < ObjectDimensionValue::MIN || value > ObjectDimensionValue::MAX) {
522 dimension.value.value = ObjectDimensionValue::OUT_OF_RANGE;
524 dimension.value.value =
static_cast<uint16_t
>(value);
528 if (confidence == std::numeric_limits<double>::infinity()) {
529 dimension.confidence.value = ObjectDimensionConfidence::UNAVAILABLE;
530 }
else if (confidence > ObjectDimensionConfidence::MAX || confidence < ObjectDimensionConfidence::MIN) {
531 dimension.confidence.value = ObjectDimensionConfidence::OUT_OF_RANGE;
533 dimension.confidence.value =
static_cast<uint8_t
>(confidence);
549 const double std = std::numeric_limits<double>::infinity()) {
550 setObjectDimension(
object.object_dimension_x, value * 10, std * 10 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
551 object.object_dimension_x_is_present =
true;
565 const double std = std::numeric_limits<double>::infinity()) {
566 setObjectDimension(
object.object_dimension_y, value * 10, std * 10 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
567 object.object_dimension_y_is_present =
true;
581 const double std = std::numeric_limits<double>::infinity()) {
582 setObjectDimension(
object.object_dimension_z, value * 10, std * 10 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
583 object.object_dimension_z_is_present =
true;
598 const double x_std = std::numeric_limits<double>::infinity(),
599 const double y_std = std::numeric_limits<double>::infinity(),
600 const double z_std = std::numeric_limits<double>::infinity()) {
615inline void initPerceivedObject(PerceivedObject&
object,
const gm::Point& point,
const int16_t delta_time = 0) {
633 const gm::PointStamped& point,
const int16_t delta_time = 0) {
648 container.container_id.value = WrappedCpmContainer::CHOICE_CONTAINER_DATA_PERCEIVED_OBJECT_CONTAINER;
649 container.container_data_perceived_object_container.number_of_perceived_objects.value = n_objects;
666 if (container.container_id.value == WrappedCpmContainer::CHOICE_CONTAINER_DATA_PERCEIVED_OBJECT_CONTAINER) {
667 container.container_data_perceived_object_container.perceived_objects.array.push_back(perceived_object);
668 container.container_data_perceived_object_container.number_of_perceived_objects.value =
669 container.container_data_perceived_object_container.perceived_objects.array.size();
671 throw std::invalid_argument(
"Container is not a PerceivedObjectContainer");
687inline void addContainerToCPM(CollectivePerceptionMessage& cpm,
const WrappedCpmContainer& container) {
689 if (cpm.payload.cpm_containers.value.array.size() < WrappedCpmContainers::MAX_SIZE) {
690 cpm.payload.cpm_containers.value.array.push_back(container);
692 throw std::invalid_argument(
"Maximum number of CPM-Containers reached");
718 container.container_id.value = WrappedCpmContainer::CHOICE_CONTAINER_DATA_SENSOR_INFORMATION_CONTAINER;
719 container.container_data_sensor_information_container.array = std::vector<SensorInformation>();
732inline void setSensorID(SensorInformation& sensor_information,
const uint8_t sensor_id = 0) {
734 sensor_information.sensor_id.value = sensor_id;
747inline void setSensorType(SensorInformation& sensor_information,
const uint8_t sensor_type = SensorType::UNDEFINED) {
749 sensor_information.sensor_type.value = sensor_type;
771 if (container.container_id.value == WrappedCpmContainer::CHOICE_CONTAINER_DATA_SENSOR_INFORMATION_CONTAINER) {
773 if (container.container_data_sensor_information_container.array.size() < SensorInformationContainer::MAX_SIZE ) {
774 throwIfOutOfRange(sensor_information.sensor_id.value, Identifier1B::MIN, Identifier1B::MAX,
"SensorID");
775 throwIfOutOfRange(sensor_information.sensor_type.value, SensorType::MIN, SensorType::MAX,
"SensorType");
776 container.container_data_sensor_information_container.array.push_back(sensor_information);
778 throw std::invalid_argument(
"Maximum number of entries SensorInformationContainers reached");
781 throw std::invalid_argument(
"Container is not a SensorInformationContainer");
800 if (container.container_id.value == WrappedCpmContainer::CHOICE_CONTAINER_DATA_SENSOR_INFORMATION_CONTAINER) {
801 throwIfOutOfRange(container.container_data_sensor_information_container.array.size(),
802 SensorInformationContainer::MIN_SIZE, SensorInformationContainer::MAX_SIZE,
"SensorInformationContainer array size"
806 throw std::invalid_argument(
"Container is not a SensorInformationContainer");
Setter functions for the ETSI ITS Common Data Dictionary (CDD) v2.1.1.
Sanity-check functions etc.
File containing constants that are used in the context of ETIS ITS Messages.
gm::PointStamped getUTMPosition(const T &reference_position, int &zone, bool &northp)
Get the UTM Position defined by the given ReferencePosition.
void setReferencePosition(T &ref_position, const double latitude, const double longitude, const double altitude=AltitudeValue::UNAVAILABLE)
Sets the reference position in the given ReferencePostion object.
void setCartesianAngle(CartesianAngle &angle, const double value, double confidence=std::numeric_limits< double >::infinity())
Set a Cartesian Angle.
void addSensorInformationToContainer(WrappedCpmContainer &container, const SensorInformation &sensor_information)
Adds a SensorInformation to the SensorInformationContainer / WrappedCpmContainer.
void setVelocityOfPerceivedObject(PerceivedObject &object, const gm::Vector3 &cartesian_velocity, const double x_std=std::numeric_limits< double >::infinity(), const double y_std=std::numeric_limits< double >::infinity(), const double z_std=std::numeric_limits< double >::infinity())
void setWGSPosConfidenceEllipse(PosConfidenceEllipse &position_confidence_ellipse, const std::array< double, 4 > &covariance_matrix)
Set the Pos Confidence Ellipse object.
void setAccelerationComponent(AccelerationComponent &acceleration, const double value, const double confidence=std::numeric_limits< double >::infinity())
Sets the value and confidence of a AccelerationComponent.
void setAccelerationOfPerceivedObject(PerceivedObject &object, const gm::Vector3 &cartesian_acceleration, const double x_std=std::numeric_limits< double >::infinity(), const double y_std=std::numeric_limits< double >::infinity(), const double z_std=std::numeric_limits< double >::infinity())
Sets the acceleration of a perceived object.
void initPerceivedObjectContainer(WrappedCpmContainer &container, const uint8_t n_objects=0)
Initializes a WrappedCpmContainer as a PerceivedObjectContainer with the given number of objects.
void setDimensionsOfPerceivedObject(PerceivedObject &object, const gm::Vector3 &dimensions, const double x_std=std::numeric_limits< double >::infinity(), const double y_std=std::numeric_limits< double >::infinity(), const double z_std=std::numeric_limits< double >::infinity())
Sets all dimensions of a perceived object.
void setYDimensionOfPerceivedObject(PerceivedObject &object, const double value, const double std=std::numeric_limits< double >::infinity())
Sets the y-dimension of a perceived object.
void addSensorInformationContainerToCPM(CollectivePerceptionMessage &cpm, const WrappedCpmContainer &container)
Adds a container to the Collective Perception Message (CPM).
void setWGSRefPosConfidence(CollectivePerceptionMessage &cpm, const std::array< double, 4 > &covariance_matrix)
Set the confidence of the reference position.
void setVelocityComponent(VelocityComponent &velocity, const double value, const double confidence=std::numeric_limits< double >::infinity())
Sets the value and confidence of a VelocityComponent.
void setYawRateOfPerceivedObject(PerceivedObject &object, const double yaw_rate, double yaw_rate_std=std::numeric_limits< double >::infinity())
Sets the yaw rate of a perceived 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.
void setFromUTMPosition(T &reference_position, const gm::PointStamped &utm_position, const int zone, const bool northp)
Set the ReferencePosition from a given UTM-Position.
void setYawOfPerceivedObject(PerceivedObject &object, const double yaw, double yaw_std=std::numeric_limits< double >::infinity())
Sets the yaw angle of a perceived object.
void addPerceivedObjectToContainer(WrappedCpmContainer &container, const PerceivedObject &perceived_object)
Adds a PerceivedObject to the PerceivedObjectContainer / WrappedCpmContainer.
void setUTMPositionOfPerceivedObject(CollectivePerceptionMessage &cpm, PerceivedObject &object, const gm::PointStamped &utm_position, const double x_std=std::numeric_limits< double >::infinity(), const double y_std=std::numeric_limits< double >::infinity(), const double z_std=std::numeric_limits< double >::infinity())
Sets the position of a perceived object based on a UTM position.
void setPolarVelocityOfPerceivedObject(PerceivedObject &object, const double magnitude, const double angle, const double z=0.0, const double magnitude_std=std::numeric_limits< double >::infinity(), const double angle_std=std::numeric_limits< double >::infinity(), const double z_std=std::numeric_limits< double >::infinity())
void addContainerToCPM(CollectivePerceptionMessage &cpm, const WrappedCpmContainer &container)
Adds a container to the Collective Perception Message (CPM).
void throwIfOutOfRange(const T1 &val, const T2 &min, const T2 &max, const std::string val_desc)
Throws an exception if a given value is out of a defined range.
void setIdOfPerceivedObject(PerceivedObject &object, const uint16_t id)
Set the ID of a PerceivedObject.
void setAccelerationMagnitude(AccelerationMagnitude &accel_mag, const double value, const double confidence=std::numeric_limits< double >::infinity())
Set the AccelerationMagnitude object.
void setPolarAccelerationOfPerceivedObject(PerceivedObject &object, const double magnitude, const double angle, const double z=0.0, const double magnitude_std=std::numeric_limits< double >::infinity(), const double angle_std=std::numeric_limits< double >::infinity(), const double z_std=std::numeric_limits< double >::infinity())
Set the Polar Acceleration Of Perceived Object object.
void setObjectDimension(ObjectDimension &dimension, const double value, const double confidence=std::numeric_limits< double >::infinity())
Sets the object dimension with the given value and confidence.
void setXDimensionOfPerceivedObject(PerceivedObject &object, const double value, const double std=std::numeric_limits< double >::infinity())
Sets the x-dimension of a perceived object.
void setZDimensionOfPerceivedObject(PerceivedObject &object, const double value, const double std=std::numeric_limits< double >::infinity())
Sets the z-dimension of a perceived object.
void setCartesianCoordinateWithConfidence(CartesianCoordinateWithConfidence &coordinate, const double value, const double confidence=std::numeric_limits< double >::infinity())
Sets the value and confidence of a CartesianCoordinateWithConfidence object.
void setPositionOfPerceivedObject(PerceivedObject &object, const gm::Point &point, const double x_std=std::numeric_limits< double >::infinity(), const double y_std=std::numeric_limits< double >::infinity(), const double z_std=std::numeric_limits< double >::infinity())
Sets the position of a perceived object (relative to the CPM's reference position).
void setMeasurementDeltaTimeOfPerceivedObject(PerceivedObject &object, const int16_t delta_time=0)
Sets the measurement delta time of a PerceivedObject.
void setSensorType(SensorInformation &sensor_information, const uint8_t sensor_type=SensorType::UNDEFINED)
Sets the sensorType of a SensorInformation object.
const std::map< uint64_t, uint16_t > LEAP_SECOND_INSERTIONS_SINCE_2004
std::map that stores all leap second insertions since 2004 with the corresponding unix-date of the in...
void setSpeed(Speed &speed, const double value, const double confidence=std::numeric_limits< double >::infinity())
Set the Speed object.
void setReferenceTime(CollectivePerceptionMessage &cpm, const uint64_t unix_nanosecs, const uint16_t n_leap_seconds=etsi_its_msgs::LEAP_SECOND_INSERTIONS_SINCE_2004.rbegin() ->second)
Sets the reference time in a CPM.
void initSensorInformationContainer(WrappedCpmContainer &container)
Initializes a WrappedCpmContainer as a SensorInformationContainer.
void initPerceivedObjectWithUTMPosition(CollectivePerceptionMessage &cpm, PerceivedObject &object, const gm::PointStamped &point, const int16_t delta_time=0)
Initializes a PerceivedObject with the given point (utm-position) and delta time.
void setSensorID(SensorInformation &sensor_information, const uint8_t sensor_id=0)
Sets the sensorId of a SensorInformation object.
void setTimestampITS(TimestampIts ×tamp_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 initPerceivedObject(PerceivedObject &object, const gm::Point &point, const int16_t delta_time=0)
Initializes a PerceivedObject with the given point and delta time.