PCL学习(一)

           最近在学习PCL,照着官网的教程在我的win7+VS2010平台上装好PCL1.3.0后,依旧按部就班地跑起了官网上给的例子程序。关于PCL简短的介绍请参照这篇博文:http://qing.weibo.com/1455173150/56bc2e1e330005pk.html

        (1)整理一下安装OpenNI过程中碰到的问题。

          用傻瓜式安装包PCL-1.3.0-AllInOne-msvc2010-win32.exe安装完PCL后,系统会自动的安装完OpenNI和PrimeSense\SensorKinect编译好后的动静态库,如此在将Kinect连接到自己的电脑上之后,只需在"计算机管理器"中将Kinect的默认驱动程序路径改为……PrimeSense\SensorKinect\Driver及其子目录,就基本完事了。

         当然,在学习使用Kinect时,基本还需要安装一个PrimeSense\NITE的软件,这在OpenNI的官网上也可以下载的到,是用于骨骼、手势、音频识别的中间件。(目前看来,它是最后一个安装的,对于潜心用PCL的高手来说,可能用处并不是很大吧。不过建议不打算使用Microsoft  SDK刚接触的OpenNI,PCL的盆友还是装上它,好处嘛——用过后才晓得。)

        一个大家都容易碰到的问题——安装完上述系列软件后,跑OpenNI\Samples\Bin\Release下面的例子时,有些显示正常有些则不尽人意。例如运行NiUserTracker.exe时能正常出现类深度图的窗口,而运行NiViewer.exe时,就只出现白屏,看不到东西。这说明软件安装是没有问题的,而与大家机型的配置有关。这个问题在cnKinect论坛里已有人解决,请参照:http://www.cnkinect.com/forum.php?mod=viewthread&tid=3706&extra=&highlight=NiView&page=2

例如我的机器显示适配器型号是Intel(R)G41 Express Chipset,默认情况下,自动用的是Microsoft  Corporation - WDDM 1.1的驱动程序。Intel官网上面有自动检测Intel型号用户终端机的硬件配置是否有更新驱动程序的小软件,很好用,我只需要在扫描完我的机子之后,将显示适配器对应的最新驱动下载来安装到本地机上即可。再运行NiViewer.exe,就可以正常出现彩图与对应的深度灰色图了。

       (2)在VS2010中,跑PCL.org上面的例子时,要注意有些API对应读取存储操作时,需要的PCD文件的版本不同。

例如,我以前在用pcd_read.cpp读取# .PCD v.5 - Point Cloud Data file format时便不成功,但换成# .PCD v.7 版本后,代码就不会出错。官网上已经做了相关的说明:http://pointclouds.org/documentation/tutorials/pcd_file_format.php#pcd-file-format

    

       (3)在运行range_image_visualization.cpp时,碰到一个很无语的问题。再把新建的项目工程性文件的属性中把所有能加的include,bin,lib文件路径以及输入依赖库都加进去了以后,debug仍然出错:

        显然,这说明ptrdiff_t不在该工程所在的std命名空间中,但一件令人困惑的是,下面我单独新建的一个测试用的小工程文件中std::ptrdiff_t却不会出错。

        我找到对应引用的第三方库D:\PCL 1.3.0\3rdParty\Eigen\include\Eigen里面的core文件,问题出现在这一行语句:

using std::ptrdiff_t;

可在它的头文件里面也如下做了添加:

#include <cstddef>
#include <cstdlib>

无奈,我尝试了一个最笨的方法,即在core路径下面把所以能找到的std::ptrdiff_t全部改成prediff_t,可新的问题又来了:

这一次,直接跳到boost文件里面出错。(不得不感叹,高手就是高手)谢谢子锐的帮助,原因出在我系统中Microsoft Visual Studio 10.0\VC\include路径下的cstddef文件中有ptrdiff_t的定义,而在\PCL 1.3.0\3rdParty\Boost\include\boost路径下的cstddef文件中却找不到ptrdiff_t,于是,在我debug时,当然会对std::ptrdiff_t报错。怎么屏蔽掉boost而引用原本的VC版本标准库命名空间呢。强大的google又派上用场了,在一个国外论坛的帖子中,我们找到了解决方法:

http://boost.2283326.n4.nabble.com/Config-Digital-Mars-and-BOOST-NO-STDC-NAMESPACE-td2609450.html

贴主碰到和我相同的问题,仿照他的解决方案,我们把下面这句添加到源cpp文件的首行,编译通过!!!

#define BOOST_NO_STDC_NAMESPACE	
### PCL库的学习教程与入门指南 #### 什么是PCL? 点云库(Point Cloud Library, PCL)是个独立的、大规模开源项目,专注于2D/3D图像和点云处理[^1]。它提供了丰富的算法实现,涵盖了点云获取、滤波、分割、特征提取、配准等多个领域。 #### 安装PCL 对于初学者来说,在Linux环境下安装PCL是最常见的选择之。以下是基于Ubuntu系统的安装方法概述: - 可以通过源码编译的方式安装最新版本的PCL。具体步骤可以参考份详细的博客笔记[^2],其中包含了针对Ubuntu 18.04的操作说明。 ```bash sudo apt-get update sudo apt-get install cmake libeigen3-dev libflann1.9 libflann-dev libboost-all-dev libsuitesparse-dev libqhull* libgtest-dev freeglut3-dev pkg-config git clone https://github.com/PointCloudLibrary/pcl.git cd pcl mkdir build && cd build cmake .. make -j$(nproc) sudo make install ``` #### 基础功能介绍 PCL的核心功能模块包括但不限于以下几个方面: - **加载与保存点云数据**:支持多种格式的数据读写操作,比如`.pcd`文件格式[^3]。 - **点云滤波**:去除噪声点或者下采样密集区域内的点集。 - **点云配准**:将不同视角下的两组或多组点云对齐到同坐标系下。 - **可视化工具**:提供简单易用的接口来展示三维空间中的点分布情况。 下面给出段简单的代码示例演示如何利用PCL加载并显示个PCD文件: ```cpp #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/visualization/cloud_viewer.h> int main(int argc, char** argv){ pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); if(pcl::io::loadPCDFile<pcl::PointXYZ>(argv[1], *cloud)==-1){ std::cerr << "Could not read file." << std::endl; return (-1); } pcl::visualization::CloudViewer viewer("Simple Viewer"); viewer.showCloud(cloud); while(!viewer.wasStopped()){ } return 0; } ``` 此程序首先定义了个指向`pcl::PointCloud<pcl::PointXYZ>`类型的智能指针变量`cloud`用来存储从外部导入的数据;接着调用了`pcl::io::loadPCDFile()`函数尝试打开指定路径下的.pcd文件并将内容赋值给该对象实例;最后创建了个名为"Simple Viewer"窗口并通过循环保持其持续运行状态直到用户主动关闭为止。 #### 推荐资源链接 除了上述提到的内容外,还有许多其他优秀的在线文档可以帮助进步加深理解: - 黄种庆老师的个人技术分享站点上有关于"PCL安装教程——Ubuntu18.04编译安装PCL点云库(稳定可靠)"的文章值得阅读; - 正式的[PCL Tutorials](https://pcl.readthedocs.io/projects/tutorials/en/master/)页面也是不可错过的重要参考资料; - 如果倾向于视频形式的教学,则可考虑访问黑马机器人的官方网站查阅系列课程《点云库PCL从入门到精通》。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值