- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ROS、PCL点云滤波
硬件 :Kinect2、UR5。
软件 :Ubuntu16.04、ROS kinetic。
经处理的Kinect点云包含噪声、视野范围太⼤,所以需要对其进⾏处理。我采⽤了直通、半径、体素三种⽅式。
以下内容纯属个⼈学习,如有错误,欢迎指正,不胜感激 !!
1、、PCL滤滤波波学学 习习
下⾯是我所使⽤的三种滤波,仅有滤波器的主体和参数设置部分 (ROS下只⽤到了这些)。
直直通通滤滤波波
保留或删除某⼀轴线特定范围内的点,改变视野范围。
pcl::PassThroughpcl::PointXYZ pass; //创建滤波器
pass.set nputCloud (cloud) ; //设置点云输⼊
pass.setFilterFieldName (z) ; //设置滤波的⽅向,z轴
pass.setFilterLimits (0.0, 1.0) ; //设置滤波的范围
//pass.setFilterLimitsNegative (true) ; //设置范围内点云保留还是过滤,默认保留
pass.filter (*cloud_filtered) ; //执⾏滤波
体体 素素滤滤波波
使⽤体素⽹格进⾏下采样,这么做减少了点云的数量和数据 (并没有发现变化)、保留点云表⾯的形状体征,可以提⾼配准、表⾯重建等。
pcl::VoxelGridpcl::PCLPointCloud2 sor; //创建体素滤波器
sor.set nputCloud (cloud) ; //设置点云输⼊
sor.setLeafSize (0.01f, 0.01f, 0.01f) ; //设置滤波的体素⼤⼩,0.01m⽴⽅体
sor.filter (*cloud_filtered) ; //执⾏滤波
半半径径滤滤波波
降噪,删除该图像内符合约束条件的点。
pcl::RadiusOutlierRemovalpcl::PointXYZ outrem; //创建半径滤波
outrem.set nputCloud(cloud) ; //设置点云输⼊
outrem.setRadiusSearch(0.8) ; //设置查询半径,0.8m,并查询该邻域
outrem.setMinNeighbors nRadius (2) ; //该邻域内点的个数⼩于XX则删除
outrem.filter (*cloud_filtered) ; //执⾏滤波
2、、ROS下下的的PCL
创创建建 ROS package
cd ~/catkin_ws/src
catkin_create_ pkg my_ pcl_tutorial pcl_conversions pcl_ ros roscpp sensor_ msgs
打开package.xml,在⽂本后添加
build_dependlibpcl-all-dev/build_depend
exec_dependlibpcl-all/exec_depend
⽰⽰例例程程序序 ((新新 ⼿⼿上上路路))
这是原始的⽰例程序,看不懂的出门右拐 (开玩笑 !具体的流程在⽰例程序之后会有说明)。
#include ros/ros.h
// PCL specific includes
#include sensor_ msgs/ PointCloud2.h
#include pcl_conversions/pcl_conversions.h
#include pcl/point_cloud.h
#include pcl/point_types.h
ros::Publisher pub;
void
cloud_cb (const sensor_ msgs::PointCloud2ConstPtr input)
{
// Create a container for the data.
文档评论(0)