laser_filters无效雷达数据屏蔽

参考链接

wiki.ros.org/laser_filters

功能简介

激光雷达通常可以检测360°或270°范围内的物体距离,但是由于机械结构设计等原因,机器人本体可能会遮挡部分雷达扫描数据。如果将激光雷达的原始数据直接用于SLAM建图或者导航,则机器人本体的一部分会被当作“障碍物”导致建图或导航无法正常工作。

为了解决这个问题,就需要对激光雷达的原始数据做处理,屏蔽掉已知不需要的数据来获得“纯净”的雷达数据。

laser_filters功能包中一共支持9种屏蔽方式,本文我们介绍最常见的两种屏蔽方式,角度范围屏蔽和BOX范围屏蔽。

使用前准备

安装laser_filters

sudo apt install ros-$ROS_DISTRO-laser-filters

创建一个新功能包用于存放launch文件和配置文件,例如laser_filter_test

cd ~/catkin_ws/src/ && catkin_create_pkg laser_filter_test

在功能包中创建launch和config两个目录

角度范围屏蔽示例

在config目录中创建angle.yaml配置文件,写入以下内容。即屏蔽雷达坐标系下-2.5~2.5弧度之间的数据

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

在launch目录中创建angle_filter.launch文件,写入以下内容

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

启动激光雷达,根据你所实际使用的激光雷达信号启动对应的雷达驱动节点,使用冰达机器人可以通过下面命令启动。

roslaunch robot_navigation lidar.launch

然后启动雷达角度屏蔽

roslaunch laser_filter_test angle_filter.launch 

打开rviz,配置显示页面。将原始数据配置为红色显示,过滤后的数据为绿色显示,可以看到雷达后方为空白,即没有有效数据,范围约为-143°~143°

BOX范围屏蔽示例

在config目录中创建box.yaml配置文件,写入以下内容。即以base_laser_link坐标系为基准,屏蔽距离

scan_filter_chain:
- name: box
  type: laser_filters/LaserScanBoxFilter
  params:
    box_frame: base_laser_link
    min_x: -0.2
    max_x: 0.2
    min_y: -0.2
    max_y: 0.2
    min_z: -0.2
    max_z: 0.2

在launch目录中创建box_filter.launch文件,写入以下内容

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

 启动激光雷达,根据你所实际使用的激光雷达信号启动对应的雷达驱动节点,使用冰达机器人可以通过下面命令启动。

roslaunch robot_navigation lidar.launch

然后启动雷达BOX屏蔽

roslaunch laser_filter_test box_filter.launch 

打开并配置rviz后可以看到,在划定的方框内,雷达原始数据又检测到物体,而过滤后的数据则没有显示

猜你喜欢

转载自blog.csdn.net/bingda_robot/article/details/128048306