• Ubuntu 配置安装PCL


    Ubuntu 配置安装PCL

    之前一直在Mac下开发,现在入手Ubuntu,也借此学习一下Linux下的源码编译安装过程.

    PCL简介

    PCL(Point Cloud Library)是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源C++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操作系统平台,可在Windows、Linux、Android、Mac OS X、部分嵌入式实时系统上运行。如果说OpenCV是2D信息获取与处理的结晶,那么PCL就在3D信息获取与处理上具有同等地位,PCL是BSD授权方式,可以免费进行商业和学术应用。

    具体步骤

    1. 安装依赖项

    apt-get update && 
    		apt-get install -y libflann-dev 
    		libvtk5-dev 
    		libqhull-dev
    

    2. 下载源码

    git clone https://github.com/PointCloudLibrary/pcl
    cd pcl
    

    3. 配置安装

    cmake -DCMAKE_BUILD_TYPE=Release .
    make -j 8 # job数量根据自身的CPU核数定
    sudo make install
    

    4. 安装目录

    • 通过apt安装的头文件(如vtk)在/usr/include里面
    • 通过apt安装的动态链接库(如vtk)在/usr/lib里面
    • 自己编译安装的头文件(如PCL)在/usr/local/include里面
    • 自己编译安装的动态链接库(如PCL)在/usr/local/lib里面

    以上文件夹在写CMakeLists.txt使用find_package()命令都可以找到,这里列出来只是为了更加了解细节,或者有的代码补全工具会需要库的具体路径

    测试

    main.cpp

    #include <pcl/common/common_headers.h>
    #include <pcl/visualization/pcl_visualizer.h>
    
    boost::shared_ptr<pcl::visualization::PCLVisualizer> simpleVis(
        pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud)
    {
        boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(
            new pcl::visualization::PCLVisualizer("3D Viewer"));
    
        viewer->setBackgroundColor(0, 0, 0);
        viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");
        viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
        viewer->addCoordinateSystem(1.0);
        viewer->initCameraParameters();
        return (viewer);
    }
    
    int main(int argc, char **argv)
    { 
        // 创建点云
        pcl::PointCloud<pcl::PointXYZ>::Ptr basic_cloud_ptr(
            new pcl::PointCloud<pcl::PointXYZ>);
    
        for (float z(-1.0); z <= 1.0; z += 0.05)
        {
            for (float angle(0.0); angle <= 360.0; angle += 5)
            {
                // 底面为椭圆
                pcl::PointXYZ basic_point;
                basic_point.x = 0.5 * cosf(pcl::deg2rad(angle));
                basic_point.y = sinf(pcl::deg2rad(angle));
                basic_point.z = z;
                basic_cloud_ptr->points.push_back(basic_point);
            }
        }
    
        basic_cloud_ptr->width = (int)basic_cloud_ptr->points.size();
        basic_cloud_ptr->height = 1;
    
        boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
        viewer = simpleVis(basic_cloud_ptr);
        while (!viewer->wasStopped())
        {
            viewer->spinOnce(100);
            boost::this_thread::sleep(boost::posix_time::microseconds(100000));
        }
        return 0;
    }
    

    CMakeLists.txt

    cmake_minimum_required(VERSION 3.0)
    project(demo01)
    
    set(CMAKE_CXX_STANDARD 11)
    
    find_package(PCL REQUIRED)
    include_directories(${PCL_INCLUDE_DIRS})
    link_directories(${PCL_LIBRARY_DIRS})
    add_definitions(${PCL_DEFINITIONS})
    
    add_executable(demo01 main.cpp)
    target_link_libraries (demo01 ${PCL_LIBRARIES})
    

    命令

    cmake .
    make
    ./demo01
    

    运行结果

    小结

    之前配环境都是apt一键解决,在Mac上也是brew一下,没有从源码编译过,这次实验可以说更进一步了解了底层细节,学到很多.

    Linux上开发还是挺舒服的~

  • 相关阅读:
    用python解析html--SGMLParser
    Python相对完美的URL拼接函数
    Java将视频转为缩略图--ffmpeg
    卡夫卡(kafka)
    Qt 学习之路 2
    QT的Paint 系统
    Qt的4个图像类QImage/QPixmap/QBitmap/QPicture 转
    QImage对一般图像的处理
    Hough变换-理解篇
    从零开始学习无人驾驶技术 --- 车道检测
  • 原文地址:https://www.cnblogs.com/fanghao/p/9340742.html
Copyright © 2020-2023  润新知