67
67
namespace pointcloud_preprocessor
68
68
{
69
69
70
-
71
70
CombineCloudHandler::CombineCloudHandler (
72
- rclcpp::Node * node, std::vector<std::string> input_topics,
73
- std::string output_frame,
74
- bool is_motion_compensated, bool keep_input_frame_in_synchronized_pointcloud)
71
+ rclcpp::Node * node, std::vector<std::string> input_topics, std::string output_frame,
72
+ bool is_motion_compensated, bool keep_input_frame_in_synchronized_pointcloud)
75
73
: node_(node),
76
74
tf_buffer_ (node_->get_clock ()),
77
75
tf_listener_(tf_buffer_),
@@ -110,7 +108,6 @@ void CombineCloudHandler::processTwist(
110
108
twist_ptr->header = input->header ;
111
109
twist_ptr->twist = input->twist .twist ;
112
110
twist_ptr_queue_.push_back (twist_ptr);
113
-
114
111
}
115
112
116
113
void CombineCloudHandler::processOdometry (const nav_msgs::msg::Odometry::ConstSharedPtr & input)
@@ -187,8 +184,7 @@ void CombineCloudHandler::resetCloud()
187
184
}
188
185
189
186
void CombineCloudHandler::combinePointClouds (
190
- std::unordered_map<std::string, sensor_msgs::msg::PointCloud2::SharedPtr> &
191
- topic_to_cloud_map_)
187
+ std::unordered_map<std::string, sensor_msgs::msg::PointCloud2::SharedPtr> & topic_to_cloud_map_)
192
188
{
193
189
std::vector<rclcpp::Time> pc_stamps;
194
190
for (const auto & pair : topic_to_cloud_map_) {
@@ -198,44 +194,43 @@ void CombineCloudHandler::combinePointClouds(
198
194
std::sort (pc_stamps.begin (), pc_stamps.end (), std::greater<rclcpp::Time>());
199
195
const auto oldest_stamp = pc_stamps.back ();
200
196
201
-
202
197
std::unordered_map<rclcpp::Time, Eigen::Matrix4f, RclcppTimeHash_> transform_memo;
203
198
204
199
for (const auto & pair : topic_to_cloud_map_) {
205
200
std::string topic_name = pair.first ;
206
201
sensor_msgs::msg::PointCloud2::SharedPtr cloud = pair.second ;
207
- // std::cout << "in combination topic: " << topic_name << std::endl;
202
+ // std::cout << "in combination topic: " << topic_name << std::endl;
208
203
209
204
auto transformed_cloud_ptr = std::make_shared<sensor_msgs::msg::PointCloud2>();
210
205
if (output_frame_ != cloud->header .frame_id ) {
211
- if (!pcl_ros::transformPointCloud (output_frame_, *cloud, *transformed_cloud_ptr, tf_buffer_)) {
206
+ if (!pcl_ros::transformPointCloud (
207
+ output_frame_, *cloud, *transformed_cloud_ptr, tf_buffer_)) {
212
208
RCLCPP_ERROR (
213
209
node_->get_logger (),
214
210
" [transformPointCloud] Error converting first input dataset from %s to %s." ,
215
211
cloud->header .frame_id .c_str (), output_frame_.c_str ());
216
212
return ;
217
213
}
218
- }
219
- else {
214
+ } else {
220
215
transformed_cloud_ptr = cloud;
221
216
}
222
217
223
- auto start = std::chrono::high_resolution_clock::now ();
224
- auto transformed_delay_compensated_cloud_ptr = std::make_shared<sensor_msgs::msg::PointCloud2>();
225
-
226
- if (is_motion_compensated_) {
218
+ auto transformed_delay_compensated_cloud_ptr =
219
+ std::make_shared<sensor_msgs::msg::PointCloud2>();
220
+
221
+ if (is_motion_compensated_) {
227
222
Eigen::Matrix4f adjust_to_old_data_transform = Eigen::Matrix4f::Identity ();
228
223
rclcpp::Time current_cloud_stamp = rclcpp::Time (cloud->header .stamp );
229
224
for (const auto & stamp : pc_stamps) {
230
- if (stamp >= current_cloud_stamp)
231
- continue ;
225
+ if (stamp >= current_cloud_stamp) continue ;
232
226
233
227
Eigen::Matrix4f new_to_old_transform;
234
228
if (transform_memo.find (stamp) != transform_memo.end ()) {
235
- new_to_old_transform = transform_memo[stamp];
229
+ new_to_old_transform = transform_memo[stamp];
236
230
} else {
237
- new_to_old_transform = computeTransformToAdjustForOldTimestamp (stamp, current_cloud_stamp);
238
- transform_memo[stamp] = new_to_old_transform;
231
+ new_to_old_transform =
232
+ computeTransformToAdjustForOldTimestamp (stamp, current_cloud_stamp);
233
+ transform_memo[stamp] = new_to_old_transform;
239
234
}
240
235
adjust_to_old_data_transform = new_to_old_transform * adjust_to_old_data_transform;
241
236
current_cloud_stamp = stamp;
@@ -244,8 +239,7 @@ void CombineCloudHandler::combinePointClouds(
244
239
adjust_to_old_data_transform, *transformed_cloud_ptr,
245
240
*transformed_delay_compensated_cloud_ptr);
246
241
247
- }
248
- else {
242
+ } else {
249
243
transformed_delay_compensated_cloud_ptr = transformed_cloud_ptr;
250
244
}
251
245
@@ -278,8 +272,6 @@ void CombineCloudHandler::combinePointClouds(
278
272
concatenate_cloud_ptr_->header .stamp = oldest_stamp;
279
273
}
280
274
281
-
282
-
283
275
Eigen::Matrix4f CombineCloudHandler::computeTransformToAdjustForOldTimestamp (
284
276
const rclcpp::Time & old_stamp, const rclcpp::Time & new_stamp)
285
277
{
@@ -334,10 +326,10 @@ Eigen::Matrix4f CombineCloudHandler::computeTransformToAdjustForOldTimestamp(
334
326
}
335
327
336
328
Eigen::Matrix4f transformation_matrix = Eigen::Matrix4f::Identity ();
337
-
329
+
338
330
float cos_yaw = std::cos (yaw);
339
331
float sin_yaw = std::sin (yaw);
340
-
332
+
341
333
transformation_matrix (0 , 3 ) = x;
342
334
transformation_matrix (1 , 3 ) = y;
343
335
transformation_matrix (0 , 0 ) = cos_yaw;
0 commit comments