前言
本文介紹在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