前言
本文介绍在Ubuntu18.04系统中,如何安装PCL。
源码安装方式:pcl版本1.91,vtk版本8.2.0,Ubuntu版本18.04。
安装好后,可以看到pcl的库,在/usr/lib/中;
通过编写C++代码,直接调用的pcl库
#include <iostream>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
...............
然后使用Cmake编译,生成可执行程序,可视化效果:
一、安装pcl所需依赖
编写一个sh脚本,包含安装pcl依赖的命令,名称为:install_dependencies.sh
#!/bin/bash
sudo apt-get update # 更新包列表
sudo apt-get install -y git build-essential linux-libc-dev # 安装基础构建工具和库
sudo apt-get install -y cmake cmake-gui # 安装 cmake 和 cmake-gui
sudo apt-get install -y libusb-1.0-0-dev libusb-dev libudev-dev # 安装 libusb 相关库
sudo apt-get install -y mpi-default-dev openmpi-bin openmpi-common # 安装 MPI 相关库
sudo apt-get install -y libflann1.9 libflann-dev # 安装 FLANN 库
sudo apt-get install -y libeigen3-dev # 安装 Eigen 库
sudo apt-get install -y libboost-all-dev # 安装 Boost 库
sudo apt-get install -y libvtk7.1-qt libvtk7.1 libvtk7-qt-dev # 安装 VTK 库
sudo apt-get install -y libqhull* libgtest-dev # 安装 QHull 和 GTest 库
sudo apt-get install -y freeglut3-dev pkg-config libxmu-dev libxi-dev # 安装 FreeGLUT 和其他依赖库
sudo apt-get install -y mono-complete openjdk-8-jdk openjdk-8-jre # 安装 Mono 和 OpenJDK
然后在终端中运行以下命令来执行脚本:
chmod +x install_dependencies.sh
./install_dependencies.sh
需要确保没有遗漏,安装成功
二、源码安装vtk
VTK(Visualization Toolkit)是一个开源的软件系统,用于3D计算机图形、图像处理和可视化。
它由Kitware公司开发和维护,并且是众多可视化和数据处理应用程序的基础。功能包括:
- 3D图形渲染:VTK支持3D图形渲染,可以生成高质量的3D图像和动画。
- 数据处理:VTK提供了丰富的数据处理功能,包括数据过滤、转换、采样等。
- 图像处理:VTK可以处理2D和3D图像,提供了图像过滤、分割、变换等功能。
- 科学计算:VTK包含多种科学计算工具,可以用于科学数据的分析和可视化。
先安装cmake 和vtk 的依赖项
sudo apt-get install cmake-curses-gui
sudo apt-get install freeglut3-dev
sudo apt-get install libqt5x11extras5 libqt5x11extras5-dev
然后下载VTK-8.2.0库,VTK官网地址:https://vtk.org/download/
需要下来网页,找到8.2.0版本,下载VTK-8.2.0. zip或VTK-8.2.0.tar. gz
进入压缩包的下载目录,解压文件,然后进入文件夹所在位置的命令终端
比如:把压缩包放到了software目录,然后解压
注意:需要退出Conda环境!!!需要退出Conda环境!!!需要退出Conda环境!!!
创建build文件夹,然后cd到build中, 使用可视化的cmake进行工程分析
mkdir build
cd build
cmake-gui
看到如下界面,当然会有差异(没有红色部分内容,因为之前编译过了,才会出现的)
- 点击Browse Source,选择source code的路径
- 勾选Grouped和Advanced
- 点击底下的Configure按钮,等待执行完成,出现红色部分的内容
展开 Module ,勾选 Module_vtkGUISupportQt
展开VTK,勾选 VTK_Group_Qt
接着点击Configure按钮,等待完成后,再点击Generate
按钮
这一步完成了cmake分析,如果没什么问题,如上图所示
编译安装VTK-8.2.0
关闭cmake-gui界面,然后输入sudo make
进行编译,编译时间会较长;
如何电脑CPU性能较好,支持多线程,可以使用多线程加速编译
sudo make -j2
可以使用 -j
选项来指定线程数,其中 2 表示使用 2 个线程进行并行编译。
根据电脑性能的 CPU 核心数量调整这个数字,比如sudo make -j4
安装VTK-8.2.0
最后输入sudo make install
进行安装,完成VTK的安装啦~
sudo make install
三、源码安装pcl
来到pcl开源地址,下载源码压缩包Source code
https://github.com/PointCloudLibrary/pcl/releases/tag/pcl-1.9.1
解压下载的压缩包,然后打开终端,进入解压的目录,输入下面命令:
cd pcl-pcl-1.9.1
mkdir release
cd release
然后复制下面命令回车,用cmake分析整个源代码
cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_GPU=ON-DBUILD_apps=ON -DBUILD_examples=ON \ -DCMAKE_INSTALL_PREFIX=/usr ..
构建完成后,接着输入sudo make进行编译,时间比较长
最后输入sudo make install 进行安装,完成pcl安装啦~
sudo make install
四、测试pcl
创建一个test_pcl文件夹,然后创建一个源文件test_pcl.cpp,代码如下:
#include <iostream>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
int main(int argc, char** argv) {
// 创建点云对象
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
// 定义立方体的边长和点的数量
float edge_length = 1.0;
int num_points_per_axis = 10; // 每个轴上的点数
int total_points = num_points_per_axis * num_points_per_axis * num_points_per_axis;
// 生成均匀分布的立方体点云
for (int i = 0; i < num_points_per_axis; ++i) {
for (int j = 0; j < num_points_per_axis; ++j) {
for (int k = 0; k < num_points_per_axis; ++k) {
pcl::PointXYZRGB point;
point.x = static_cast<float>(i) / (num_points_per_axis - 1) * edge_length;
point.y = static_cast<float>(j) / (num_points_per_axis - 1) * edge_length;
point.z = static_cast<float>(k) / (num_points_per_axis - 1) * edge_length;
// 根据z坐标设置颜色渐变,使渐变更加明显
uint8_t r = static_cast<uint8_t>(255 * point.z / edge_length);
uint8_t g = static_cast<uint8_t>(255 * (1 - point.z / edge_length));
uint8_t b = static_cast<uint8_t>(255 * std::abs(0.5 - point.z / edge_length) * 2); // 增加蓝色成分以增强渐变
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);
cloud->points.push_back(point);
}
}
}
cloud->width = static_cast<uint32_t>(cloud->points.size());
cloud->height = 1;
cloud->is_dense = true;
// 保存点云到PCD文件
pcl::io::savePCDFileASCII("cube_point_cloud.pcd", *cloud);
std::cout << "Saved " << cloud->points.size() << " data points to cube_point_cloud.pcd." << std::endl;
// 可视化点云
pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
viewer->setBackgroundColor(0, 0, 0);
pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);
viewer->addPointCloud<pcl::PointXYZRGB>(cloud, rgb, "sample cloud");
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
viewer->addCoordinateSystem(1.0);
viewer->initCameraParameters();
// 显示点云直到窗口关闭
while (!viewer->wasStopped()) {
viewer->spinOnce(100);
}
return 0;
}
在test_pcl文件夹下再创建一个配置文件CMakeLists.txt,代码如下:
cmake_minimum_required(VERSION 2.6)
project(test_pcl)
find_package(PCL 1.9.1 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(test_pcl test_pcl.cpp)
target_link_libraries (test_pcl ${PCL_LIBRARIES})
install(TARGETS test_pcl RUNTIME DESTINATION bin)
在项目目录中运行以下命令以编译并运行程序:
mkdir build
cd build
cmake ..
make
./test_pcl
示例效果:
通过滑动鼠标,缩放大小:
恭喜完成安装啦~
报错与解决方案
如果遇到报错,显示刚才安装的vtk8.2库没有找到
./test_pcl: error while loading shared libraries: libvtkRenderingCore-8.2.so.1: cannot open shared object file: No such file or directory ls /usr/local/lib/libvtkRenderingCore-8.2.so.1 /usr/local/lib/libvtkRenderingCore-8.2.so.1
需要添加库的环境遍历,执行命令:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
再并运行程序 ./test_pcl