两轮差速底盘SLAM系列(12)--laser_filters功能包的使用

本文最后更新于:2022年5月29日 上午

前言

最近搞了个思岚A2激光雷达回来,在实际应用开发中,发现它官方没有给出自定义使用特定角度激光雷达数据的接口配置(比如我只需要激光雷达前面180°的数据,后面的数据不需要),这就有点不方便了。之前使用EAI-X4激光雷达的时候可以直接在launch文件进行配置就可以了,现在这个没有接口可以配置,那就只能另寻它法了。

经过查找资料,发现强大ROS社区里面的大牛们早就帮我们解决了这个问题,直接使用——laser_filters功能包即可以轻松解决上面的问题。

laser_filters功能包介绍

总结一下,此滤波器可以实现:

  • LaserArrayFilter:将激光雷达数据放入一个数组中以便其他操作;
  • ScanShadowsFilter:过滤掉可能因为遮挡效应而产生的数据;
  • InterpolationFilter:向可信点间插入数据;
  • LaserScanIntensityFilter:过滤掉给定密度上下界范围之外的数据;
  • LaserScanRangeFilter:过滤掉指定扫描距离范围之外的雷达数据;
  • LaserScanAngularBoundsFilter:过滤掉指定扫描角度范围之外的雷达数据;
  • LaserScanAngularBoundsFilterInPlace:过滤掉指定扫描角度范围之内的雷达数据(与上面刚好相反);
  • LaserScanBoxFilter:过滤掉指定的box范围内额数据。

详细功能说明看laser_filters wiki,里面有很详细的说明和例子,参照例子来修改一下基本就可以使用了。

使用方法

这个滤波器是针对2D激光雷达的,主要操作也就是设置参数放在yaml文件里,消息转换和参数加载放在launch文件里即可,下面直接使用LaserScanAngularBoundsFilter例子来说明。

插件参数配置

将设定的角度外的扫描数据删除

1
2
lower_angle(double): 最小角度(rad) (π/180)*angle
upper_angle(double): 最大角度(rad) (π/180)*angle

在功能包目录下新建一个angular_bounds_filter.yaml文件(我把文件保存在了功能包agv_car/param目录下),参数设置示例:

1
2
3
4
5
6
scan_filter_chain:
- name: angle
type: laser_filters/LaserScanAngularBoundsFilter
params:
lower_angle: -1.57
upper_angle: 1.57

加载参数

直接在激光雷达launch文件加载参数,比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<launch>
<node name="rplidarNode" pkg="rplidar_ros" type="rplidarNode" output="screen">
<param name="serial_port" type="string" value="/dev/ttyUSB0"/>
<param name="serial_baudrate" type="int" value="115200"/><!--A1/A2 -->
<param name="frame_id" type="string" value="laser_frame"/>
<param name="inverted" type="bool" value="false"/>
<param name="angle_compensate" type="bool" value="true"/>
</node>
<node pkg="tf" type="static_transform_publisher" name="baselink_to_lasera2"
args="0.19 0.0 0.31 0.0 0.0 0.0 /base_footprint /laser_frame 40" />

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

最后面的节点就是加载滤波参数。

运行效果

配置好参数后,直接启动激光雷达节点,使用rviz订阅/scan_filtered话题,即可看到的效果:

1
2
roslaunch agv_car laser_a2.launch
rviz

从下图可以看到只有前面180°的激光雷达扫描的数据。

8pxtUS.png


两轮差速底盘SLAM系列(12)--laser_filters功能包的使用
https://kevinloongc.github.io/posts/33000.html
作者
Kevin Loongc
发布于
2020年3月9日
许可协议