preprocessing¶
What happens to a scan between arriving and being registered. Filters drop points before they cost anything downstream, so anything excluded here is work the registration never has to do.
| Option | Default | Starter |
|---|---|---|
initial_scan_accumulate |
3 |
|
downsample |
||
bypass_output_downsample |
true |
yes |
point_skip |
1 |
|
backend |
Backend |
|
query_resolution_factor |
0.5 |
|
filter |
||
horizontal_fov |
false |
|
bounding_box |
||
x |
.. |
|
y |
.. |
|
z |
.. |
|
invert |
false |
|
distance |
||
range |
4m.. |
|
invert |
false |
|
horizontal_fov |
||
degrees |
.. |
|
forward |
[1.0, 0.0] |
|
invert |
false |
|
polygon_2d |
||
coords |
[] |
|
global_zero_frame |
"" |
|
invert |
false |
|
intensity |
||
values |
.. |
|
invert |
false |
preprocessing.initial_scan_accumulate¶
How many scans at the very start are merged into one before registration begins. A single scan from a non-repetitive scan pattern covers too little of the surroundings to build a map from, so the platform has to stand still until this many scans have arrived.
Type: integer.
Minimum: 0 (inclusive).
preprocessing.downsample¶
Reduces the number of points that reach the registration.
preprocessing.downsample.bypass_output_downsample¶
Publish the full undistorted cloud on the output topic. This changes only what is published. Registration always uses the downsampled cloud.
Type: boolean.
Part of the starter configuration.
preprocessing.downsample.point_skip¶
Downsample the incoming scan by keeping only every n-th point. 1 means no points are skipped.
Type: integer.
Minimum: 0 (inclusive).
preprocessing.downsample.backend¶
Where the downsampling runs. Backend uses the active acceleration backend when one is available, CPU always uses the CPU path.
Accepted values: cpu, backend
Accepted values are case-insensitive.
preprocessing.downsample.query_resolution_factor¶
Expected feature size in the incoming scan, as a factor of registration.map.resolution. Values between 0.0 and 1.0 are expected.
Type: number.
preprocessing.filter¶
Point filters. Each one is skipped while it is left at its default, and a point has to pass all of them to reach the registration.
preprocessing.filter.horizontal_fov¶
Keeps points within a horizontal angular sector, measured around the forward axis below. Useful where part of the field of view is permanently blocked, for example by a mast or an arm.
Type: boolean.
preprocessing.filter.bounding_box¶
Keeps points inside an axis-aligned box, given as one range per axis in the LiDAR frame. An open end means no limit on that side, so the default ".." on all three axes is a box of infinite size and keeps everything.
preprocessing.filter.bounding_box.x¶
Range along x, for example 1m..3m.
Type: range<length>.
preprocessing.filter.bounding_box.y¶
Range along y, for example 2m.. for everything beyond 2 metres.
Type: range<length>.
preprocessing.filter.bounding_box.z¶
Range along z, for example 4cm..100m.
Type: range<length>.
preprocessing.filter.bounding_box.invert¶
Keep the points outside the box instead of the ones inside it.
Type: boolean.
preprocessing.filter.distance¶
Keeps points whose distance from the sensor origin falls in this range. The default drops everything closer than 4 metres, which is usually the robot itself.
preprocessing.filter.distance.range¶
For example ..2m for everything up to 2 metres, or 1cm..4m for a band.
Type: range<length>.
preprocessing.filter.distance.invert¶
Keep the points outside the range instead of the ones inside it.
Type: boolean.
preprocessing.filter.horizontal_fov¶
preprocessing.filter.horizontal_fov.degrees¶
Angular range in degrees, for example 10..42.
Type: range<number>.
preprocessing.filter.horizontal_fov.forward¶
Axis the angular range is measured from, as [x, y] in the LiDAR frame.
Type: array<number>.
preprocessing.filter.horizontal_fov.invert¶
Keep the points outside the sector instead of the ones inside it.
Type: boolean.
preprocessing.filter.polygon_2d¶
Keeps points inside an arbitrary polygon in the ground plane, for cases a box or a sector cannot describe.
preprocessing.filter.polygon_2d.coords¶
Vertices in order, for example [ [1.0m, -1.5m], [-1.0m, 1.5m], [0m, 0m] ]. An empty list disables the filter.
Type: array<array<length>>.
preprocessing.filter.polygon_2d.global_zero_frame¶
TF frame the coordinates are given in. When set, the polygon is transformed into the sensor frame before it is applied, which makes it possible to express a boundary that stays fixed in the world while the robot moves. Empty means the coordinates are in the LiDAR frame.
preprocessing.filter.polygon_2d.invert¶
Keep the points outside the polygon instead of the ones inside it.
Type: boolean.
preprocessing.filter.intensity¶
Keeps points whose intensity falls in this range. Useful for dropping returns from retroreflective surfaces, which saturate and report a geometry that is not there.
preprocessing.filter.intensity.values¶
Range, normalized to 0.0..1.0.
Type: range<float>.
preprocessing.filter.intensity.invert¶
Keep the points outside the range instead of the ones inside it.
Type: boolean.