1313#include " merge.hpp"
1414#include " tf_transformer.hpp"
1515
16- #include < seyond/msg/seyond_scan.hpp>
17-
18- #include < can_msgs/msg/frame.hpp>
19- #include < geometry_msgs/msg/accel_stamped.hpp>
20- #include < geometry_msgs/msg/pose_stamped.hpp>
21- #include < geometry_msgs/msg/twist_stamped.hpp>
22- #include < geometry_msgs/msg/wrench_stamped.hpp>
23- #include < nav_msgs/msg/odometry.hpp>
24- #include < nebula_msgs/msg/nebula_packets.hpp>
25- #include < oxts_msgs/msg/imu_bias.hpp>
26- #include < oxts_msgs/msg/lever_arm.hpp>
27- #include < oxts_msgs/msg/nav_sat_ref.hpp>
28- #include < oxts_msgs/msg/ncom.hpp>
29- #include < sensor_msgs/msg/camera_info.hpp>
30- #include < sensor_msgs/msg/compressed_image.hpp>
31- #include < sensor_msgs/msg/image.hpp>
32- #include < sensor_msgs/msg/imu.hpp>
33- #include < sensor_msgs/msg/laser_scan.hpp>
34- #include < sensor_msgs/msg/nav_sat_fix.hpp>
35- #include < sensor_msgs/msg/point_cloud2.hpp>
36-
3716#include < algorithm>
17+ #include < cctype>
3818#include < cstring>
3919#include < filesystem>
4020#include < fstream>
@@ -50,147 +30,6 @@ static const rclcpp::Logger g_logger = rclcpp::get_logger("bag_converter");
5030namespace bag_converter
5131{
5232
53- /* *
54- * @brief Extract header.stamp by deserializing the message.
55- *
56- * For types in kTypesWithHeader, deserializes to the concrete message type and
57- * returns header.stamp. Returns std::nullopt if the type is unsupported or
58- * deserialization fails.
59- */
60- static std::optional<rclcpp::Time> extract_header_stamp (
61- const rcutils_uint8_array_t & serialized_data, const std::string & topic_type)
62- {
63- if (kTypesWithHeader .find (topic_type) == kTypesWithHeader .end ()) {
64- return std::nullopt ;
65- }
66- try {
67- rclcpp::SerializedMessage serialized_msg (serialized_data);
68- // sensor_msgs
69- if (topic_type == " sensor_msgs/msg/CameraInfo" ) {
70- sensor_msgs::msg::CameraInfo msg;
71- rclcpp::Serialization<sensor_msgs::msg::CameraInfo> ser;
72- ser.deserialize_message (&serialized_msg, &msg);
73- return rclcpp::Time (msg.header .stamp );
74- }
75- if (topic_type == " sensor_msgs/msg/CompressedImage" ) {
76- sensor_msgs::msg::CompressedImage msg;
77- rclcpp::Serialization<sensor_msgs::msg::CompressedImage> ser;
78- ser.deserialize_message (&serialized_msg, &msg);
79- return rclcpp::Time (msg.header .stamp );
80- }
81- if (topic_type == " sensor_msgs/msg/Imu" ) {
82- sensor_msgs::msg::Imu msg;
83- rclcpp::Serialization<sensor_msgs::msg::Imu> ser;
84- ser.deserialize_message (&serialized_msg, &msg);
85- return rclcpp::Time (msg.header .stamp );
86- }
87- if (topic_type == " sensor_msgs/msg/Image" ) {
88- sensor_msgs::msg::Image msg;
89- rclcpp::Serialization<sensor_msgs::msg::Image> ser;
90- ser.deserialize_message (&serialized_msg, &msg);
91- return rclcpp::Time (msg.header .stamp );
92- }
93- if (topic_type == " sensor_msgs/msg/LaserScan" ) {
94- sensor_msgs::msg::LaserScan msg;
95- rclcpp::Serialization<sensor_msgs::msg::LaserScan> ser;
96- ser.deserialize_message (&serialized_msg, &msg);
97- return rclcpp::Time (msg.header .stamp );
98- }
99- if (topic_type == " sensor_msgs/msg/NavSatFix" ) {
100- sensor_msgs::msg::NavSatFix msg;
101- rclcpp::Serialization<sensor_msgs::msg::NavSatFix> ser;
102- ser.deserialize_message (&serialized_msg, &msg);
103- return rclcpp::Time (msg.header .stamp );
104- }
105- if (topic_type == " sensor_msgs/msg/PointCloud2" ) {
106- sensor_msgs::msg::PointCloud2 msg;
107- rclcpp::Serialization<sensor_msgs::msg::PointCloud2> ser;
108- ser.deserialize_message (&serialized_msg, &msg);
109- return rclcpp::Time (msg.header .stamp );
110- }
111- // geometry_msgs
112- if (topic_type == " geometry_msgs/msg/AccelStamped" ) {
113- geometry_msgs::msg::AccelStamped msg;
114- rclcpp::Serialization<geometry_msgs::msg::AccelStamped> ser;
115- ser.deserialize_message (&serialized_msg, &msg);
116- return rclcpp::Time (msg.header .stamp );
117- }
118- if (topic_type == " geometry_msgs/msg/PoseStamped" ) {
119- geometry_msgs::msg::PoseStamped msg;
120- rclcpp::Serialization<geometry_msgs::msg::PoseStamped> ser;
121- ser.deserialize_message (&serialized_msg, &msg);
122- return rclcpp::Time (msg.header .stamp );
123- }
124- if (topic_type == " geometry_msgs/msg/TwistStamped" ) {
125- geometry_msgs::msg::TwistStamped msg;
126- rclcpp::Serialization<geometry_msgs::msg::TwistStamped> ser;
127- ser.deserialize_message (&serialized_msg, &msg);
128- return rclcpp::Time (msg.header .stamp );
129- }
130- if (topic_type == " geometry_msgs/msg/WrenchStamped" ) {
131- geometry_msgs::msg::WrenchStamped msg;
132- rclcpp::Serialization<geometry_msgs::msg::WrenchStamped> ser;
133- ser.deserialize_message (&serialized_msg, &msg);
134- return rclcpp::Time (msg.header .stamp );
135- }
136- // nav_msgs
137- if (topic_type == " nav_msgs/msg/Odometry" ) {
138- nav_msgs::msg::Odometry msg;
139- rclcpp::Serialization<nav_msgs::msg::Odometry> ser;
140- ser.deserialize_message (&serialized_msg, &msg);
141- return rclcpp::Time (msg.header .stamp );
142- }
143- // can_msgs
144- if (topic_type == " can_msgs/msg/Frame" ) {
145- can_msgs::msg::Frame msg;
146- rclcpp::Serialization<can_msgs::msg::Frame> ser;
147- ser.deserialize_message (&serialized_msg, &msg);
148- return rclcpp::Time (msg.header .stamp );
149- }
150- // oxts_msgs
151- if (topic_type == " oxts_msgs/msg/ImuBias" ) {
152- oxts_msgs::msg::ImuBias msg;
153- rclcpp::Serialization<oxts_msgs::msg::ImuBias> ser;
154- ser.deserialize_message (&serialized_msg, &msg);
155- return rclcpp::Time (msg.header .stamp );
156- }
157- if (topic_type == " oxts_msgs/msg/LeverArm" ) {
158- oxts_msgs::msg::LeverArm msg;
159- rclcpp::Serialization<oxts_msgs::msg::LeverArm> ser;
160- ser.deserialize_message (&serialized_msg, &msg);
161- return rclcpp::Time (msg.header .stamp );
162- }
163- if (topic_type == " oxts_msgs/msg/NavSatRef" ) {
164- oxts_msgs::msg::NavSatRef msg;
165- rclcpp::Serialization<oxts_msgs::msg::NavSatRef> ser;
166- ser.deserialize_message (&serialized_msg, &msg);
167- return rclcpp::Time (msg.header .stamp );
168- }
169- if (topic_type == " oxts_msgs/msg/Ncom" ) {
170- oxts_msgs::msg::Ncom msg;
171- rclcpp::Serialization<oxts_msgs::msg::Ncom> ser;
172- ser.deserialize_message (&serialized_msg, &msg);
173- return rclcpp::Time (msg.header .stamp );
174- }
175- // LiDAR packet types
176- if (topic_type == " nebula_msgs/msg/NebulaPackets" ) {
177- nebula_msgs::msg::NebulaPackets msg;
178- rclcpp::Serialization<nebula_msgs::msg::NebulaPackets> ser;
179- ser.deserialize_message (&serialized_msg, &msg);
180- return rclcpp::Time (msg.header .stamp );
181- }
182- if (topic_type == " seyond/msg/SeyondScan" ) {
183- seyond::msg::SeyondScan msg;
184- rclcpp::Serialization<seyond::msg::SeyondScan> ser;
185- ser.deserialize_message (&serialized_msg, &msg);
186- return rclcpp::Time (msg.header .stamp );
187- }
188- } catch (...) {
189- return std::nullopt ;
190- }
191- return std::nullopt ;
192- }
193-
19433/* *
19534 * @brief Override log_time with header.stamp for a pass-through message.
19635 *
@@ -792,7 +631,6 @@ BagConverterResultStatus run_impl(const BagConverterConfig & config)
792631 return BagConverterResultStatus::kError ;
793632 }
794633 // Create output topics based on input metadata
795- std::set<std::string> created_topics;
796634 for (const auto & topic_info : bag_metadata.topics_with_message_count ) {
797635 const auto & topic_metadata = topic_info.topic_metadata ;
798636 const auto & topic_type = topic_metadata.type ;
@@ -816,15 +654,12 @@ BagConverterResultStatus run_impl(const BagConverterConfig & config)
816654 pc_topic_meta.type = " sensor_msgs/msg/PointCloud2" ;
817655 pc_topic_meta.serialization_format = " cdr" ;
818656 writer.create_topic (pc_topic_meta);
819- created_topics.insert (output_topic);
820657
821658 if (config.keep_original_topics ) {
822659 writer.create_topic (topic_metadata);
823- created_topics.insert (topic_metadata.name );
824660 }
825661 } else {
826662 writer.create_topic (topic_metadata);
827- created_topics.insert (topic_metadata.name );
828663 }
829664 }
830665
0 commit comments