laser_filters

文章详细介绍了LaserFilters包中的激光扫描滤波器,包括scan_to_scan_filter_chain和scan_to_cloud_filter_chain节点的功能,以及各种滤波器的参数配置和使用方法。
摘要由CSDN通过智能技术生成

用于在使用sensor_msgs/LaserScan类型的2D平面激光扫描仪上运行的各种滤波器。

目录

概述

使用激光滤镜

激光滤波器节点

scan_to_scan_filter_chain(laser_pipeline-0.5 中的新增功能)

ROS参数

订阅的主题

已发表的主题

示例启动文件

scan_to_cloud_filter_chain

ROS参数

订阅的主题

已发表的主题

示例启动文件

激光滤镜插件

激光阵列滤光片

参数

配置示例

扫描阴影过滤器

参数

配置示例

插值滤波器

参数

配置示例

激光扫描强度滤光片

参数

配置示例

激光扫描范围过滤器

参数

配置示例

激光扫描角度边界过滤器

参数

配置示例

激光扫描角度边界过滤器就位

参数

配置示例

激光扫描盒过滤器

参数

配置示例

激光扫描散斑滤光片

参数

配置示例


概述

Laser_filters包的主要内容是一些用于处理sensor_msgs/LaserScan消息的通用过滤器。这些过滤器作为插件导出,旨在与过滤器包一起使用。目前,所有这些过滤器都直接在sensor_msgs/LaserScan上运行,但将来可能会添加过滤器来处理sensor_msgs/PointCloud。请查看过滤器文档,了解过滤器和过滤器链如何工作的概述。

该包提供了两个可以在内部运行多个过滤器的节点。使用这些节点来运行过滤器被认为是最佳实践,因为它允许多个节点使用输出,同时仅执行一次过滤计算。这些节点是给定类型的过滤器链的最小包装器。 scan_to_scan_filter_chain一系列过滤器应用于sensor_msgs/LaserScan。 scan_to_cloud_filter_chain首先将一系列过滤器应用于sensor_msgs/LaserScan,将其转换为sensor_msgs/PointCloud ,然后一系列过滤器应用于sensor_msgs/PointCloud

使用激光滤镜

每个激光滤镜都是由 Laser_filters 包导出的单独插件。这允许它们在配置文件中指定,该配置文件可以加载到在sensor_msgs/LaserScan上模板化的任意filter_chain中。您可以将激光滤波器实例化为 C++ 中的 filter_chain(示例),也可以使用内部包含适当滤波器链的scan_to_scan_filter_chainscan_to_cloud_filter_chain节点(示例)。

过滤器链是从参数服务器配置的。他们期望一个参数,该参数是由过滤器配置的重复块组成的列表。这些几乎应该总是在要推送到参数服务器的.yaml文件中指定。链中指定的每个过滤器将按顺序应用。

各个过滤器配置包含用于调试目的的名称、用于定位插件的类型以及作为附加变量字典的参数。请查阅特定过滤器插件的文档,了解可以在 params 字段中设置哪些变量。

请注意,类型应指定为pkg_name/FilterClass,因为如果仅使用FilterClass ,则在月球之前过滤器实现的匹配行为不一定与确切的名称匹配。

例如,在包mypkg中,要启动带有两个过滤器的scan_to_scan_filter_chain : LaserFilterClass1和LaserFilterClass2,您可以使用以下文件:

my_laser_config.yaml:

scan_filter_chain:
- name: unique_name1
  type: mypkg/LaserFilterClass1
  params:
    param1: a
    param2: b
- name: unique_name2
  type: mypkg/LaserFilterClass2
  params:
    param1: a
    param2: b

然后,您可以通过运行以下命令,使用rosparam将此配置推送到参数服务器:

$ rosparam load my_laser_config.yaml scan_to_scan_filter_chain

然后启动scan_to_scan_filter_chain:

$ rosrun laser_filters scan_to_scan_filter_chain

激光滤波器节点

scan_to_scan_filter_chain(laser_pipeline-0.5 中的新增功能)

scan_to_scan_filter_chain 是一个非常小的节点,它包装了filters::FilterChain<sensor_msgs::LaserScan>的实例。该节点可用于在传入的激光扫描上运行此包中的任何过滤器。如果设置了~tf_message_filter_target_frame参数,它将等待激光和target_frame之间的转换可用,然后再运行过滤器链。

 

ROS参数

~scan_filter_chain(列表)

  • [必需]要加载的激光滤镜列表。

~tf_message_filter_target_frame(字符串)

  • 在执行 filter_chain 之前,当前时间必须存在一个 target_frame 的转换。这是内部传递给tf::MessageFilter 的target_frame 。如果未设置此参数,则链将在每次新扫描到达时立即执行。

订阅的主题

