zoukankan      html  css  js  c++  java
  • PCL初接触

    这两天由于要做稀疏的点云重建,接触到了PCL(Point Cloud Library),看了看网上的教程,在官网http://pointclouds.org/downloads/windows.html 我是在windows下的,由于以后应该会研究里面的源码,于是就没有安装预编译版All-in-one installers,而是自己编译了一份,具体编译过程参考官网, 这边大概说下。

    我用的是XP系统普通双核非i系列32位,显卡一般256M,不支持CUDA,OpenCL,IDE是VS2008。

    1、先前工作

    首先要安装第三方库。下载的时候根据自己的配置选择

    MSVC 2008 (32bit),MSVC 2010 (32bit),MSVC 2008 (64bit),MSVC 2010 (64bit)

    boost,Eigen(线性算术的C++模板库),FLANN,VTK这几个是必须的,对于下面的应该是可以选择安装,我是都装上了。Qt,QHull(三维凸包),OpenNI,GTest。

    直接在官网下载安装,安装之后,系统环境变量都已经配好了。

    如果安装了Qt的话,Qt的环境变量貌似没有配,这个我自己配的,还有这个Qt安装要安装在默认位置,我安装D盘后,cmake找不到,不知道是不是没有安装默认位置的原因,后来我改成了默认位置好了。具体定义一个环境变量QTDIR C:\Qt\4.8.0 然后把bin目录加到path下面。

    2、下载源码

    这个可以直接在官网下载好的http://pointclouds.org/downloads/ 或者用svn,我直接下载了PCL 1.6.0 (2012.07.17)然后解压,我也一样解压到了C盘

    C:\PCL\trunk。然后打开cmake2.8以上版本。把cmakelist拖进来,具体显示如下:另外点configure配置的时候,选择你vs的版本号。

    CMake configure result

    然后点上grouped和advanced,然后pcl需要的第三方库就列好了在下面。

    CMake groupped and advanced variables

    对于cmake可能不一定能自动找到第三库的位置,下面自己就一个个的看看。我这边其他的没有问题就是qt跟vtk有了点问题,qt没有安装默认位置,vtk具体配置按照官网给的在vtk安装目录下找到VTKConfig.cmake,在这个里面添加SET(VTK_DIR "${VTK_INSTALL_PREFIX}/lib/vtk-5.8")然后重新点一下configure,具体大致如下图:

    VTK

    另外vtk的可视化模块还是禁用的,打开,具体大致如下:

    VTK found, enable visualization

    最后在C:\PCL目录下打开PCL.sln

    image

    然后我编译了一下all_build的debugrelease版,然后编译install的debug 和 release版,最终默认在c盘program files目录下面有PCL目录。这个时间比较长,我总耗时大概5小时多,电脑好的话,应该会快很多。

    在编译all——build下debug版的时候出现如下错误

    错误    27803    error C2872: “uint32_t”: 不明确的符号    c:\PCL\trunk\tools\mls_smoothing.cpp    104    pcl_mls_smoothing
    错误    27822    error C2061: 语法错误 : 标识符“uint32_t”    c:\PCL\trunk\tools\mesh_sampling.cpp    121    pcl_mesh_sampling
    错误    28197    error C2872: “uint32_t”: 不明确的符号    c:\PCL\trunk\tools\gp3_surface.cpp    96    pcl_gp3_surface

    修改为unsigned int 或者修改为boost::uint32_t,我修改成unsigned int ,编译成功。

    另外对于编译release版的时候也报错了,类似于

    general error c101008d: Failed to write the updated manifest to the resource of file "。

    这个把杀毒软件关了就可以了,具体原因别人写的。

    由于VC需要把生成的文件中嵌入MANIFEST文件,而由于杀毒软件之类的会握有这个文件句柄(因为杀毒软件发现这个EXE,DLL正在读写),于是VC就写不进去了,方法是暂时关闭杀毒软件,这样就不用改写MANIFECT。

    然后整个pcl库就编译安装完成。然后做个测试,下面就看看源码。

    #include <pcl/visualization/cloud_viewer.h>
    #include <pcl/io/pcd_io.h>
    
    int main ()
    {	
    	//pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);
    	//pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); 
    	pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGB>); 
    	pcl::io::loadPCDFile("pcl_logo.pcd", *cloud);
    	pcl::visualization::CloudViewer viewer("Cloud Viewer");
    	//显示
    	viewer.showCloud(cloud);
    	while (!viewer.wasStopped ())
    	{
    	}
    	return 0;
    }

    仅仅是简单的显示点云,可以使用CloudViewer类。这个类非常简单易用。但要注意,它不是线程安全的。如果要用于多线程,还要参考PCLVisualizer。

    需要注意的是,PointCloud的数据类型要和PCD文件中或者代码中的PointT一致!上面的代码中给出了三种。最终结果如下,pcd用的是test中的。

    image

    另外在vs中编译生成的时候,要将所有的第三方的函数的包含文件跟库文件加入以及PCL自己的,另外在项目生成的时候在在[链接器 LINKER]的[输入INPUT]中,为项目的Debug配置增加 [附加依赖项 Additional Dependencies]也要添加lib。添加为按需添加。

  • 相关阅读:
    oracle用户被锁死
    windows远程桌面智能调整大小
    批量ping测试脚本
    信息的组织和提取方法
    BeautifulSoup
    requests模块学习
    Telerik Fiddler 应用方法
    js 时间格式换成 把字符串(yyyymmdd)转换成日期格式(yyyy-mm-dd)记录
    vuedraggable 拖拽 应用 不同列表之间的拖拽
    vue项目图片上传 vant van-uploader 图片上传
  • 原文地址:https://www.cnblogs.com/fengbing/p/2847719.html
Copyright © 2011-2022 走看看