安装带有Kinfu和GPU并行运算版本的PCL

  这几天看到kinect fusion 的效果后,对其非常感兴趣,于是也想搭建一个kinect fusion 的框架自己玩玩,无奈PCL中kinfu的开源代码一直是测试版本,并没有release发布版,于是只能默默的卸载之前安装的1.7.1版本换上PCL的测试版本。
  Pcl的测试版本同样可以在github主页上下载,只要选中首页的master分支,并download into ZIP即可,kinfu的代码就在gpu文件夹下。

这里写图片描述

  相比于安装1.7.1版本,想要运行kinfu的话需要通过显卡GPU进行加速,事前需要安装的第三方库也更多,贴一张我的所有第三方库的截图:
  这里写图片描述

一. 具体安装步骤:

  • 事先准备:

    1. 确认你的电脑显卡是N卡,并且运算能力在2.x (Fermi) or 3.x (Kepler) 以上;
    2. 去英伟达官方网站下载cuda最新版本,并更新自己的显卡驱动,我的cuda是6.5版本,显卡为650M;
    3. 还是更新自己的显卡驱动,显卡较新的驱动能够让最终kinfu的帧率更快!
    4. 安装第三方库,BOOST EIGEN FLANN QHULL VTK qt4.8.0 ,在安装前请清理干净原来的这些第三方库;
  • 开始安装:

    1. cmake编译源码,configure第一次后会出现很多红色的build,勾选上build_gpu即可,网上也有说勾选build_tools build_visulation build_cuda build_apps的,但是我的这里前两个是默认勾选了的,build_cuda build_apps我最终也没选;
      这里写图片描述
    2. 在点击generate前仔细看看cmake下方的输出信息,to built里面是否包含了你所需要的所有功能;
    3. 点击generate;
    4. vs打开生成的功能进行编译并install;

二. Tips and bugs:

  1. 运行kinfu需要openni和primesense的支持,pcl从kinect抓取点云是基于openni的框架的,需要注意的是,事先千万不能安装kinect的微软官方SDK,因为官方的会屏蔽pcl的openni接口,最终pcl读取不出深度数据,显示

    can’t open depth source

  2. 进行测试时,可以先生成工程里的openni-viewer,测试pcl是否能成功获取kinect的数据,之后再生成kinfu-app进行测试,最终无误后生成全部的pcl,并install;

  3. 此次版本的pcl源码存在的问题1:
      在源码中进行编译时,无论选不选择BUILD_GPU,都会出现

    libboost_thread-vc100-mt-gd-1_50.lib(thread.obj) : error LNK2019

    这个错误 。
    文章 http://blog.csdn.net/lming_08/article/details/19114417
    给出了这个问题的解决方法,在源码文件里的cmake/pcl_find_boost.cmake里把

    Required boost modules find_package(Boost 1.40.0 REQUIRED COMPONENTS
    system filesystem thread date_time iostreams)

    修改为

    Required boost modules find_package(Boost 1.40.0 REQUIRED COMPONENTS
    system filesystem thread date_time iostreams chrono)

  4. 此次版本的pcl源码存在的问题2:
      本来以为这下快要大功告成了,没想到1个小时后编译结果是130+成功,2个失败,当时特别丧气。。失败的原因在于出现了有关PNG的错误,贴图如下:
    这里写图片描述
    网上公开的解决方案是在源码的tools文件夹里的cmakelist打开后,屏蔽掉

    PCL_ADD_EXECUTABLE(pcl_pcd2png “${SUBSYS_NAME}” pcd2png.cpp)
    target_link_libraries(pcl_pcd2png pcl_common pcl_io)
    PCL_ADD_EXECUTABLE (pcl_organized_pcd_to_png “${SUBSYS_NAME}”organized_pcd_to_png.cpp)
    target_link_libraries (pcl_organized_pcd_to_png pcl_common pcl_io)

    这四句就可以了,最终可以正确安装完整的pcl

  5. 安装过程中还有一个问题是,在卸载了kinect的微软官方SDK后,还要卸载pcl的openni和premesense,并重新安装,但是安装好后,cmake会提示找不到openni,无法得到kinfu和gpu的工程,找不到具体原因,第二天先利用cmake编译pcl1.7.1的源码能够找到openni,之后转到新的含有kinfu的pcl-master源码,此时才成功找到openni,并最终成功安装,这个问题的原因后来没有深究。

下面上几张kinfu的截图,简单的试了下,rgb图是按时间间隔采集的,所以有些地方有模型但是没纹理,另外纹理交界的地方并没有做纹理融合,这两个问题是我将来准备优化代码的方向。
这里写图片描述
这里写图片描述
这里写图片描述

补充一下:我下载的pcl-master源码,是在2014年11月8日的版本,官方后续版本应该会陆续修复已有bug。

       

(转载请注明作者和出处: http://blog.csdn.net/gh234505 未经允许请勿用于商业用途)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
PCL (Point Cloud Library) 是一个广泛使用的开源库,用于处理三维点云数据。KinectFusion是一种基于RGB-D相机的三维重建技术,能够实时地构建环境的三维模型。PCL中提供了GPU加速的ICP(迭代最近点)算法,可以用于KinectFusion中的点云配准。 要使用GPU加速的ICP算法,需要使用PCL的gpu模块。首先需要安装CUDA和PCL的gpu模块。安装完成后,可以使用以下代码示例来使用GPU加速的ICP算法: ```c++ #include <pcl/gpu/kinfu_large_scale/kinfu.h> #include <pcl/gpu/kinfu_large_scale/kinfuLS.h> #include <pcl/gpu/containers/device_array.h> #include <pcl/gpu/kinfu_large_scale/impl/kinfuLS.hpp> #include <pcl/point_types.h> // 创建一个kinfu对象 pcl::gpu::kinfuLS::KinfuTracker::Ptr kinfu(new pcl::gpu::kinfuLS::KinfuTracker()); // 设置kinfu的参数,比如图像分辨率、体素大小等 kinfu->volume().setSize(256, 256, 256); kinfu->volume().setTsdfTruncDist(0.03f); kinfu->setDepthTruncationForICP(4.f); kinfu->setCameraMovementThreshold(0.001f); kinfu->setIcpCoresCount(256); // 读取RGB-D数据 pcl::gpu::kinfuLS::KinfuTracker::DepthMap depth_device; pcl::gpu::kinfuLS::KinfuTracker::ColorMap color_device; // 读取深度图和彩色图像 // ... // 运行kinfu kinfu->operator()(depth_device, color_device); // 获取点云数据 pcl::PointCloud<pcl::PointXYZI>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZI>()); kinfu->volume().fetchCloud(*cloud); // 运行GPU加速的ICP算法 pcl::gpu::DeviceArray<pcl::PointXYZI> cloud_device(cloud->size()); cloud_device.upload(cloud->points); kinfu->performLastICP(cloud_device); // 获取配准后的点云 kinfu->volume().fetchCloud(*cloud); ``` 在这个例子中,首先创建了一个kinfu对象,并设置了一些参数。然后读取RGB-D数据,并运行kinfu。接着将点云数据上传到GPU,并运行GPU加速的ICP算法。最后获取配准后的点云数据。 需要注意的是,GPU加速的ICP算法需要非常强的计算能力,建议使用高性能的GPU进行计算。同时,需要根据实际情况调整一些参数,比如体素大小、ICP迭代次数等,以获得更好的配准效果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值