![点云库PCL从入门到精通](https://wfqqreader-1252317822.image.myqcloud.com/cover/632/31251632/b_31251632.jpg)
2.1 快速安装与源码编译安装
2.1.1 Windows下配置安装PCL开发环境
PCL为了方便Windows用户的安装,提供预编译的安装文件,但是只限于用户使用Visual Studio编译器,如果用户采用其他编译器,或长期采用PCL作为开发平台,或者因为编译包不是对应最新的源代码,需要使用最新功能的用户,这些情况下就需要自己从源码安装。本节依次详细叙述这两种情况,笔者建议初学者最好使用安装包安装方式,这样步骤较简单,简单几步即可体验PCL的强大功能,如果读者为Linux用户,可以直接阅读Linux下配置安装PCL开发环境的内容;如果读者为ROS用户,则可以直接阅读ROS下配置安装PCL开发环境的内容。
准备工作
(1)获取All in one安装包,PCL提供了配置为Visual Studio的32位和64位下的该安装包,该包包含了PCL中所使用全部第三方编译包,除了Qt编译包。
(2)获取All in one包对应的PDB文件包,该包用于后期单步调试时使用。
(3)获取PCL源码包。
(4)安装开发工具Visual Studio编译器和CMake开发工具,需要CMake版本大于2.8.3,主要考虑到PCL中用到了高版本的一些宏定义,低版本不兼容。
注意:可以http://pointclouds.org/downloads/windows.html下载all in one安装包和其对应的PDB文件包(https://github.com/PointCloudLibrary/pcl/releases也可下载),源码包可在https://github.com/PointCloudLibrary/pcl(注意早期的svn源码服务器已经关闭,请在GitHub上进行源码更新和下载)处下载。以上所有的包都可在本书提供的网盘配套资源中对应第二章的文件夹中找到。如果用户已经安装了RGBD相关设备驱动与中间件,则需要卸载OpenNI相关的驱动、中间件,避免与All in one提供的驱动与中间件冲突;如果没有安装,忽略此项。OpenNI、RGBD相关的内容后续章节“输入输出IO”中有介绍。图2-1所示为准备工作最终需要的文件。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/21_01.jpg?sign=1738837437-SuFBy6N6t1FByjDRqu05AE2dRp5CUImL-0-a49f833c5264376efbcc376cd3df2a2d)
图2-1 完成准备工作的三个包
安装
安装过程很简单(笔者配置为Visual Studio 2015、CMake 3.10.2、64位系统,其他配置安装过程类似),双击上一步所准备的文件PCL-1.8.1-AllInOne-msvc2015-win64.exe,按照提示默认安装即可,如图2-2至图2-9所示。如果需要改变安装路径到非C盘,则后面CMake配置时需要自行设置各个第三方库的路径以及PCL头文件与链接库路径,因为PCL中提供的CMake相关搜索路径默认只会在C盘下搜索相关的库。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/21_02.jpg?sign=1738837437-fYLzbh2MSHXr16G3nm2vLEnRVNEgwPyi-0-b7906c9959c6b8059119581ca3fb2e05)
图2-2 PCL许可界面
进入安装组件库选择界面时,可以通过是否打勾,来确定用户自己需要的模块相关的头文件和库文件,对于首次使用PCL的用户直接默认全选即可。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/22_01.jpg?sign=1738837437-FePyAGZJE0LyA4Fa82AQmRWyvdqp8CM4-0-9768c259dbdf8451505cb0e8859ce0de)
图2-3 安装选项与安装路径界面
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/22_02.jpg?sign=1738837437-RjCgK5xIW9ifikfRaQKmEE28DF2G6iZZ-0-e8cc0a33bf899c6512919f9d5add9b07)
图2-4 安装组件库选择界面
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/22_03.jpg?sign=1738837437-5RsFkcC6mGtwbMn6UEZ3YOwj0wUp0BgC-0-84fb392c5a0da48a0e846565abcd39e8)
图2-5 展开所选组件图示
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/23_01.jpg?sign=1738837437-xmYbxjPd1jI9MZWcqbqHSEpbeveFSBav-0-22130b41f700cb166ab8ab1b1d88b517)
图2-6 安装OpenNI界面
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/23_02.jpg?sign=1738837437-XNHI83wI6pyVsNe0xGgivKxTVjaxoSDb-0-6478b14a58a23cc200b35f7022d8cd5a)
图2-7 完成界面与最终安装好的截图
成功安装之后,安装目录下有6个文件夹:3rdParty、bin、camke、include、lib、share。其中3rdParty内部有6个第三方开源包预编译库(Boost、Eigen、FLANN、OpenNI、Qhull、VTK),预编译库文件夹中包含了安装包对应的编译器版本编译的链接库以及include头文件等。bin目录下包含编译好的PCL相关的.dll文件与.exe文件,此处编译好的.exe文件有很多是示例,用户可以自行运行测试,例如和kinect相关的kinfu重建工具、pcd可视化工具pcdviewer等等。cmake内包含开发包相关的cmake配置文件,在建立工程时,利用此文件中包含的宏寻找第三方包和PCL相应的include与lib目录,iclude文件夹包含了PCL的头文件,lib文件夹包含PCL相关的.lib文件。share文件夹包含帮助文件等。
将PDB解压文件复制到安装好的PCL目录下bin文件夹中,如图2-9所示,以实现后期单步PCL源码调试。至此就在Windows下准安装配置好PCL开发环境,还需要最后一步进行测试,以确保安装的正确性。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/24_01.jpg?sign=1738837437-Fd8h0oqHm7MPERbswITXqwJtwGe0pHxr-0-e01519eb97b853865749bb27a37d76b3)
图2-8 第三方库文件夹
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/24_02.jpg?sign=1738837437-FaUMslJIIFbdFD4sAuWuSGwwRx9e5UzP-0-665574c0eb20e639271797f5b9248c08)
图2-9 pdb文件夹中内容
测试安装是否成功
建立两个文件,源程序文件 project_inliers.cpp和 cmake 配置文件 CMakeLists.txt,如图2-10所示。其内容复制链接http://pointclouds.org/documentation/tutorials/project_inliers.php #project-inliers中对应的代码及CMakelists的代码(此处也可以从本章下的例1文件夹中复制得到对应的文件),放在同一文件夹source下,在source同一目录下建立camke-bin文件夹。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/24_03.jpg?sign=1738837437-j9CtoCZRWKB1Y55cJeifx3VkiC6DF2Qf-0-85cf4e403fe15ff31eda6f1d1a46ea46)
图2-10 测试需要建立的文件
打开CMake程序,设置源文件目录与编译目录,如图2-11所示。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/25_01.jpg?sign=1738837437-ZlO4PtGsJEtwG12sOcJua2qwtV0U3CMU-0-69898d7e4bfda4c63c04ea8aeab81ed9)
图2-11 设置CMake需要的路径
选择对应的编译器,如图2-12所示,这里选择Visual Studio 14 2015 Win64,单击Finish按钮,再单击配置与生成按钮,如图2-13所示,即可得到工程文件,如图2-14所示。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/25_02.jpg?sign=1738837437-sGuC2CZntg47yniJI5Ft6Nzu36I1O8Iu-0-1613032c415ae665869ccc08a60839c8)
图2-12 在CMake中选择对应的编译器
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/25_03.jpg?sign=1738837437-GrX3jEatTCZcfc1Hsue9DfNHHodU6LTS-0-2a6dc75da3de6b08f86ab13588331ba2)
图2-13 配置与生成
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/26_01.jpg?sign=1738837437-3e1iZHCch9DQBFJsmcJJu9XGLh44RTLF-0-83e2df77a310ed9393fec590357f61db)
图2-14 生成的工程文件
打开工程文件,编译链接,生成.exe文件,如图2-15所示。打开cmd.exe,到编译输出的project_inliers.exe文件目录下,运行该程序文件,可以看到相应的打印输出,如图2-16所示。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/26_02.jpg?sign=1738837437-FBcybRKTPzolvYKJ8d4D4eDoU3vRXDou-0-3dedd7f3ff18e420ad3533b4cae31d3f)
图2-15 编译工程文件
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/27_01.jpg?sign=1738837437-O1uDUHLNvODU5Tg8JDmsSrRhwg0QiUCV-0-b210c7fca4560a46e9e4066b4191853f)
图2-16 测试.exe文件生成结果
至此,你在Windows下的PCL开发环境就搭建好了。
2.1.2 ROS下配置搭建PCL开发环境
以Ubuntu 14.04和Indigo为例,本节主要讲述如何安装ROS环境,具体如何建立基于PCL的模块以及如何编译与开发,请参考后面相关章节。
安装Ubuntu
从网络下载Ubuntu 14.04的磁盘镜像,使用UltraISO将U盘制作为安装盘。后续流程根据计算机自行安装。
安装并配置ROS环境
本小节参考http://wiki.ros.org/indigo/Installation/Ubuntu,读者可以参考原网站。我们安装Indigo 版本,ROS Indigo 是ROS的LTS(Long Term Support,长期支持)版本,该版本将伴随Ubuntu Trusty的整个生命周期。这里通过已经安装编译好的软件包安装ROS。ROS官方已经预编译好Ubuntu平台的Debian软件包,直接安装编译好的软件包比从源码编译安装更加高效,这也是在Ubuntu上的首选安装方式。
1.配置 Ubuntu 软件仓库
配置 Ubuntu 软件仓库(repositories),以允许 restricted、universe 和 multiverse这三种安装模式,如图2-17所示。可以按照Ubuntu中的配置指南来完成配置(https://help.ubuntu.com/community/Repositories/Ubuntu)。
2.配置 ROS 的 apt 源
配置你的计算机,使其能够安装来自 packages.ros.org的软件,如图2-18所示。ROS Indigo 仅支持 Saucy (13.10) 和 Trusty (14.04)。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/27_02.jpg?sign=1738837437-h0g95zaHAxTFQQVubgVxk9imgYffSgEt-0-ea90c5803871a2caf40638466fb7f7cb)
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/28_01.jpg?sign=1738837437-odCiPhiKsSCCk9yQO46b3N5b7HA0uhMk-0-44fec5d55aeb0883b7ab4b0b14a38ca8)
图2-17 配置 Ubuntu 软件仓库
注意:强烈建议使用国内或者新加坡的镜像源,这样能够大大提高安装下载速度。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/28_02.jpg?sign=1738837437-nfdGYn9twm2Z06svV4zvN7ElTuXXQJLH-0-55b86a36e40ec2843e47d4ec20fa3038)
图2-18 配置 apt源
3.安装
ROS中有多种函数库和工具,其官网为我们提供了四种默认安装方式,你也可以单独安装某个指定软件包。这里选择桌面完整版安装(推荐):包含ROS、rqt、rviz、通用机器人函数库、2D/3D仿真器、导航以及2D/3D感知功能。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/28_03.jpg?sign=1738837437-aDm0QTFDh70BPBoAlL9xTwq0ab2YaOcL-0-05b536619082680503670ea4939846fe)
4.初始化 rosdep
在开始使用ROS之前,还需要初始化rosdep,如图2-19所示。rosdep可以方便在你需要编译某些源码的时候为其安装一些系统依赖,同时也是某些ROS核心功能组件所必需用到的工具。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/28_04.jpg?sign=1738837437-yWKPCEN73TvIWf6J8pRQHU4h1uz8Ie5O-0-d88fb2ed1c64c788d512dc69a5853bf5)
在运行rosdep update命令时,可能出现以下错误:The read operation timed out。这时只需重新初始化rosdep,再运行rosdep update命令即可。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/29_01.jpg?sign=1738837437-XTnaik1AdFWnnYz55pzqlvazpeB88Yzt-0-dd2f31211f6755782cbbd1a3876b7d6c)
图2-19 rosdep初始化
5.配置环境变量
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/29_02.jpg?sign=1738837437-8hFsyezO9Vqm2gnjgF95OdO3i6Llruub-0-ed4cfbaef934577b3129ca3d20bfeae8)
rosinstall 是ROS中一个独立分开的常用命令行工具,它可以方便让你通过一条命令就给某个ROS软件包下载很多源码树,如图2-20所示。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/29_03.jpg?sign=1738837437-3sKcHPRScGiom8O4txaR4m2G4rFtyYLq-0-8a41a864a83950ad9bc310b933270c53)
图2-20 安装python-rosinstall
6.管理环境变量
在安装ROS期间,你会看到提示说需要 source 多个setup.*sh文件中的某一个,甚至提示添加这条'source'命令到你的启动脚本里面。这些操作是必需的,因为ROS是依赖于某种组合空间的概念,而这种概念就是通过配置脚本环境来实现的。这可以让针对不同版本或者不同软件包集的开发更加容易。
如果你在查找和使用ROS软件包方面遇到了问题,请确保你已经正确配置了脚本环境。一个检查的好方法是确保你已经设置了像ROS_ROOT和ROS_PACKAGE_PATH这样的环境变量,可以通过以下命令查看。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/30_01.jpg?sign=1738837437-Y0VozvyNUEOafdIsOAh8otIJ5oudfDzx-0-9241a1dc4d9a2fd5b1a769bb4316b3bd)
如果发现没有配置,那这个时候你就需要source某些setup.*sh文件了。可执行下面的source命令。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/30_02.jpg?sign=1738837437-fEdfXw7DMtSyKhLOaBdrUhdovi1GMfOj-0-7b885b96859f47ab8aa8d83d53f644ec)
在每次打开终端时你都需要先运行上面这条命令后才能运行ROS相关的命令,为了避免这一繁琐过程,你可以事先在.bashrc文件(初学者请注意:该文件在当前系统用户的home目录下)中添加这条命令,这样当你每次登录后系统已经帮你执行这些命令配置好环境。这样做也可以方便你在同一台计算机上安装并随时切换到不同版本的ROS(比如fuerte和groovy)。
7.创建ROS工作空间
此小节参考http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment。ROS下有两种工作空间:catkin和rosbuild。这里我们使用catkin,如图2-21所示,因为使用rosbuild将ROS程序安装到其他系统或架构上是很麻烦的,这是rosbuild存在的主要问题,也是后来为何要开发catkin的原因。catkin为ROS软件包提供了构建和安装目标,符合FHS标准的安装布局,这便于跨平台开发。
下面我们开始创建一个catkin 工作空间。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/30_03.jpg?sign=1738837437-FkzUBWuDVqNgd7AtjNTIyT7k5ElHGdQe-0-b64d5e942b8d60120d6be88be0420c25)
运行catkin_make命令,第一次运行该命令时,会创建build、devel等目录,以及在src目录下的一个名为CMakeLists.txt的链接文件,同时在devel目录下有一些shell脚本。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/30_04.jpg?sign=1738837437-WTZdtKkfZqf6bGrXbNzkgpKi9Gr4ZBzF-0-968f728914e064086c974c4dfc49a71e)
图2-21 创建ROS工作空间
接下来首先source一下新生成的setup.sh文件。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/31_01.jpg?sign=1738837437-bDRA5hxBRTHs4PqKMmmVIF6fcZz3ydHN-0-19977cb49982b0ea1cfa9093f9a343c8)
要想保证工作空间已配置正确,需确保ROS_PACKAGE_PATH环境变量包含你的工作空间目录,采用以下命令查看。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/31_02.jpg?sign=1738837437-5CpfZU1WtZXzieMcXwNNEbVYsZXuUyfT-0-f2a98b659d799d30c75596c3b7f8b044)
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/31_03.jpg?sign=1738837437-Bzsr2CmR9JCz0y7wD9Pgfx5Kzqyw7aCs-0-f51aee06f3038de7592bde06da27efe1)
此处打印输出包含/home/youruser/catkin_ws/src,说明你的工作环境已经搭建完成。
8.测试ROS环境
安装ROS官网提供的一个轻量级的模拟器,运行以下命令来安装。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/31_04.jpg?sign=1738837437-0xiZv6LcFYLRJzS0WUdVXppWpzpoh38k-0-301b5f2ca6eaef30a0436afbdeb575f1)
启动roscore,roscore 是你在运行所有ROS程序前首先要运行的命令。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/31_05.jpg?sign=1738837437-a4FDipmaCBy8xDxmuVJNEizUtncHSaLh-0-c3683a2e44d64bc0624a067bd4e049dc)
在一个新的终端中运行如下代码。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/31_06.jpg?sign=1738837437-JYHdX4YsOMA1X42RxVX5K9z6hZJxV9ms-0-4701463d75c6717d9173874881325f97)
通过键盘远程控制turtle,在一个新的终端中运行如下代码。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/31_07.jpg?sign=1738837437-BfpYjIvn0i4uSkNibLXqX09erBh8bJIX-0-e3383ec6c75667cefce93141458bce03)
选中turtle_teleop_key所在的终端窗口以确保你的按键输入能够被捕获,然后就可以使用键盘上的方向键来控制turtle运动了。
![](https://epubservercos.yuewen.com/606CEF/16923816805017206/epubprivate/OEBPS/Images/31_08.jpg?sign=1738837437-IpU3gdE3mxwgBZDY5GOqUfEzSkMy4HOc-0-e0fdd1c95f13164d93b61405b929017d)
图2-22 ROS的turtlesim例子运行
由于新版本的ROS下面是默认安装PCL相关模块的,所以安装完ROS,并且搭建好catkin工作空间,就可以在ROS下进行PCL开发了,具体见下面章节。
2.1.3 用第三方预编译包从源码搭建开发环境
受篇幅所限,请感兴趣的读者自行查阅相关资料。
2.1.4 从源码搭建开发环境
受篇幅所限,请感兴趣的读者自行查阅相关资料。