Subsamples a point cloud to only include information about obstacles and free space, represented as two different z-levels
NOTE: I no longer work in the field of robotics, this is not maintained. But
hopefully the ideas and techniques presented here might be of use to you. Or the
software itself might even still work!
Subsample a point cloud to lower density. Intended usage is as input to
a costmap or other obstacle avoidance system.
This nodelet splits the point cloud into grid cells and puts one z level into
each cell that contains an obstacle and another into each cell that contains no
obstacles.
This node will also remap into the target TF frame (before processing). This
is useful if your point cloud TF frame is in a weird orientation.
Note! This depends on ros_spatial_utils.
points
(sensor_msgs/PointCloud2
) - Input high density cloud.subsampled_points
(sensor_msgs/PointCloud2
) - Output low density cloud.The node only does processing if it has subscribers.
Dynamic reconfigure is supported.
min_z
(double
, default: 0.0) - Minimum z for obstacles (m)min_z_slope
(double
, default: 0.0) - Slope coefficient for increasingmin_z
as a function of distance from the sensormax_z
(double
, default: 2.0) - Maximum z for obstacles (m)free_z
(double
, default: 0.0) - Published z for free space (m)obstacle_z
(double
, default: 1.0) - Published z for obstacles (m)resolution
(double
, default: 0.0) - Distance between output points (m)max_dist
(double
, default: 4.0) - Maximum Euclidean distance from sensor in the plane (m)tf_timeout
(double
, default: 0.1) - Timeout for waiting for TF transform (s)target_frame
(string
, default: “base_footprint”) - Target TF frameThe slope coefficient might need some further explanation: Basically the range
is multiplied with this value and added to min_z. This allows increasing the
minimum height of obstacles the further away from the sensor to deal with errors
that are range-dependent (such as noise from a stereo camera, as well as
imprecise tilt alignment).