[Documentation] [TitleIndex] [WordIndex

  Show EOL distros: 

laser_pipeline: laser_assembler | laser_filters | laser_geometry

Package Summary

Assorted filters designed to operate on 2D planar laser scanners, which use the sensor_msgs/LaserScan type.

laser_pipeline: laser_assembler | laser_filters | laser_geometry

Package Summary

Assorted filters designed to operate on 2D planar laser scanners, which use the sensor_msgs/LaserScan type.

laser_pipeline: laser_assembler | laser_filters | laser_geometry

Package Summary

Assorted filters designed to operate on 2D planar laser scanners, which use the sensor_msgs/LaserScan type.

laser_pipeline: laser_assembler | laser_filters | laser_geometry

Package Summary

Assorted filters designed to operate on 2D planar laser scanners, which use the sensor_msgs/LaserScan type.

Overview

The primary content of the laser_filters package is a number of general purpose filters for processing sensor_msgs/LaserScan messages. These filters are exported as plugins designed to work with with the filters package. At the moment all of these filters run directly on sensor_msgs/LaserScan, but filters may be added in the future which process sensor_msgs/PointCloud instead. Please review the filters documentation for an overview of how filters and filter chains are intended to work.

This package provides two nodes that can run multiple filters internally. Using these nodes to run your filters is considered best practice, since it allows multiple nodes to consume the output while only performing the filtering computation once. The nodes are minimal wrappers around filter chains of the given type. The scan_to_scan_filter_chain applies a series of filters to a sensor_msgs/LaserScan. The scan_to_cloud_filter_chain first applies a series of filters to a sensor_msgs/LaserScan, transforms it into a sensor_msgs/PointCloud, and then applies a series of filters to the sensor_msgs/PointCloud.

Using Laser Filters

Each laser filter is a separate plugin exported by the laser_filters package. This allows them to be specified in a configuration file which can be loaded into an arbitrary filter_chain templated on a sensor_msgs/LaserScan. You can instantiate a laser filter into a filter_chain in C++ (example), or you can use the scan_to_scan_filter_chain and scan_to_cloud_filter_chain nodes which contain appropriate filter chains internally (example).

Filter chains are configured from the parameter server. They expect a parameter which is a list made up of repeating blocks of filter configurations. These should almost always be specified in a .yaml file to be pushed to the parameter server. Each filter specified in the chain will be applied in order.

The individual filters configurations contain a name which is used for debugging purposes, a type which is used to locate the plugin, and a params which is a dictionary of additional variables. Consult the documentation for the particular filter plugin to see what variables may be set in the params field.

Note that the type should be specified as pkg_name/FilterClass as the matching behavior of the filters implementation before lunar is not necessarily matching the exact name, if only the FilterClass is used.

For example, in a package, mypkg, to launch a scan_to_scan_filter_chain with two filters: LaserFilterClass1 and LaserFilterClass2, you could use the file:

my_laser_config.yaml:

You could then push this configuration to the parameter server using rosparam by running:

And then launching the scan_to_scan_filter_chain:

Laser Filter Nodes

scan_to_scan_filter_chain (new in laser_pipeline-0.5)

The scan_to_scan_filter_chain is a very minimal node which wraps an instance of a filters::FilterChain<sensor_msgs::LaserScan>. This node can be used to run any filter in this package on an incoming laser scan. If the ~tf_message_filter_target_frame parameter is set, it will wait for the transform between the laser and the target_frame to be available before running the filter chain.

scan_to_scan_filter_chain.png

ROS Parameters

~scan_filter_chain (list)

~tf_message_filter_target_frame (string)

Subscribed Topics

scan (sensor_msgs/LaserScan)

Published Topics

scan_filtered (sensor_msgs/LaserScan)

Example Launch File

my_laser_filter.launch:

my_laser_config.yaml:

scan_to_cloud_filter_chain

The scan_to_cloud_filter_chain is a very minimal node which wraps an instances of filters::FilterChain<sensor_msgs::LaserScan> and filters::FilterChain<sensor_msgs::PointCloud>. This node can be used to run any filter in this package on an incoming laser scan. After performing the laser filtering, it will use the LaserProjection from laser_geometry to transform each scan into a point cloud. It will then run any cloud-based filtering, and finally publish the resultant cloud.

scan_to_cloud_filter_chain.png

ROS Parameters

~scan_filter_chain (list)

~cloud_filter_chain (list)

~target_frame (string)

~high_fidelity (bool, default: false)

Subscribed Topics

scan (sensor_msgs/LaserScan)

Published Topics

cloud_filtered (sensor_msgs/PointCloud)

Example Launch File

my_laser_cloud_filter.launch:

my_laser_config.yaml:

my_cloud_config.yaml:

Laser Filter Plugins

LaserArrayFilter

This filter internally makes use of the the filters implementation of float-array filters. It extracts the range and intensity values and treats each as an independent float array passed through an internal filter chain.

Parameters

range_filter_chain (FilterChain)

intensity_filter_chain (FilterChain)

Make sure to use both parameters ( range_filter_chain and intensity_filter_chain )

Example Configuration

ScanShadowsFilter

This filter removes laser readings that are most likely caused by the veiling effect when the edge of an object is being scanned. For any two points $$p_1$$ and $$p_2$$, we do this by computing the perpendicular angle. That is, assuming the origin of the laser is $$O$$, the angle formed $$\angle OP_1P_2$$. If the perpendicular angle is less than a particular min or greater than a particular max, we remove all neighbors further away than that point.

Parameters

min_angle (double)

max_angle (double)

window (int)

neighbors (int)

Example configuration

InterpolationFilter

For any measurement in the scan which is invalid, the interpolation comes up with a measurement which is an interpolation between the surrounding good values.

Parameters

NONE

Example configuration

LaserScanIntensityFilter

This filter removes all measurements from the sensor_msgs/LaserScan which have an intensity greater than upper_threshold or less than lower_threshold. These points are "removed" by setting the corresponding range value to range_max + 1, which is assumed to be an error case.

Parameters

lower_threshold (double)

upper_threshold (double)

disp_histogram (int)

Example configuration

LaserScanRangeFilter

This filter removes all measurements from the sensor_msgs/LaserScan which are greater than upper_threshold or less than lower_threshold. These points are "removed" by setting the corresponding range value to NaN, which is assumed to be an error case or lower_replacement_value/upper_replacement_value. If use_message_range_limits is true, the range within the laserscan message is used.

Parameters

lower_threshold (double)

upper_threshold (double)

use_message_range_limits (bool)

lower_replacement_value (double)

upper_replacement_value (double)

Example configuration

LaserScanAngularBoundsFilter

This filter removes points in a sensor_msgs/LaserScan outside of certain angular bounds by changing the minimum and maximum angle.

Parameters

lower_angle (double)

upper_angle (double)

Example configuration

LaserScanAngularBoundsFilterInPlace

This filter removes points in a sensor_msgs/LaserScan inside of certain angular bounds. These points are "removed" by setting the corresponding range value to range_max + 1, which is assumed to be an error case.

Parameters

lower_angle (double)

upper_angle (double)

Example configuration

LaserScanBoxFilter

This filter removes points in a sensor_msgs/LaserScan inside of a cartesian box. These points are "removed" by setting the corresponding range value to NaN which is assumed to be an error case.

Parameters

box_frame (string)

min_x (double)

max_x (double)

min_y (double)

max_y (double)

min_z (double)

max_z (double)

Example configuration


2019-07-13 12:50