@@ -137,24 +137,7 @@ void MeasurementBuffer::BufferROSCloud(
137137 return ;
138138 }
139139
140- // transform the cloud in the global frame, directly or indirectly to apply relative z filter
141140 point_cloud_ptr cld_transformed (new sensor_msgs::msg::PointCloud2 ());
142-
143- geometry_msgs::msg::TransformStamped tf_direct_global =
144- _buffer.lookupTransform (
145- _global_frame, cloud.header .frame_id ,
146- tf2_ros::fromMsg (cloud.header .stamp ));
147-
148- geometry_msgs::msg::TransformStamped tf_z_reference =
149- _buffer.lookupTransform (
150- _z_reference_frame, cloud.header .frame_id ,
151- tf2_ros::fromMsg (cloud.header .stamp ));
152-
153- geometry_msgs::msg::TransformStamped tf_global_from_z_reference =
154- _buffer.lookupTransform (
155- _global_frame, _z_reference_frame,
156- tf2_ros::fromMsg (cloud.header .stamp ));
157-
158141 pcl::PCLPointCloud2::Ptr cloud_pcl (new pcl::PCLPointCloud2 ());
159142 pcl::PCLPointCloud2::Ptr cloud_filtered (new pcl::PCLPointCloud2 ());
160143 pcl::PassThrough<pcl::PCLPointCloud2> pass_through_filter;
@@ -166,6 +149,10 @@ void MeasurementBuffer::BufferROSCloud(
166149 switch (_filter)
167150 {
168151 case Filters::PASSTHROUGH :
152+ geometry_msgs::msg::TransformStamped tf_direct_global =
153+ _buffer.lookupTransform (
154+ _global_frame, cloud.header .frame_id ,
155+ tf2_ros::fromMsg (cloud.header .stamp ));
169156 tf2::doTransform (cloud, *cld_transformed, tf_direct_global);
170157 pcl_conversions::toPCL (*cld_transformed, *cloud_pcl);
171158 pass_through_filter.setInputCloud (cloud_pcl);
@@ -177,6 +164,10 @@ void MeasurementBuffer::BufferROSCloud(
177164 pcl_conversions::fromPCL (*cloud_filtered, *cld_transformed);
178165 break ;
179166 case Filters::VOXEL :
167+ geometry_msgs::msg::TransformStamped tf_direct_global =
168+ _buffer.lookupTransform (
169+ _global_frame, cloud.header .frame_id ,
170+ tf2_ros::fromMsg (cloud.header .stamp ));
180171 tf2::doTransform (cloud, *cld_transformed, tf_direct_global);
181172 pcl_conversions::toPCL (*cld_transformed, *cloud_pcl);
182173 sor.setInputCloud (cloud_pcl);
@@ -189,6 +180,14 @@ void MeasurementBuffer::BufferROSCloud(
189180 pcl_conversions::fromPCL (*cloud_filtered, *cld_transformed);
190181 break ;
191182 case Filters::PASSTHROUGH_RELATIVE :
183+ geometry_msgs::msg::TransformStamped tf_z_reference =
184+ _buffer.lookupTransform (
185+ _z_reference_frame, cloud.header .frame_id ,
186+ tf2_ros::fromMsg (cloud.header .stamp ));
187+ geometry_msgs::msg::TransformStamped tf_global_from_z_reference =
188+ _buffer.lookupTransform (
189+ _global_frame, _z_reference_frame,
190+ tf2_ros::fromMsg (cloud.header .stamp ));
192191 tf2::doTransform (cloud, *cld_transformed, tf_z_reference);
193192 pcl_conversions::toPCL (*cld_transformed, *cloud_pcl);
194193 pass_through_filter.setInputCloud (cloud_pcl);
@@ -201,6 +200,14 @@ void MeasurementBuffer::BufferROSCloud(
201200 tf2::doTransform (*cld_transformed, *cld_transformed, tf_global_from_z_reference);
202201 break ;
203202 case Filters::VOXEL_RELATIVE :
203+ geometry_msgs::msg::TransformStamped tf_z_reference =
204+ _buffer.lookupTransform (
205+ _z_reference_frame, cloud.header .frame_id ,
206+ tf2_ros::fromMsg (cloud.header .stamp ));
207+ geometry_msgs::msg::TransformStamped tf_global_from_z_reference =
208+ _buffer.lookupTransform (
209+ _global_frame, _z_reference_frame,
210+ tf2_ros::fromMsg (cloud.header .stamp ));
204211 tf2::doTransform (cloud, *cld_transformed, tf_z_reference);
205212 pcl_conversions::toPCL (*cld_transformed, *cloud_pcl);
206213 sor.setInputCloud (cloud_pcl);
@@ -216,7 +223,6 @@ void MeasurementBuffer::BufferROSCloud(
216223 default :
217224 tf2::doTransform (cloud, *cld_transformed, tf_direct_global);
218225 break ;
219-
220226 }
221227
222228 _observation_list.front ()._cloud .reset (cld_transformed.release ());
0 commit comments