ROS之 laser_filters 激光过滤包

  为了测试 laser_filters 过滤效果,首先使用 CoppeliaSim 软件搭建了简单的测试场景,为了搞的跟真实相近,我在软件的基础上对前轮转向模型,sick laser 模型进行修改,添加四个支撑柱测试软件包对支撑柱的过滤效果,其中sick激光模型会发布 base_link 到 laser 的静态 tf 以及/scan topic 到ros,laser_filters 包会订阅/scan topic 过滤发布 /scan_filtered,最终通过 rviz 同时显示/scan(红色点标记)和/scan_filtered (绿色点标记)topic 进行对比。废话不多说,直接上图:

在这里插入图片描述

图1 CoppeliaSim场景

在这里插入图片描述

图2 rviz显示

  如图2 蓝色圈中红色激光点为270度激光扫到的支撑柱,laser_filters 只进行了角度的过滤(其他过滤器可自行测试),可发现蓝圈内无绿色的激光点。launch 启动文件和 yaml 参数文件如下:

test.yaml

scan_filter_chain:
  - name: angle
    type: laser_filters/LaserScanAngularBoundsFilter
    params: {
    
    lower_angle: -2.0, upper_angle: 2.0} # filter -114.6 ~ 114.6deg

test.launch

<launch>
    <node pkg="laser_filters" type="scan_to_scan_filter_chain" output="screen" name="front_laser">
         <rosparam command="load" file="$(find laser_filters)/param/test.yaml" />
    </node>
</launch>

通过插件可以配置下列滤波器:

  • LaserScanRangeFilter 设定距离阈值,超出则设置为nan
  • ScanShadowsFilter 针对物体边沿的扫描和识别
  • LaserScanAngularBoundsFilter 将设定的角度外的扫描数据删除
  • LaserScanBoxFilter 无视一个区块内的数据(常用于无视机器人本体对激光雷达数据的干扰)
  • LaserScanAngularBoundsFilterInPlace 不会删除目标角度扇区外的数据,但会把对应扫描的距离值设为最大距离阈值+1
  • InterpolationFilter 插值滤波
  • LaserScanIntensityFilter 设定强度阈值,超出则设置为nan
  • LaserArrayFilter 使用中值过滤器等对距离和强度进行过滤

另可参考:

  • 中文翻译
  • ROS wiki
  • https://www.jianshu.com/p/2bd3261af2bf
  • https://blog.csdn.net/weixin_38437252/article/details/90020543
  • https://blog.csdn.net/seeseeatre/article/details/79191737

猜你喜欢

转载自blog.csdn.net/Csdn_Darry/article/details/110732097