赞
踩
一、安装依赖库
必须:Boost、Eigen、FLANN、vtk
可选择:Qhull、OpenNI、CUDA
以下是所有依赖包的安装,不确定就全部安装一遍。
- 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
其中vtk以及qt这两个库,建议大家还是从源码编译安装比较好。
vtk8.2.0安装方法:
首先下载VTK-8.2.0.tar.gz和VTKData-8.2.0.tar.gz, 下载地址:https://vtk.org/download/
解压vtk,然后将vtkdata解压至vtk文件夹下,执行如下命令:
- mkdir build
- cd build
- cmake ../ -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DCMAKE_BUILD_TYPE=Release -DVTK_WRAP_PYTHON=ON
- make -j8
- 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.安装,依次执行下列命令:
- cd pcl-pcl-1.9.1 && mkdir build && cd build
- cmake -DCMAKE_BUILD_TYPE=Release ..
- make -j2
- 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
结果是:
- /data/anaconda3/lib/libcurl.so.4
- /data/anaconda3/lib/libcurl.so.4.5.0
- /data/anaconda3/pkgs/libcurl-7.63.0-h20c2e04_1000/lib/libcurl.so.4
- /data/anaconda3/pkgs/libcurl-7.63.0-h20c2e04_1000/lib/libcurl.so.4.5.0
- /usr/lib/x86_64-linux-gnu/libcurl.so.4
- /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
- sudo rm /data/anaconda3/lib/libcurl.so.4
- 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 6月 19 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目录,执行如下命令:
- ./configure
- make
- sudo make install
然后重新编译pcl。
五、测试程序
1.以ti下代码功能是:将点云数据.las文件转换为.pcd文件。文件名称:las2pcd.cpp
- #include <iostream>
- #include <cstdlib>
- #include <liblas/liblas.hpp>
- #include <pcl/io/io.h>
- #include <pcl/io/pcd_io.h>
- #include <pcl/point_types.h>
-
- using namespace std;
-
- int main (int argc, char *argv[])
- {
- string filePath;
- filePath=argv[1];
-
- std::cerr << "INFO : Loading : " << filePath << std::endl;
-
- // 实例化一个新的PCL pointcloud对象
- pcl::PointCloud<pcl::PointXYZRGB> cloud;
-
- // 打开las文件
- std::ifstream ifs(filePath.c_str(), std::ios::in | std::ios::binary);
-
- // 防止打开失败
- if(ifs.fail())
- {
- std::cerr << "ERROR : Impossible to open the file : " << filePath <<std::endl;
- return 1;
- }
-
- liblas::ReaderFactory f;
- liblas::Reader reader = f.CreateWithStream(ifs); // 读取 las 文件
- unsigned long int nbPoints=reader.GetHeader().GetPointRecordsCount();
-
- // 填充云数据
- cloud.width = nbPoints; // 表示点云是 "unorganized"
- cloud.height = 1; // (即不是深度图)
- cloud.is_dense = false;
- cloud.points.resize (cloud.width * cloud.height);
-
- cout << "INFO : " << cloud.points.size () << " points detected in " << filePath << endl;
-
- int i=0; // 计算
- uint16_t r1, g1, b1; // RGB 变量--- .las (16-bit coded)
- int r2, g2, b2; // 用于转换的RGB 变量(看下面)
- uint32_t rgb; // "packed" RGB value for .pcd
-
- while(reader.ReadNextPoint())
- {
- // 获取 XYZ 信息
- cloud.points[i].x = (reader.GetPoint().GetX());
- cloud.points[i].y = (reader.GetPoint().GetY());
- cloud.points[i].z = (reader.GetPoint().GetZ());
-
- // 获取RGB信息. Note: in liblas, the "Color" class can be accessed from within the "Point" class, thus the triple gets
- r1 = (reader.GetPoint().GetColor().GetRed());
- g1 = (reader.GetPoint().GetColor().GetGreen());
- b1 = (reader.GetPoint().GetColor().GetBlue());
-
- // .las stores RGB color in 16-bit (0-65535) while .pcd demands an 8-bit value (0-255). Let's convert them!
- r2 = ceil(((float)r1/65536)*(float)256);
- g2 = ceil(((float)g1/65536)*(float)256);
- b2 = ceil(((float)b1/65536)*(float)256);
-
- // PCL particularity: must "pack" the RGB into one single integer and then reinterpret them as float
- rgb = ((int)r2) << 16 | ((int)g2) << 8 | ((int)b2);
-
- cloud.points[i].rgb = *reinterpret_cast<float*>(&rgb);
-
- i++;
- }
-
- // 存储文件
- pcl::io::savePCDFileASCII (argv[2], cloud);
-
- std::cerr << "Saved " << cloud.points.size () << " data points to pointcloud.pcd." << std::endl;
-
- return (0);
- }
2.制作CMakeList文件
- cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
- project(las2pcd)
- find_package(PCL REQUIRED)
-
- include_directories(${PCL_INCLUDE_DIRS})
-
- include_directories(/usr/include)
-
- link_directories(${PCL_LIBRARY_DIRS})
-
- add_definitions(${PCL_DEFINITIONS})
-
- add_executable(las2pcd las2pcd.cpp)
-
- target_link_libraries(las2pcd
- ${PCL_COMMON_LIBRARIES}
- ${PCL_IO_LIBRARIES}
- /usr/lib/liblas.so
- /usr/lib/liblas_c.so
- )
3.测试
- mkdir build
- cd build
- cmake ..
- make -j2
- ./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等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。