Skip to content

Commit dbd8bcb

Browse files
committed
fix: time sync function to adapt empty pc topic
Signed-off-by: yoshiri <yoshiyoshidetteiu@gmail.com>
1 parent 6ce2a74 commit dbd8bcb

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp

+20-4
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,9 @@ PointCloudDataSynchronizerComponent::synchronizeClouds()
274274
for (const auto & e : cloud_stdmap_) {
275275
transformed_clouds[e.first] = nullptr;
276276
if (e.second != nullptr) {
277+
if (e.second->data.size() == 0) {
278+
continue;
279+
}
277280
pc_stamps.push_back(rclcpp::Time(e.second->header.stamp));
278281
}
279282
}
@@ -288,11 +291,22 @@ PointCloudDataSynchronizerComponent::synchronizeClouds()
288291
// Step2. Calculate compensation transform and concatenate with the oldest stamp
289292
for (const auto & e : cloud_stdmap_) {
290293
if (e.second != nullptr) {
294+
// transform pointcloud
291295
sensor_msgs::msg::PointCloud2::SharedPtr transformed_cloud_ptr(
292296
new sensor_msgs::msg::PointCloud2());
297+
sensor_msgs::msg::PointCloud2::SharedPtr transformed_delay_compensated_cloud_ptr(
298+
new sensor_msgs::msg::PointCloud2());
299+
if (e.second->data.size() == 0) {
300+
// gather transformed clouds
301+
transformed_delay_compensated_cloud_ptr->header.stamp = oldest_stamp;
302+
transformed_delay_compensated_cloud_ptr->header.frame_id = output_frame_;
303+
transformed_clouds[e.first] = transformed_delay_compensated_cloud_ptr;
304+
continue;
305+
}
306+
// transform pointcloud to output frame
293307
transformPointCloud(e.second, transformed_cloud_ptr);
294308

295-
// calculate transforms to oldest stamp
309+
// calculate transforms to oldest stamp and transform pointcloud to oldest stamp
296310
Eigen::Matrix4f adjust_to_old_data_transform = Eigen::Matrix4f::Identity();
297311
rclcpp::Time transformed_stamp = rclcpp::Time(e.second->header.stamp);
298312
for (const auto & stamp : pc_stamps) {
@@ -301,15 +315,15 @@ PointCloudDataSynchronizerComponent::synchronizeClouds()
301315
adjust_to_old_data_transform = new_to_old_transform * adjust_to_old_data_transform;
302316
transformed_stamp = std::min(transformed_stamp, stamp);
303317
}
304-
sensor_msgs::msg::PointCloud2::SharedPtr transformed_delay_compensated_cloud_ptr(
305-
new sensor_msgs::msg::PointCloud2());
306318
pcl_ros::transformPointCloud(
307319
adjust_to_old_data_transform, *transformed_cloud_ptr,
308320
*transformed_delay_compensated_cloud_ptr);
321+
309322
// gather transformed clouds
310323
transformed_delay_compensated_cloud_ptr->header.stamp = oldest_stamp;
311324
transformed_delay_compensated_cloud_ptr->header.frame_id = output_frame_;
312325
transformed_clouds[e.first] = transformed_delay_compensated_cloud_ptr;
326+
313327
} else {
314328
not_subscribed_topic_names_.insert(e.first);
315329
}
@@ -414,7 +428,9 @@ void PointCloudDataSynchronizerComponent::cloud_callback(
414428
std::lock_guard<std::mutex> lock(mutex_);
415429
auto input = std::make_shared<sensor_msgs::msg::PointCloud2>(*input_ptr);
416430
sensor_msgs::msg::PointCloud2::SharedPtr xyzi_input_ptr(new sensor_msgs::msg::PointCloud2());
417-
convertToXYZICloud(input, xyzi_input_ptr);
431+
if (input->data.size() > 0) {
432+
convertToXYZICloud(input, xyzi_input_ptr);
433+
}
418434

419435
const bool is_already_subscribed_this = (cloud_stdmap_[topic_name] != nullptr);
420436
const bool is_already_subscribed_tmp = std::any_of(

0 commit comments

Comments
 (0)