扫描(sensor_msgs/LaserScan

  • 传入的激光扫描进行过滤

已发表的主题

扫描过滤(传感器消息/激光扫描

  • 输出过滤激光扫描

示例启动文件

my_laser_filter.launch:

<launch>
  <node pkg="laser_filters" type="scan_to_scan_filter_chain"
      name="laser_filter">
    <rosparam command="load" file="$(find mypkg)/my_laser_config.yaml" />
    <remap from="scan" to="base_scan" />
  </node>
</launch>

my_laser_config.yaml:

scan_filter_chain:
- name: shadows
  type: laser_filters/ScanShadowsFilter
  params:
    min_angle: 10
    max_angle: 170
    neighbors: 20
    window: 1
- name: dark_shadows
  type: laser_filters/LaserScanIntensityFilter
  params:
    lower_threshold: 100
    upper_threshold: 10000
    disp_histogram: 0

 

scan_to_cloud_filter_chain

scan_to_cloud_filter_chain 是一个非常小的节点,它包装了filters::FilterChain<sensor_msgs::LaserScan>和filters::FilterChain<sensor_msgs::PointCloud>的实例。该节点可用于在传入的激光扫描上运行此包中的任何过滤器。执行激光滤波后,它将使用Laser_geometry中的LaserProjection将每次扫描转换为点云。然后它将运行任何基于云的过滤,并最终发布生成的云。

ROS参数

~scan_filter_chain(列表)

  • [必需]要加载的激光滤镜列表。

~cloud_filter_chain(列表)

  • [必需]要加载的云过滤器列表。

〜目标帧(字符串)

  • [必需]将点云转换成的框架。

~high_fidelity(布尔值,默认值:false)

  • 是否执行高保真变换。这种方法假设激光扫描仪在捕获激光扫描时正在移动。仅当目标帧设置为固定帧时,高保真变换才能正确工作。

订阅的主题

扫描(sensor_msgs/LaserScan

  • 对传入的激光扫描进行过滤。

已发表的主题

cloud_filtered ( sensor_msgs/点云)

  • 传出的过滤点云。

示例启动文件

my_laser_cloud_filter.launch:

<launch>
  <node pkg="laser_filters" type="scan_to_cloud_filter_chain"
      name="tilt_shadow_filter">
    <rosparam command="load" file="$(find mypkg)/my_laser_config.yaml" />
    <rosparam command="load" file="$(find mypkg)/my_cloud_config.yaml" />
    <param name="high_fidelity" value="true" />
    <param name="target_frame" type="string" value="base_link" />
    <remap from="scan" to="tilt_scan" />
    <remap from="cloud_filtered" to="tilt_scan_cloud_filtered" />
  </node>
</launch>

my_laser_config.yaml:

scan_filter_chain:
- name: shadows
  type: laser_filters/ScanShadowsFilter
  params:
    min_angle: 10
    max_angle: 170
    neighbors: 20
    window: 1
- name: dark_shadows
  type: laser_filters/LaserScanIntensityFilter
  params:
    lower_threshold: 100
    upper_threshold: 10000
    disp_histogram: 0

my_cloud_config.yaml:

cloud_filter_chain:
- type: PR2PointCloudFootprintFilter
  name: footprint_filter
  params:
    inscribed_radius: 0.325

激光滤镜插件

激光阵列滤光片

该过滤器在内部使用了浮点数组过滤器的过滤器实现。它提取范围和强度值,并将每个值视为通过内部过滤器链的独立浮点数组。

参数

range_filter_chain(过滤器链)

  • 嵌套过滤器链描述,描述适当的MultiChannelMedianFilterFloat类型过滤器链。

强度过滤器链(过滤器链)

  • 嵌套过滤器链描述,描述适当的MultiChannelMedianFilterFloat类型过滤器链。

确保使用两个参数(range_filter_chainintensity_filter_chain

配置示例
scan_filter_chain:
- type: laser_filters/LaserArrayFilter
  name: laser_median_filter
  params:
    range_filter_chain:
      - name: median_5
        type: filters/MultiChannelMedianFilterFloat
        params:
          number_of_observations: 5
          unused: 10
    intensity_filter_chain:
      - name: median_5
        type: filters/MultiChannelMedianFilterFloat
        params:
          number_of_observations: 5
          unused: 10

扫描阴影过滤器

该过滤器消除了扫描物体边缘时很可能由遮蔽效应引起的激光读数。对于任意两点 p_1 和 p_2,我们通过计算垂直角来实现这一点。如果垂直角小于特定的最小值或大于特定的最大值,我们将删除比该点更远的所有邻居。

参数

最小角度(双精度)

  • 最小垂直角(度)

最大角度(双精度)

  • 最大垂直角度(度)

窗口(整数)

  • 考虑内部角度的连续测量次数

邻居(整数)

  • 要删除的较远邻居的数量

配置示例
scan_filter_chain:
- name: shadows
  type: laser_filters/ScanShadowsFilter
  params:
    min_angle: 10
    max_angle: 170
    neighbors: 20
    window: 1

插值滤波器

对于扫描中的任何无效测量,插值得出的测量结果是周围良好值之间的插值。

参数

没有任何

配置示例
scan_filter_chain:
- name: interpolation
  type: laser_filters/InterpolationFilter

激光扫描强度滤光片

此过滤器从sensor_msgs/LaserScan中删除强度大于upper_threshold或小于lower_threshold的所有测量值。通过将相应的范围值设置为range_max + 1 来“删除”这些点,这被认为是错误情况。

参数

下限阈值(双精度)

  • 强度值低于该值读数将会下降。

上限阈值(双精度)

  • 强度值,高于该值读数将会下降。

显示直方图(int)

  • 是否将强度直方图写入标准输出。 (0 或 1)

配置示例
scan_filter_chain:
- name: intensity
  type: laser_filters/LaserScanIntensityFilter
  params:
    lower_threshold: 8000
    upper_threshold: 100000
    disp_histogram: 0

激光扫描范围过滤器

此过滤器从sensor_msgs/LaserScan中删除大于upper_threshold或小于lower_threshold的所有测量值。通过将相应的范围值设置为NaN来“删除”这些点,这被假定为错误情况或lower_replacement_value / upper_replacement_value。如果use_message_range_limits为 true,则使用激光扫描消息内的范围。

参数

下限阈值(双精度)

  • 范围阈值下限

上限阈值(双精度)

  • 范围上限

use_message_range_limits (布尔)

  • 使用激光扫描消息中的range_min和range_max值作为阈值。默认为false

lower_replacement_value(双精度)

  • 将此值用于所有 < lower_threshold的测量。默认值:NaN

upper_replacement_value(双精度)

  • 将此值用于所有测量 > upper_threshold。默认值:NaN

配置示例
scan_filter_chain:
- name: range
  type: laser_filters/LaserScanRangeFilter
  params:
    use_message_range_limits: false
    lower_threshold: 0.3
    upper_threshold: .inf
    lower_replacement_value: -.inf
    upper_replacement_value: .inf

激光扫描角度边界过滤器

此过滤器通过更改最小和最大角度来删除sensor_msgs/LaserScan中某些角度范围之外的点。

参数

下角(双)

  • 最小角度(弧度)

上角(双)

  • 最大角度(弧度)

配置示例
scan_filter_chain:
- name: angle
  type: laser_filters/LaserScanAngularBoundsFilter
  params:
    lower_angle: -1.57
    upper_angle: 1.57

激光扫描角度边界过滤器就位

此过滤器删除sensor_msgs/LaserScan中某些角度范围内的点。通过将相应的范围值设置为range_max + 1 来“删除”这些点,这被认为是错误情况。

参数

下角(双)

  • 最小角度(弧度)

上角(双)

  • 最大角度(弧度)

配置示例
scan_filter_chain:
- name: angle
  type: laser_filters/LaserScanAngularBoundsFilterInPlace
  params:
    lower_angle: 0.685398163
    upper_angle: 0.885398163


激光扫描盒过滤器

此过滤器删除笛卡尔框内的sensor_msgs/LaserScan中的点。通过将相应的范围值设置为 NaN(假定为错误情况)来“删除”这些点。

参数

框框(字符串)

  • tf帧 ID

min_x(双精度)

  • 最小笛卡尔 x

max_x(双精度)

  • 最大笛卡尔 x

min_y(双精度)

  • 最小笛卡尔 y

最大y(双)

  • 最大笛卡尔 y

min_z(双精度)

  • 最小笛卡尔 z

max_z(双精度)

  • 最大笛卡尔 z

配置示例
scan_filter_chain:
- name: box
  type: laser_filters/LaserScanBoxFilter
  params:
    box_frame: scan_link
    min_x: -1.0
    max_x: 1.0
    min_y: -1.0
    max_y: 1.0
    min_z: -1.0
    max_z: 1.0

激光扫描散斑滤光片

此过滤器删除sensor_msgs/LaserScan中的异常值。此过滤器有两种可用的过滤方法。

通过将相应的范围值设置为 NaN 来“删除”这些点。

参数

过滤器类型(int)

  • 过滤方式选择
    • 0:基于范围的过滤(连续点之间的距离)
    • 1:基于半径异常值搜索的欧氏过滤

最大范围(双精度)

  • 仅考虑小于此范围的范围

最大范围差异(双精度)

  • 距离:连续点之间的最大距离 - RadiusOutlier:点之间的最大距离

过滤器窗口(双)

  • 最小邻居数

配置示例
scan_filter_chain:
- name: speckle_filter
  type: laser_filters/LaserScanSpeckleFilter
  params:
    filter_type: 0
    max_range: 2.0
    max_range_difference: 0.1
    filter_window: 2

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值