Skip to content

Commit 7583c6b

Browse files
committed
requested changes (not finished)
1 parent b30f904 commit 7583c6b

File tree

3 files changed

+34
-32
lines changed

3 files changed

+34
-32
lines changed

spatio_temporal_voxel_layer/include/spatio_temporal_voxel_layer/spatio_temporal_voxel_layer.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ class SpatioTemporalVoxelLayer : public nav2_costmap_2d::CostmapLayer
180180
rclcpp::Service<spatio_temporal_voxel_layer::srv::SaveGrid>::SharedPtr _grid_saver;
181181
std::unique_ptr<rclcpp::Duration> _map_save_duration;
182182
rclcpp::Time _last_map_save_time;
183-
std::string _global_frame, _footprint_frame;
183+
std::string _global_frame, _robot_base_frame;
184184
double _voxel_size, _voxel_decay;
185185
int _combination_method, _mark_threshold;
186186
volume_grid::GlobalDecayModel _decay_model;
@@ -192,7 +192,6 @@ class SpatioTemporalVoxelLayer : public nav2_costmap_2d::CostmapLayer
192192

193193
std::string _topics_string;
194194

195-
196195
// Dynamic parameters handler
197196
rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr dyn_params_handler;
198197
};

spatio_temporal_voxel_layer/src/measurement_buffer.cpp

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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());

spatio_temporal_voxel_layer/src/spatio_temporal_voxel_layer.cpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,9 @@ void SpatioTemporalVoxelLayer::onInitialize(void)
111111
// use 3d transform for clearing footprint
112112
declareParameter("footprint_projection_enabled", rclcpp::ParameterValue(false));
113113
node->get_parameter(name_ + ".footprint_projection_enabled", _footprint_projection_enabled);
114-
// footprint frame ( used only with footprint projection enabled )
115-
declareParameter("footprint_frame", rclcpp::ParameterValue(std::string("")));
116-
node->get_parameter(name_ + ".footprint_frame", _footprint_frame);
114+
// robot base frame ( necessary for 3d footprint projection )
115+
declareParameter("robot_base_frame", rclcpp::ParameterValue(std::string("")));
116+
node->get_parameter(name_ + ".robot_base_frame", _robot_base_frame);
117117
// keep tabs on unknown space
118118
declareParameter(
119119
"track_unknown_space",
@@ -251,7 +251,6 @@ void SpatioTemporalVoxelLayer::onInitialize(void)
251251
node->get_parameter(name_ + "." + source + "." + "model_type", model_type_int);
252252
ModelType model_type = static_cast<ModelType>(model_type_int);
253253

254-
255254
if (filter_str == "passthrough") {
256255
RCLCPP_INFO(logger_, "Passthough filter activated.");
257256
filter = buffer::Filters::PASSTHROUGH;
@@ -569,17 +568,15 @@ bool SpatioTemporalVoxelLayer::updateFootprint(
569568
try {
570569
geometry_msgs::msg::TransformStamped tf_footprint_stamped =
571570
tf_->lookupTransform(
572-
_global_frame, _footprint_frame,
573-
rclcpp::Time(0));
574-
575-
_transformed_footprint = getFootprint();
576-
for (unsigned int i = 0; i < _transformed_footprint.size(); i++) {
577-
tf2::doTransform(_transformed_footprint[i], _transformed_footprint[i], tf_footprint_stamped);
571+
_global_frame, _robot_base_frame,
572+
rclcpp::Clock.now());
573+
std::vector<geometry_msgs::Point> temp_footprint = getFootprint();
574+
for (unsigned int i = 0; i < temp_footprint.size(); i++) {
575+
tf2::doTransform(temp_footprint[i], temp_footprint[i], tf_footprint_stamped);
578576
touch(
579-
_transformed_footprint[i].x, _transformed_footprint[i].y,
577+
temp_footprint[i].x, temp_footprint[i].y,
580578
min_x, min_y, max_x, max_y);
581579
}
582-
583580
} catch (tf2::TransformException &ex) {
584581
RCLCPP_WARN(
585582
rclcpp::get_logger("SpatioTemporalVoxelLayer"),

0 commit comments

Comments
 (0)