当前位置:   article > 正文

linux安装PCL库_fatal error: pcl/visualization/cloud_viewer.h

fatal error: pcl/visualization/cloud_viewer.h

一、安装依赖库
必须:Boost、Eigen、FLANN、vtk

可选择:Qhull、OpenNI、CUDA

以下是所有依赖包的安装,不确定就全部安装一遍。

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

其中vtk以及qt这两个库,建议大家还是从源码编译安装比较好。

vtk8.2.0安装方法:

首先下载VTK-8.2.0.tar.gzVTKData-8.2.0.tar.gz, 下载地址:https://vtk.org/download/

解压vtk,然后将vtkdata解压至vtk文件夹下,执行如下命令:

  1. mkdir build
  2. cd build
  3. cmake ../ -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DCMAKE_BUILD_TYPE=Release -DVTK_WRAP_PYTHON=ON
  4. make -j8
  5. sudo make install

还可参考这个网址:http://www.cb.uu.se/~johan/vtk/installing_vtk_on_rhel6.txt

二、使用apt安装

sudo apt-get install libpcl-dev

安装后的编译过程可能会出现库文件vtkproj4.so丢失的问题。为解决该问题可以直接软链接解决。代码如下:

sudo ln -s /usr/lib/libvtkproj4.so.5.10 /usr/lib/libvtkproj4.so

注意:使用这个命令安装的是pcl1.7,它需要的是Boost v1.58,如果你的boost库的版本在这之上,就会发生冲突,可以降低boost库的版本或者安装pcl1.7以上的版本。

三、从源码安装pcl1.9.1:

1.下载源码:https://github.com/PointCloudLibrary/pcl/releases

2.解压文件

3.安装,依次执行下列命令:

  1. cd pcl-pcl-1.9.1 && mkdir build && cd build
  2. cmake -DCMAKE_BUILD_TYPE=Release ..
  3. make -j2
  4. sudo make -j2 install

4.执行完上面的步骤之后,如果你在IDE(比如Kdevelop)中#include <pcl/*****>的时候,你会发现kdevelop找不到pcl包含文件,原因是在/usr/include中pcl文件夹的名称是pcl1.9,我们可以把pcl1.9中的pcl文件夹移动到/usr/include中,然后删掉pcl1.9,这样就可以了。

四、常见问题:

问题1. /data/anaconda3/lib/libcurl.so.4: no version information available (required by curl)

解决方法:

第一步:查看路經

locate libcurl4.so.4

结果是:

  1. /data/anaconda3/lib/libcurl.so.4
  2. /data/anaconda3/lib/libcurl.so.4.5.0
  3. /data/anaconda3/pkgs/libcurl-7.63.0-h20c2e04_1000/lib/libcurl.so.4
  4. /data/anaconda3/pkgs/libcurl-7.63.0-h20c2e04_1000/lib/libcurl.so.4.5.0
  5. /usr/lib/x86_64-linux-gnu/libcurl.so.4
  6. /usr/lib/x86_64-linux-gnu/libcurl.so.4.4.0

第二步:查找 libcurl.so.4的连接

ls -l /data/anaconda3/lib/libcurl.so.4

结果是:

 /data/anaconda3/lib/libcurl.so.4 -> libcurl.so.4.5.0

第三步:删除它并重新连接到/usr/lib/x86_64-linux-gnu/libcurl.so.4

  1. sudo rm /data/anaconda3/lib/libcurl.so.4
  2. sudo ln -s /usr/lib/x86_64-linux-gnu/libcurl.so.4 /data/anaconda3/lib/libcurl.so.4

第四步:检查

ls -l /data/anaconda3/lib/libcurl.so.4

结果如下

lrwxrwxrwx 1 root root 38 619 13:31 /data/anaconda3/lib/libcurl.so.4 -> /usr/lib/x86_64-linux-gnu/libcurl.so.4

大功告成!

然而,修改了以后curl命令无法运行,待编译成功后还需要把软连接改回去!

