首先我的平台是ROS Kinetic Ubuntu 16.04。
但是我认为其他平台也是大同小易。由于此方面的内容很多博客都做了wiki翻译,我就懒得再复读这些东西,直接讲怎么操作,因为,我没有搜到直接讲操作的博文……
详细英文内容请参考:http://wiki.ros.org/laser_filters
总结一下,此滤波器可以实现:
这个滤波器是针对2D激光雷达的。常见的2D激光雷达有贵族之选:HOKUYO,屌丝之选:国产的,绝望之选:Kinect V1或者V2。具体使用方法都比较容易找到,不在此赘述。
总之,我们假定你的rostopic list里面,有了/scan,消息类型为:sensor_msgs/LaserScan
1 将https://github.com/ros-perception/laser_filters这个工程直接导入你的CATKIN工程空间的src文件夹,常规ROS操作,类似这样:
cd 到你的src目录
git clone https://github.com/ros-perception/laser_filters.git
如果使用的是roboware,直接于工程根目录:catkin_make 即可
编译之后,可以使用了。
2 想办法让你的/scan话题信息开始更新。
3 开新终端,切换到src/laser_filters/examples目录,这里以中值滤波器为例。运行:
rosparam load median_filter_5_example.yaml scan_to_scan_filter_chain
rosrun laser_filters scan_to_scan_filter_chain
可能出现如下画面:
不用理会warn。
4 开新终端,运行:
source ~/你的工程目录/devel/setup.bash
roslaunch laser_filters median_filter_5_example.launch
此时会有:
此时我们再去rostopic list查看,并echo:laserscan_filtered,就可以发现过滤数据的变化了。
如何显示 /scan 数据,本处暂不做讨论。使用rviz和ROS导航包是可以实现的,实际上就是建图问题,例如这个教程:https://blog.csdn.net/forrest_z/article/details/56665631
这个滤波器的原理,是把滤波器编译成lib文件然后使用,并不是简单的ROS节点。因此,直接就去运行例子中的launch是不行的,需要如本文所述,先运行rosparam参数,然后rosrun 启动 scan_to_scan_filter_chain,目的是,让雷达扫描的每一帧数据先形成一个很大的多维数组,再干后续的滤波等等操作,也就是官方给出的example操作。
由于官方给的操作顺序说明有点语焉不详,特此简述与此。
只给了中值滤波的例子,其他的一样,只要先rosrun了scan_to_scan_filter_chain就好。
echo出来的效果差不多这样,怎样视觉化、怎么后续处理是另一个话题了。