1、第2章 PCL入门,本章依次详细介绍了在Windows下安装配置PCL开发环境、Linux下配置搭建PCL开发环境,以及其他操作系统下用户如何配置,最后利用实例介绍如何建立自己的PCL应用程序。对于Windows和Linux用户可以跳过与自己所用系统无关的小节,最后利用CMake编程模式建立实例应用程序,适用于各个平台的用户。阅读完本章,读者可以掌握PCL开发环境搭建的流程和注意事项及关键配置选项,以及如何开发自己基于PCL的应用程序。 注意:本章假设读者熟悉CMake、svn、make和C+编译链接等工具和基础知识。,本章各小节目录,2.1 Windows下配置安装PCL开发环境 2.2 L
2、inux下配置搭建PCL开发环境 2.3 其他操作系统 2.4 建立自己的PCL应用程序,2.1 Windows下配置安装PCL开发环境,PCL为了方便Windows用户的安装,提供预编译的安装文件,但是只限于用户使用Visual Studio2010或Visual Studio2008,如果用户采用其他编译器或长期采用PCL作为开发平台或者因为编译包不是对应最新的源代码,需要使用最新功能的用户,这些情况下就需要自己从源码安装。本节依次详细介绍这两种情况,笔者建议初学者最好使用安装包安装方式,步骤较简单,简单几步即可体验PCL的强大功能,如果读者为Linux用户,可以阅读2.2节Linux下配
3、置安装PCL开发环境,但如果是从源码编,译则需要从2.1.2小节阅读,因为该小节对PCL的Cmake选项进行了详细的解释。,2.1.1 从预编译包搭建开发环境1. 准备工作 (1)获取All in one安装包,PCL提供了配置为Visual Studio 2010的32位和64位、Visual Studio2008的32位和64位下的该安装包,该包包含了PCL中所使用全部第三方编译包,除了Qt编译包。 (2)获取All in one包对应的PDB文件包,该包用于后期单步调试时使用。 (3)获取PCL源码包。 (4)安装开发工具Visual Studio2010或Visual Studio20
4、08和CMake开发工具,需要CMake版本大于2.8.3,主要考虑到PCL中用到了高版本的一些宏定义,低版本不兼容。,注意:http:/pointclouds.org/downloads/windows.html可下载All in one安装包和其对应的PDB文件包,源码包可在http:/pointclouds.org/downloads/处下载。以上所有包都在本书提供的光盘中对应第2章的文件夹中可以找到,本章编写时以2012年2月22日官方发布的1.51版本为准。如果用户安装了RGBD相关设备驱动与中间件,则需要卸载OpenNI相关的驱动、中间件,避免与All in one提供的驱动与中间
5、件冲突,如果没有,忽略此项,OpenNI、RGBD相关的内容后续章节I/O有介绍。图2-1所示为准备工作最终需要的文件。,源码,调试包,编译包,2. 安装 安装过程很简单(笔者配置为Visual C+2008 Express Edition、CMake2.8.5、32位系统),单击安装上一步所准备的文件PCL-1.5.1-AllInOne-masvc2008-win32.exe。运行如图2-2图2-8所示,按照提示默认安装即可,如果需要改变安装路径到非C盘,后面CMake配置时需要自行设置各个第三方库的路径以及PCL头文件与链接库路径,因为PCL中提供的CMake相关搜索路径默认只会在C盘下搜
6、索相关的库。,安装组件库选择界面时,可以通过是否打勾来确定用户自己需要的模块相关的头文件和库文件,对于首次使用PCL的用户直接默认,全选即可。,成功安装之后,安装目录下有6个文件夹3rdParty、bin、cmake、include、lib、share,其中3rdParty内部有6个开源包预编译库(Boost、Eigen、Flann、OpenNI、Qhull、VTK),如图2-9所示,预编译中文件夹中包含了安装包对应的编译器版本编译的链接库以及include头文件等,bin目录下包含编译好的PCL相关的.DLL文件与EXE文件,此处编译好的EXE文件有很多是示例,用户可以自行运行测试,例如和k
7、inect相关的kinfu重建工具、PCD可视化工具pcdviewer等。CMake内包含开发包相关的Cmake配置文件,在建立工程时,利用此文件中包含的宏寻找第三方包和PCL相应的include和lib目录,include文件夹包含了PCL的头文件,lib文件夹包含PCL相关的.LIB文件、share文件夹包含帮助文件等。,将PDB解压文件复制到安装好的PCL目录下bin文件夹中,如图2-10所示,以实现后期单步PCL源码调试,至此就在Windows下准安装配置好PCL开发环境还需要最后一步进行测试确保安装的正确性。3. 测试安装是否成功 建立两个文件,源程序文件project_inlier
8、s.cpp和Cmake配置文件CMakeLists.txt,如图2-11所示,其内容复制链接http:/pointclouds.org/documentation/tutorials/project_inliers.php#project-inliers中对应的代码及CMakeLists的,代码(此处也可以从光盘本章中test文件夹中复制得到对应的文件),放在同一文件夹source下,在source同一目录下建立cmake-bin文件夹。打开Cmake程序,设置源文件目录与编译目录,如图2-12所示。 选择对应的编译器,如图2-13所示,笔者选择对应visual studio 9 2008,单
9、击Finish按钮,再单击配置与生成按钮,如图2-14所示,即可得到工程文件,如图2-15所示。,找不到OpenNI,虽然我查看了环境变量存在,没办法,我是自己加进去的.参考文献: http:/ 用第三方预编译包从源码搭建开发环境如果是除Visual Studio之外的第三方开发环境。,2.1.2 从源码搭建开发环境从源码搭建开发环境是指读者需要自行编译链接第三方库,然后按照2.1.2小节所介绍的编译安装PCL库。所以在这里只介绍如何从第三方库的源码编译链接得到第三方库,后续编译安装测试PCL与2.1.2小节一样。,2.2 Linux下配置搭建PCL开发环境,对于Linux用户,搭建PCL开发
10、环境同样有两种选择,一是基于定期更新维护的PCL开发包,二是通过源码编译搭建PCL开发环境,前者目前只限于Ubuntu,Debian和Fedora版本的Linux,后者需要用户自行编译所有的第三方库,再编译PCL,对于初级用户较困难,主要是各个库版本之间的兼容性必须选择官方测试过的版本。,2.2.1 预编译包搭建1. Ubuntu上安装 目前通过PPA支持Ubuntu(Lucid,Maverick,Natty,Oneiric)系统,其安装命令为: sudo add apt repository ppa:v launchpad jochen sprickerhof de/ pcl sudo ap
11、t get update sudo apt get install libpcl -all,2.2.2 从源代码安装对于未提供预编译安装包的Linux版本的用户需要自行从源代码编译生成PCL开发环境。,2.3 其他操作系统,目前PCL还提供对Mac OS的支持,2.4 建立自己的PCL应用程序,PCL开发模式采用CMake工具来进行开发,所有应用程序源码可以通过CMake跨平台在不同的开发工具下使用,所以本小节内容适合Linux和Windows等系统的用户。本节利用一个简单的工程演示基于PCL的应用程序的CMake开发模式。,2.4.1 先决条件假设用户已经在机器上下载、编译并安装了PCL,如
12、果没有安装PCL请参考本章前面小节。,2.4.2 工程设置首先建立放源文件的文件夹source,将其放在/PATH/TO/MY/GRAND/PROJECT目录下,在source文件夹下,创建名为pcd_write.cpp的单独的cpp文件(从http:/pointclouds.org/documentation/tutorials/writing_pcd.php下载或者从本书提供的CD中复制),然后在该文件夹中新建一个名为CMakeLists.txt的文件,内容如下: cmake_minimum_required(VERSION 2.6 FATAL_ERROR) project(MY_GRAN
13、D_PROJECT) find_package(PCL 1.3 REQUIRED COMPONENTS common io) inlcude_directories($PCL_INCLUDE_DIRS) link_directories($PCL_LIBRARY_DIRS) add_definitions($PCL_DEFINITIONS) add_executable(pcd_write_test pcd_write.cpp) target_link_libraries(pcd_write_test $PCL_COMMON_LIBRARIES $PCL_IO_LIBRARIES),下面,让我
14、们解读这段CMakeLists.txt中的代码: cmake_minimum_required(VERSION 2.6 FATAL_ERROR) 这是对CMake版本的最低要求,由于做的是非常基础的工程,不需要CMake2.8或者更高版本中的功能。 project(MY_GRAND_PROJECT) 这一行为工程命名,同时CMake会自动产生一些有用的CMake变量,例如源代码目录路径变量名为(MY_GRAND_PROJECT_SOURCE_DIR),工程存储目录变量名为(MY_GRAND_PROJECT_BINARY_DIR),这些都是CMake在内部根据上面定义的工程名称自动生成的,不需要
15、用户定义,而用户只需要利用project(XX)宏即可引发其他变量的内部定义。 find_package(PCL 1.3 REQUIRED COMPONENTS common io) 这行要求该工程依赖PCL最低1.3的版本,并且该版本需,要至少包含common和I/O两个模块,即在Cmake配置生成工程文件时,必须找到符合要求的PCL库相关模型所在的库和头文件路径,这里的REQUIRED意味着如果对应的库不能找到,则Cmake配置过程将完全失败,因为PCL是模块化的,也可以作如下的要求: 一个组件:find_package(PCL 1.3 REQUIRED COMPONENTS io) 多个
16、组件:find_package(PCL 1.3 REQUIRED COMPONENTS io common) 所有组件:find_package(PCL 1.3 REQUIRED) 下面语句是利用CMake的宏完成对PCL的头文件路径和链接路径变量的配置和添加,即如果缺省下面几句,在生成的过程文件编译时会提示找不到相关头文件错误,或者在链接的时候出现无法解析的外部符号等错误提示。,include_directories($PCL_INCLUDE_DIRS) link_directories($PCL_LIBRARY_DIRS) add_definitions($PCL_DEFINITIONS)
17、 在配置CMake时,当CMake找到了安装的PCL,下面相关的包含文件、链接库路径变量等就会自动设置: PCL_FOUND:如果找到了PCL,被设置为1,否则不设置。 PCL_INCLUDE_DIRS:被设置成PCL安装头文件和依赖头文件的目录。 PCL_LIBRARIES:被设置成所建立和安装的PCL库的文件名。 PCL_LIBRARY_DIRS:被设置成PCL库和第三方依赖文件所在的目录。 PCL_VERSION:所找到的PCL的版本。 PCL_COMPONENTS:列出所有可用组件。 PCL_DEFINITIONS:列出所需要的预处理器定义和编译器标志。 为了让CMake知道包含到自己
18、工程中的外部头文件,需,要使用include_directories()宏,在实例中为PCL_INCLUDE_DIRS,精确地包含了我们所需要的PCL相关的头文件,因此CMake会自动根据找到的PCL安装目录自动搜索PCL所有可能包含的目录。 add_executable(pcd_write_test pcd_write.cpp) 该句告诉CMake,我们正试图从单个源文件pcd_write.cpp来新建一个名为pcd_write_test的可执行文件,CMake会注意到后缀(在Windows平台上为.exe,在unix平台上为空)和权限。 target_link_libraries(pcd_
19、write-test $PCL_COMMON_LIBRARIES $PCL_IO_LIBRARIES) 到目前为止,我们仅仅包含了PCL头文件,因此编译器知道我们现在访问所用的方法,我们也需要让链接器知道所链接的库,PCL找到库文件由PCL_LIBRARIES变量指示,剩下的是通过访问target_link_libraries()这个宏来触发链接操作。,2.4.3 编译和运行工程1. 使用CMake命令 此处是在Linux下为例说明的,在Windows下多数使用用户界面,但也可以同样使用命令行方式。建立一个称做build的目录,编译工作将在其中进行。在SHELL中利用以下命令完成: 现在我们可
20、以编译链接程序了,简单地输入: $ make 结果应该和下面一样: 该工程已经编译、链接完成,并且准备好了测试: $ ./pcd_write_test,这将产生下面的结果: 2. 使用CMake GUI 运行CMake GUI,并且填充好以下数据段: Where is the source code(源代码在哪里):这是包含CMakeLists.txt文件和源文件的文件夹source。 Where to build the binaries(在哪里建立二进制文件):这是Visual Studio工程文件将生成的地方build。 然后,单击Configure(配置)按钮,单击Generate按钮
21、,选择编译器,如果没有错误提示,工程文件将在Where to build the binaries文件夹中生成,打开sln文件,即可编译测试应用程序! 注意:CMake有一系列默认的搜索路径,它从这里寻找,FindXXX.cmake或XXXConfig.cmake。如果碰巧安装的PCL不在C盘,则需要告诉CMake的PCL相关路径,那么就可以通过增加下面一行来帮助Cmake找到PCLConfig.cmake文件:在语句find_package(PCL 1.3 REQUIRED COMPONENTS common io)之前添加 set(PCL_DIR “/path/to/PCLConfig.cmake”) 此处的path按照自己安装路径进行调整,剩下的PCL相关的路径查找,Cmake会通过解析文件PCLConfig.cmake来完成。,总结,本章系统的对PCL在各种平台上的开发环境的搭建,最后用实例演示了如果建立自己的PCL应用程序,为后续章节的实例测试奠定了基础。,