PCL 1.8.0编译、配置、VS2013

引言

pcl1.8.0,较pcl1.7和1.6多了不少算法,很多感兴趣的方法都在pcl1.8中有所实现。当pcl11.8.0rc1和rc2发布时就迫不及待的下载下来进行使用,用了几个月发现pcl1.8.0rc版有几个bug无法解决,如:表面重建时无法映射纹理。得知2016/06/14 github 发布正式版pcl1.8.0时,就立马下载下来准备编译并记录整个过程,感兴趣的小伙伴可以参考。

pcl官网已经有windows平台下的编译过程,现在我基于此教程编译PCL1.8.0并配置。

PCL1.8.0源码包下载

下载地址:https://github.com/PointCloudLibrary/pcl/releases
这里写图片描述

准备工具

编译器VS2013,CMakeGUI 3.3.2,系统版本win7 64位。
提示:软件版本根据自己情况选择,没必要非要和博客中一致。

第三方依赖库

第三方库用途是否必须
Boost用于智能指针等操作必选
Eigen用于矩阵运算等必选
FLANN用于邻域搜索等必选
VTK可视化库,用于显示点云等必选
Qt用于图像交互界面等可选
QHULLused for convex/concave hull decompositions in surface可选
OpenNI用于获取点云等可选

提示:在编译PCL1.8.0时请确保您已安装了正确的第三方依赖库。不能混合32位和64位代码,并且不能混用不同编译器编译第三方库。有些库需要自己编译,这篇博客里就不对如何编译第三方依赖库进行讲解了,只详述PCL1.8.0的编译过程。

编译PCL1.8.0

官方编译教程:http://www.pointclouds.org/documentation/tutorials/compiling_pcl_windows.php
提示:跟着官方教程操作即可成功。
(1) 将源码包pcl-pcl-1.8.0.zip解压到目录:F:\pcl-1.8.0
提示:根据自己需要解压即可,本博客一定程度上参考了官方教程。
(2)打开CMakeGUI
源码路径:F:/pcl-1.8.0
项目路径:F:/pcl-1.8.0/build
如图:
这里写图片描述
点击configure,选择合适的编译器(VS2013 64位)
这里写图片描述

(3)出现无法找到Eigen库
这里写图片描述
将变量EIGEN_INCLUDE_DIR对应的值修改为Eigen库所在目录。
如:F:\Eigen\eigen3
重新configure
提示找不到Boost库,添加下面三个变量和相应的路径,重新configure。

BOOST_ROOT="F:\Boost"
Boost_LIBRARY_DIRS="F:\Boost\lib"
BOOST_INCLUDEDIR="F:\Boost\include\boost-1_59"

(4)修改安装路径
这里写图片描述
或者,打开CPackConfig.cmake文件,修改CPACK_INSTALL_PREFIX值为F:\PCL1.8.0
点Generate生成VS工程。
这里写图片描述
(5)打开PCL.sln
分别批生成Debug和Release版本,并分别安装。
这里写图片描述
(6)Debug和Release版编译、安装成功
Debug
这里写图片描述
这里写图片描述
Release
这里写图片描述
这里写图片描述

这里写图片描述
(7)提示
Cmake构建工程时可能会出现其他依赖库缺失情况,一一补上就行。使用Cmake构建工程成功,也可能在VS中编译时会出现其他问题,根据提示也可以一一解决。整个编译过程很耗时,Debug和Release完全编译一次要一个小时左右。如果需要All in One安装包,在Cmake中勾选生成All in One包即可(特别费时所以就没勾选)。

配置

将下列路径加入环境变量:

F:\PCL1.8.0C\bin;F:\PCL1.8.0C\3rdParty\FLANN\bin;F:\PCL1.8.0C\3rdParty\OpenNI2\Tools;F:\PCL1.8.0C\3rdParty\Qhull\bin;F:\PCL1.8.0C\3rdParty\VTK\bin;

测试Debug版

(1)打开VS2013新建项目,添加如下代码

#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>


int user_data;

void viewerOneOff(pcl::visualization::PCLVisualizer& viewer)
{
    viewer.setBackgroundColor(1.0, 0.5, 1.0);
    pcl::PointXYZ o;
    o.x = 1.0;
    o.y = 0;
    o.z = 0;
    viewer.addSphere(o, 0.25, "sphere", 0);
    std::cout << "i only run once" << std::endl;

}

void viewerPsycho(pcl::visualization::PCLVisualizer& viewer)
{
    static unsigned count = 0;
    std::stringstream ss;
    ss << "Once per viewer loop: " << count++;
    viewer.removeShape("text", 0);
    viewer.addText(ss.str(), 200, 300, "text", 0);

    //FIXME: possible race condition here:
    user_data++;
}

int main()
{
    pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>);
    pcl::io::loadPCDFile("example.pcd的位置", *cloud);

    pcl::visualization::CloudViewer viewer("Cloud Viewer");

    //blocks until the cloud is actually rendered
    viewer.showCloud(cloud);

    //use the following functions to get access to the underlying more advanced/powerful
    //PCLVisualizer

    //This will only get called once
    viewer.runOnVisualizationThreadOnce(viewerOneOff);

    //This will get called once per visualization iteration
    viewer.runOnVisualizationThread(viewerPsycho);
    while (!viewer.wasStopped())
    {
        //you can also do cool processing here
        //FIXME: Note that this is running in a separate thread from viewerPsycho
        //and you should guard against race conditions yourself...
        user_data++;
    }
    return 0;
}

(2)新建属性表PCLCDebug
这里写图片描述
VC++目录,添加包含目录
这里写图片描述
VC++目录,添加库目录
这里写图片描述
连接器,输入,附加依赖项
提示:我是把所有的Debug依赖库都加上,因为用的多,懒得去挑。
(2)最终结果
这里写图片描述

编译和配置结束

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值