本节课我们将:
- 学习如何利用PCL库编译程序;
- 学习一个非常简单的程序在本地生成一个点云pcd文件;
这节内容不对PCL库做深入的探究,只要能够将代码跑成功,了解利用CMake进行编译即可。
前置条件:
请先行安装PCL,如果有安装上的问题请留言。
一、准备文件
我们需要两个文件:程序源码和指导编译的CMakeList文件。后续大部分工程都有相似的配置。不去看文件内部的内容,将代码复制粘贴下来,先运行一下程序。
请从上述地址
Writing Point Cloud data to PCD fileszhuanlan.zhihu.com下载程序源码或者复制下列代码。
#include
打开工作文件夹,复制上述内容将上述代码保存为 pcd_write.cpp 文件。在同一个文件夹下创建一个名为CMakeList.txt的文件。在该文件中填入下列内容并保存:
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(pcd_write)
find_package(PCL 1.2 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable (pcd_write pcd_write.cpp)
target_link_libraries (pcd_write ${PCL_LIBRARIES})
如图所示我在/media/bunny/_harddisk/code/pclearing/lec1的路径下创建了两个文件。
在命令行中,切换到/media/bunny/_harddisk/code/pclearing/lec1目录,用ls命令观察目录下确实多了两个文件,后续的操作尽量就放在命令行下进行。至此相关文件的准备工作已经结束。
二、编译运行项目
这里需要了解如何使用CMake工具进行源码编译。请记住“先动手,再问为什么”。不管怎么样先跑起来再说。
首先请在切换到文件所在路径,比如我存放文件的位置就是:/media/bunny/_harddisk/code/pclearing/lec1
切换到所在路径后输入以下的命令。
cd build
$ cmake ..
得到的结果如下所示
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
…………………………………………………………
继续输入命令,构建工程。
$ make
得到如下的结果,当您看到100%的时候,意味着项目编译成功。
执行程序观察实验结果:
$ ./pcd_write
至此代码运行成功。下面程序的输入结果表明PCL世界的入门级“hello world”已经运行成功。
我们切换到build文件夹下观察文件,pcd_write为可执行文件,test_pcd.pcd为刚刚写入的pcd文件。
后续的过程中,我们对上面的两个文件进行更加详细的介绍。
三、CMakeList简介
下面我对CMakeList文件中的内容进行简单的介绍。
(VERSION 2.8 FATAL_ERROR
假设我们要修改CMakeList.txt用于处理我们自己的程序,我们要进行哪些修改呢,改两句话就可以了。
project(pcd_write)
add_executable (pcd_write pcd_write.cpp)
这是不是非常简单?利用CMakeList,我们可以自由的在不同的平台上生成执行文件。关于编译文件的知识,我们暂时先讲到这里,后续再进行补充。
关于文件的读写的内容解释请参见下一节内容。
参考资料:
http://www.pointclouds.org/documentation/tutorials/using_pcl_pcl_config.php#using-pcl-pcl-config