cpm_render_object.cpp
Go to the documentation of this file.
1 
26 
27 namespace etsi_its_msgs {
28 namespace displays {
29 
30 CPMRenderObject::CPMRenderObject(const etsi_its_cpm_ts_msgs::msg::CollectivePerceptionMessage cpm) {
31 
32  station_id_ = etsi_its_cpm_ts_msgs::access::getStationID(cpm);
33  reference_position_ = etsi_its_cpm_ts_msgs::access::getUTMPosition(cpm);
34 
35  uint64_t nanosecs = etsi_its_cpm_ts_msgs::access::getUnixNanosecondsFromReferenceTime(etsi_its_cpm_ts_msgs::access::getReferenceTime(cpm));
36  header_.stamp = rclcpp::Time(nanosecs);
37  header_.frame_id = reference_position_.header.frame_id;
38 
39  int n_perceived_objects = etsi_its_cpm_ts_msgs::access::getNumberOfPerceivedObjects(cpm);
40  for (int i = 0; i < n_perceived_objects; i++) {
41  etsi_its_cpm_ts_msgs::msg::PerceivedObject perceived_obj = etsi_its_cpm_ts_msgs::access::getPerceivedObject(
42  etsi_its_cpm_ts_msgs::access::getPerceivedObjectContainer(cpm), i);
43  geometry_msgs::msg::PointStamped utm_position = etsi_its_cpm_ts_msgs::access::getUTMPositionOfPerceivedObject(cpm, perceived_obj);
44 
45  Object obj;
46  obj.pose.position = utm_position.point;
47  if(perceived_obj.angles_is_present) obj.pose.orientation = etsi_its_cpm_ts_msgs::access::getOrientationOfPerceivedObject(perceived_obj);
48  if(perceived_obj.object_dimension_x_is_present && perceived_obj.object_dimension_y_is_present && perceived_obj.object_dimension_z_is_present) {
49  obj.dimensions = etsi_its_cpm_ts_msgs::access::getDimensionsOfPerceivedObject(perceived_obj);
50  }
51  if(perceived_obj.velocity_is_present) obj.velocity = etsi_its_cpm_ts_msgs::access::getCartesianVelocityOfPerceivedObject(perceived_obj);
52  objects_.push_back(obj);
53  }
54 }
55 
57  bool valid = true;
58  for (size_t i = 0; i < objects_.size(); i++) {
59  valid = valid && rviz_common::validateFloats(objects_[i].pose);
60  valid = valid && rviz_common::validateFloats(objects_[i].dimensions);
61  valid = valid && rviz_common::validateFloats(objects_[i].velocity);
62  }
63  return valid;
64 }
65 
66 double CPMRenderObject::getAge(const rclcpp::Time now) { return (now - header_.stamp).seconds(); }
67 
68 std_msgs::msg::Header CPMRenderObject::getHeader() { return header_; }
69 
71 
72 geometry_msgs::msg::PointStamped CPMRenderObject::getReferencePosition() { return reference_position_; }
73 
74 geometry_msgs::msg::Pose CPMRenderObject::getPoseOfObject(const uint8_t idx) { return objects_[idx].pose; }
75 
76 geometry_msgs::msg::Vector3 CPMRenderObject::getDimensionsOfObject(const uint8_t idx) { return objects_[idx].dimensions; }
77 
78 geometry_msgs::msg::Vector3 CPMRenderObject::getVelocityOfObject(const uint8_t idx) { return objects_[idx].velocity; }
79 
80 uint8_t CPMRenderObject::getNumberOfObjects() { return objects_.size(); }
81 
82 } // namespace displays
83 } // namespace etsi_its_msgs
etsi_its_msgs::displays::CPMRenderObject::getHeader
std_msgs::msg::Header getHeader()
Definition: cpm_render_object.cpp:68
etsi_its_msgs::displays::CPMRenderObject::Object::dimensions
geometry_msgs::msg::Vector3 dimensions
Definition: cpm_render_object.hpp:81
etsi_its_msgs::displays::CPMRenderObject::getVelocityOfObject
geometry_msgs::msg::Vector3 getVelocityOfObject(const uint8_t idx)
Definition: cpm_render_object.cpp:78
etsi_its_msgs::displays::CPMRenderObject::Object::velocity
geometry_msgs::msg::Vector3 velocity
Definition: cpm_render_object.hpp:82
etsi_its_msgs::displays::CPMRenderObject::station_id_
uint32_t station_id_
Definition: cpm_render_object.hpp:87
etsi_its_msgs::displays::CPMRenderObject::getReferencePosition
geometry_msgs::msg::PointStamped getReferencePosition()
Definition: cpm_render_object.cpp:72
etsi_its_msgs::displays::CPMRenderObject::getNumberOfObjects
uint8_t getNumberOfObjects()
Definition: cpm_render_object.cpp:80
etsi_its_msgs::displays::CPMRenderObject::getAge
double getAge(const rclcpp::Time now)
Get age of CPM-object.
Definition: cpm_render_object.cpp:66
etsi_its_msgs::displays::CPMRenderObject::getStationID
uint32_t getStationID()
Definition: cpm_render_object.cpp:70
etsi_its_msgs::displays::CPMRenderObject::reference_position_
geometry_msgs::msg::PointStamped reference_position_
Definition: cpm_render_object.hpp:88
etsi_its_msgs::displays::CPMRenderObject::validateFloats
bool validateFloats()
This function validates all float variables that are part of a CPMRenderObject.
Definition: cpm_render_object.cpp:56
etsi_its_msgs::displays::CPMRenderObject::Object
Definition: cpm_render_object.hpp:79
etsi_its_msgs::displays::CPMRenderObject::header_
std_msgs::msg::Header header_
Definition: cpm_render_object.hpp:86
etsi_its_msgs::displays::CPMRenderObject::objects_
std::vector< Object > objects_
Definition: cpm_render_object.hpp:89
etsi_its_msgs::displays::CPMRenderObject::Object::pose
geometry_msgs::msg::Pose pose
Definition: cpm_render_object.hpp:80
cpm_render_object.hpp
etsi_its_msgs::displays::CPMRenderObject::getDimensionsOfObject
geometry_msgs::msg::Vector3 getDimensionsOfObject(const uint8_t idx)
Definition: cpm_render_object.cpp:76
etsi_its_msgs
Definition: cam_display.hpp:51
etsi_its_msgs::displays::CPMRenderObject::getPoseOfObject
geometry_msgs::msg::Pose getPoseOfObject(const uint8_t idx)
Definition: cpm_render_object.cpp:74
etsi_its_msgs::displays::CPMRenderObject::CPMRenderObject
CPMRenderObject(const etsi_its_cpm_ts_msgs::msg::CollectivePerceptionMessage cpm)
Construct a new CPMRenderObject object from a CPM message.
Definition: cpm_render_object.cpp:30


etsi_its_rviz_plugins
Author(s): Jean-Pierre Busch , Guido Küppers , Lennart Reiher
autogenerated on Sun May 18 2025 02:29:25