pcl入门笔记1:pcl的安装

前言

最近刚入坑pcl,打算记录一下自己的学习历程。

安装pcl前的准备

本教程使用的是windows下的预编译包安装,要想顺利编译程序,需要安装好微软的Visual Studio IDE和cmake。这两者安装过程笔者不详细介绍,读者可以自行百度。建议cmake安装gui版本。Visual Studio是集成开发环境,cmake是c/c++跨平台编译工具。
pcl的预编译包链接:https://pan.baidu.com/s/1hWi3_hELh1MVZihHV23juQ
提取码:ouzu
笔者提供了1.8和1.12两个版本,读者可以自行选择安装。每个版本的文件夹有两个文件。笔者的教程是以1.12版本为例。

安装步骤

双击下载的exe文件出现如下:
在这里插入图片描述
点击下一步
在这里插入图片描述
点击接受
在这里插入图片描述
如上图需要添加环境变量
在这里插入图片描述
然后选择安装位置,等待安装完成即可。
然后把另外一个压缩文件解压,会得到包含一些pdb后缀的文件,全选这些文件,复制到pcl安装目录下的bin文件夹中。

openni的安装

随后便需要安装openni,进入pcl安装目录中,进入3rdParty文件夹,进入openni2文件夹。里面有一个OpenNI-Windows-x64-2.2.msi文件,双击,如果以前安装过openni建议点击remove移除重新安装。然后安装的路径选择3rdParty下的openni2目录。

检查环境变量

安装之后需要检查一下,安装好的环境如下
在这里插入图片描述
打开环境变量页面查看,首先在系统变量中会有一个PCL_ROOT变量,这个变量的路径是pcl安装路径。
在这里插入图片描述

上图是用户变量下path里面需要添加的。

测试

建立一个kdtree_search.cpp文件,代码如下:

#include<iostream>
using namespace std;
#include<pcl/point_cloud.h>
#include<pcl/kdtree/kdtree_flann.h>
#include<vector>
#include<ctime>

int main(int argc,char** arv)
{
    //随机种子,srand里面的值每次都是一样的,那么生成的随机数不变,否则会变
    srand(time(NULL));
    //关于点云数据的初始化
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    cloud->width=1000;
    cloud->height=1;
    cloud->points.resize(cloud->width*cloud->height);
    for(size_t i=0;i<cloud->points.size();++i)
    {
        cloud->points[i].x=1024.0f*rand()/(RAND_MAX+1.0f);
        cloud->points[i].y=1024.0f*rand()/(RAND_MAX+1.0f);
        cloud->points[i].z=1024.0f*rand()/(RAND_MAX+1.0f);
    }
    //创建kd-tree对象
    pcl::KdTreeFLANN<pcl::PointXYZ> kdtree;
    //设置cloud的搜索空间
    kdtree.setInputCloud(cloud);
    //定义一个查询节点,并且用来查询
    pcl::PointXYZ searchPoint;
    searchPoint.x=1024.0f*rand()/(RAND_MAX+1.0f);
    searchPoint.y=1024.0f*rand()/(RAND_MAX+1.0f);
    searchPoint.z=1024.0f*rand()/(RAND_MAX+1.0f);
    //k近邻搜索
    int k=10;
    //保存查询点的k近邻索引
    vector<int> pointIdxNKNSearch(k);
    //保存k近邻点对应的欧氏距离
    vector<float> pointNKSquaredDistance(k);
    cout<<"k nearest neighbor search at ("<<searchPoint.x
    <<"  "<<searchPoint.y<<"  "<<searchPoint.z<<") with k="<<k<<endl;
    //执行k近邻搜索,并且打印相应信息
    if(kdtree.nearestKSearch(searchPoint,k,pointIdxNKNSearch,pointNKSquaredDistance)>0)
    {
        cout<<"k nearest neighbor:"<<endl;
        for(size_t i=0;i<pointIdxNKNSearch.size();++i)
        {
            cout<<"    "<<cloud->points[pointIdxNKNSearch[i]].x
            <<" "<<cloud->points[pointIdxNKNSearch[i]].y
            <<" "<<cloud->points[pointIdxNKNSearch[i]].z
            <<" (squared distance:"<<pointNKSquaredDistance[i]<<")"<<endl;
        }
        //半径r内近邻搜索方式
        vector<int> pointIdxRadiusSearch;
        vector<float> pointRadiusSquaredDistance;
        float radius=256.0f*rand()/(RAND_MAX+1.0f);
        cout<<"Neighbors within radius search at ("<<searchPoint.x
        <<" "<<searchPoint.y
        <<" "<<searchPoint.z
        <<") with radius="<<radius<<endl;
        
        if(kdtree.radiusSearch(searchPoint,radius,pointIdxRadiusSearch,pointRadiusSquaredDistance)>0)
        {
            cout<<"radius search:"<<endl;
            for(size_t i=0;i<pointIdxRadiusSearch.size();++i)
            {
                cout<<"    "<<cloud->points[pointIdxRadiusSearch[i]].x
                <<" "<<cloud->points[pointIdxRadiusSearch[i]].y
                <<" "<<cloud->points[pointIdxRadiusSearch[i]].z
                <<" (squared distance:"<<pointRadiusSquaredDistance[i]<<")"<<endl;
            }
            
        }
        else
        {
            cout<<"no radius search"<<endl;
        }
    }
    return 0;
}

建立一个CMakeLists.txt文件,内容如下:

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(kdtree_search)
find_package(PCL 1.12 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(kdtree_search kdtree_search.cpp)
target_link_libraries(kdtree_search ${PCL_LIBRARIES})

这两个文件放在同一个文件夹下,然后在同级目录下建立一个build文件,用来存放编译产生的中间文件。然后打开cmd,cd到build文件夹,cmd输入cmake ..回车执行完毕后找到build文件夹下sln后缀的文件双击用vs打开。在生成中点击重新生成解决方案开始编译。编译完成后进入Debug文件夹,能找到exe可执行文件。然后进入cmd cd到Debug文件夹,输入exe可执行文件的全名称,就可以运行程序了,运行程序结果如下:
在这里插入图片描述
至此,pcl安装就完毕了。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追天一方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值