问题2:编译过程出现一系列类似/usr/lib/libvtkIO.so.5.10.1: undefined reference to `TIFFReadDirectory@LIBTIFF_4.0'的错误 

如果你之前安装过OpenCV,那么一般情况下,你已经安装了libtiff5这个库,这个库的版本与vtk需要调用的tiff库的版本不一致,因此出现了上面这个错误,建议解决方法是,先卸载libtiff5,然后重新安装tiff4.0.4:

sudo apt-get remove libtiff5-dev

下载tiff4.0.4:http://download.osgeo.org/libtiff/

解压、进入tiff-4.0.4目录,执行如下命令:

  1. ./configure
  2. make
  3. sudo make install

然后重新编译pcl。

五、测试程序

1.以ti下代码功能是:将点云数据.las文件转换为.pcd文件。文件名称:las2pcd.cpp

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <liblas/liblas.hpp>
  4. #include <pcl/io/io.h>
  5. #include <pcl/io/pcd_io.h>
  6. #include <pcl/point_types.h>
  7. using namespace std;
  8. int main (int argc, char *argv[])
  9. {
  10. string filePath;
  11. filePath=argv[1];
  12. std::cerr << "INFO : Loading : " << filePath << std::endl;
  13. // 实例化一个新的PCL pointcloud对象
  14. pcl::PointCloud<pcl::PointXYZRGB> cloud;
  15. // 打开las文件
  16. std::ifstream ifs(filePath.c_str(), std::ios::in | std::ios::binary);
  17. // 防止打开失败
  18. if(ifs.fail())
  19. {
  20. std::cerr << "ERROR : Impossible to open the file : " << filePath <<std::endl;
  21. return 1;
  22. }
  23. liblas::ReaderFactory f;
  24. liblas::Reader reader = f.CreateWithStream(ifs); // 读取 las 文件
  25. unsigned long int nbPoints=reader.GetHeader().GetPointRecordsCount();
  26. // 填充云数据
  27. cloud.width = nbPoints; // 表示点云是 "unorganized"
  28. cloud.height = 1; // (即不是深度图)
  29. cloud.is_dense = false;
  30. cloud.points.resize (cloud.width * cloud.height);
  31. cout << "INFO : " << cloud.points.size () << " points detected in " << filePath << endl;
  32. int i=0; // 计算
  33. uint16_t r1, g1, b1; // RGB 变量--- .las (16-bit coded)
  34. int r2, g2, b2; // 用于转换的RGB 变量(看下面)
  35. uint32_t rgb; // "packed" RGB value for .pcd
  36. while(reader.ReadNextPoint())
  37. {
  38. // 获取 XYZ 信息
  39. cloud.points[i].x = (reader.GetPoint().GetX());
  40. cloud.points[i].y = (reader.GetPoint().GetY());
  41. cloud.points[i].z = (reader.GetPoint().GetZ());
  42. // 获取RGB信息. Note: in liblas, the "Color" class can be accessed from within the "Point" class, thus the triple gets
  43. r1 = (reader.GetPoint().GetColor().GetRed());
  44. g1 = (reader.GetPoint().GetColor().GetGreen());
  45. b1 = (reader.GetPoint().GetColor().GetBlue());
  46. // .las stores RGB color in 16-bit (0-65535) while .pcd demands an 8-bit value (0-255). Let's convert them!
  47. r2 = ceil(((float)r1/65536)*(float)256);
  48. g2 = ceil(((float)g1/65536)*(float)256);
  49. b2 = ceil(((float)b1/65536)*(float)256);
  50. // PCL particularity: must "pack" the RGB into one single integer and then reinterpret them as float
  51. rgb = ((int)r2) << 16 | ((int)g2) << 8 | ((int)b2);
  52. cloud.points[i].rgb = *reinterpret_cast<float*>(&rgb);
  53. i++;
  54. }
  55. // 存储文件
  56. pcl::io::savePCDFileASCII (argv[2], cloud);
  57. std::cerr << "Saved " << cloud.points.size () << " data points to pointcloud.pcd." << std::endl;
  58. return (0);
  59. }

2.制作CMakeList文件

  1. cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
  2. project(las2pcd)
  3. find_package(PCL REQUIRED)
  4. include_directories(${PCL_INCLUDE_DIRS})
  5. include_directories(/usr/include)
  6. link_directories(${PCL_LIBRARY_DIRS})
  7. add_definitions(${PCL_DEFINITIONS})
  8. add_executable(las2pcd las2pcd.cpp)
  9. target_link_libraries(las2pcd
  10. ${PCL_COMMON_LIBRARIES}
  11. ${PCL_IO_LIBRARIES}
  12. /usr/lib/liblas.so
  13. /usr/lib/liblas_c.so
  14. )

3.测试

  1. mkdir build
  2. cd build
  3. cmake ..
  4. make -j2
  5. ./las2pcd las文件路經 pcd文件输出路經

4.会遇到的问题,假如你在代码中使用了#include <pcl/visualization/cloud_viewer.h>,则有可能会出现以下错误:

 fatal error: pcl/visualization/cloud_viewer.h: No such file or directory,

其原因是在编译pcl库的时候并没有生成visualization相关的文件,这可能是由于cmake的版本较低造成的,建议重新安装新版本的cmake,比如3.15.2等。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/394199
推荐阅读
相关标签
  

闽ICP备14008679号