linux安装PCL库

C/C++ 同时被 2 个专栏收录
13 篇文章 0 订阅
15 篇文章 0 订阅

一、安装依赖库
必须: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.gzVTKData-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等。

  • 3
    点赞
  • 0
    评论
  • 34
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值