zoukankan      html  css  js  c++  java
  • 安装PCL(PointCloudLibrary) on Ubuntu

    安装PCL(PointCloudLibrary) on Ubuntu

    System environment:

    ubuntu 16.04

    我显示尝试使用源码安装,因为这样更符合我的系统环境,但是很可惜失败了,其中的一个坑是PCL版本要和VTK依赖的版本有关,

    在尝试了无数版本后,几乎都可以编译安装成功,但是在使用时报错:找不到OpenGL3.2或者更新的版本,glxinfo | grep OpenGL显示的

    信息是我的机器是OpenGL1.1版本??,可是我的RTX2080ti驱动几乎是最新的版本了??NVIDIA-SMI 440.36   Driver Version: 440.36   CUDA Version: 10.2  

    我不知道nvidia显卡驱动和OpenGL是否有关,我试图想通过升级OpenGL版本,结果网上根本没有相关教程,最后一怒就直接用apt-get来安装PCL了,心疼我的

    系统环境呀,本来不用污染系统环境的。

    开锤

    1.还是安装下依赖吧

    sudo apt-get update
    
    sudo apt-get install git build-essential linux-libc-dev
    sudo apt-get install cmake cmake-gui 
    sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
    sudo apt-get install mpi-default-dev openmpi-bin openmpi-common  
    sudo apt-get install libflann1.8 libflann-dev
    sudo apt-get install libeigen3-dev
    sudo apt-get install libboost-all-dev
    sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev
    sudo apt-get install libqhull* libgtest-dev
    sudo apt-get install freeglut3-dev pkg-config
    sudo apt-get install libxmu-dev libxi-dev 
    sudo apt-get install mono-complete
    sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre

    2.安装PCL

    # 如果在安装过程中出现库文件vtkproj4.so丢失的问题。为解决该问题可以直接软链接解决。
    sudo ln -s /usr/lib/libvtkproj4.so.5.10 /usr/lib/libvtkproj4.so


    sudo
    apt-get install libpcl-dev

    3.安装个可视化点云工具

    sudo apt-get update 
    
    sudo apt-get install pcl-tools

    如果无法定位软件包,那就换个清华源吧

    4.测试下是否有问题

    测试代码pcl_test.cpp:

    #include <iostream>
    #include <pcl/common/common_headers.h>
    #include <pcl/io/pcd_io.h>
    #include <pcl/visualization/pcl_visualizer.h>
    #include <pcl/visualization/cloud_viewer.h>
    #include <pcl/console/parse.h>
     
    
    int main(int argc, char **argv) {
        std::cout << "Test PCL !!!" << std::endl;
        
        pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);
        uint8_t r(255), g(15), b(15);
        for (float z(-1.0); z <= 1.0; z += 0.05)
        {
          for (float angle(0.0); angle <= 360.0; angle += 5.0)
          {
        pcl::PointXYZRGB point;
        point.x = 0.5 * cosf (pcl::deg2rad(angle));
        point.y = sinf (pcl::deg2rad(angle));
        point.z = z;
        uint32_t rgb = (static_cast<uint32_t>(r) << 16 |
            static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
        point.rgb = *reinterpret_cast<float*>(&rgb);
        point_cloud_ptr->points.push_back (point);
          }
          if (z < 0.0)
          {
        r -= 12;
        g += 12;
          }
          else
          {
        g -= 12;
        b += 12;
          }
        }
        point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
        point_cloud_ptr->height = 1;
        
        pcl::visualization::CloudViewer viewer ("test");
        viewer.showCloud(point_cloud_ptr);
        while (!viewer.wasStopped()){ };
        return 0;
    }

    再写个CMakeLists.txt吧,我反正不会说我不会写makefile

    CMakeLists.txt

    cmake_minimum_required(VERSION 2.6)
    project(pcl_test)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
    
    find_package(PCL REQUIRED)
    
    include_directories(${PCL_INCLUDE_DIRS})
    link_directories(${PCL_LIBRARY_DIRS})
    add_definitions(${PCL_DEFINITIONS})
    
    add_executable(pcl_test pcl_test.cpp)
    
    target_link_libraries (pcl_test ${PCL_LIBRARIES})
     
    install(TARGETS pcl_test RUNTIME DESTINATION bin)
    mkdir build && cd build
    
    cmake ..
    
    make -j8
    
    ./pcl_test

    出现test窗口就ok了

    如果再编译的时候出现

    对‘pcl::search::Search<pcl::PointXYZ>::getName[abi:cxx11]() const’未定义的引用

    解决办法:

    在cpp中或者.h中加入

    #include <pcl/search/impl/search.hpp>
     
    #ifndef PCL_NO_PRECOMPILE
    #include <pcl/impl/instantiate.hpp>
    #include <pcl/point_types.h>
    PCL_INSTANTIATE(Search, PCL_POINT_TYPES)
    
    #endif // PCL_NO_PRECOMPILE

    再编译就OK了

    Done!

  • 相关阅读:
    51nod 1179 最大的最大公约数 (数论)
    POJ 3685 二分套二分
    POJ 3045 贪心
    LIC
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    HDU 2389 Rain on your Parade
    HDU 2819 Swap
    HDU 1281 棋盘游戏
    HDU 1083 Courses
  • 原文地址:https://www.cnblogs.com/nanmi/p/12858586.html
Copyright © 2011-2022 走看看