我宣布我是傻逼,果然幻想着在Windows下做C++开发的我,就是个傻逼。
安装PCL
目前(2023年1月),PCL已经提供了apt
下载的方式,因此不需要像大部分文章所说的那样,先安装大量的依赖。
在 https://pointclouds.org/downloads/ 中可以看到,安装PCL的命令行:
sudo apt install libpcl-dev
目前下载的是最新版PCL 1.13.0
安装VTK
首先安装VTK的依赖:X11,OpenGL,cmake和cmake-gui
# X11
sudo apt-get install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev
# OpenGL
sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev
# cmake && cmake-gui
sudo apt-get install cmake cmake-gui
之后去VTK官网 https://vtk.org/download/ 安装最新版的VTK,VTK-9.2.5.tar.gz
打开terminal,输入:
cmake-gui
会打开 cmake的图形界面。
同时我们需要在VTK的解压目录新建一个build
文件夹。
在cmake-gui中:
配置 where is the source code 为VTK-9.2.5所在目录;
配置 where to build the binaries 为VTK-9.2.5下的build文件夹;
点击“Configure”,(用“Unix Makefiles”就可以);配置完成后,显示“Configuring done”。
勾选“VTK-Group-Qt”,再点击“Configure”;配置完成后,显示“Configuring done”;
点击“Generate”;显示“Generating done”,在build文件夹下生成工程文件。
在终端里切换到VTK安装目录下的build文件夹,输入:
make
sudo make install
至此,vtk安装完成。
CMakeList
对应的CMakeList:
cmake_minimum_required(VERSION 3.24)
project(GraduateProjectCPP)
set(CMAKE_CXX_STANDARD 11)
find_package(PCL 1.13 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(GraduateProjectCPP main.cpp src/RegionGrowing.h)
target_link_libraries (GraduateProjectCPP ${PCL_LIBRARIES})
install(TARGETS GraduateProjectCPP RUNTIME DESTINATION bin)
测试PCL
我用的是Clion,具体咋配置Clion的C++环境就不多说了。
// 网络测试用例
#include <pcl/common/common_headers.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/console/parse.h>
using namespace std;
int main(int argc, char **argv) {//柱型点云测试
cout << "Test PCL !" << endl;
pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);
uint8_t r(255), g(15), b(15);
for (float z(-1.0); z <= 1.0; z += 0.05) {//制作柱型点云集
for (float angle(0.0); angle <= 360.0; angle += 5.0) {
pcl::PointXYZRGB point;
point.x = cos (pcl::deg2rad(angle));
point.y = sin (pcl::deg2rad(angle));
point.z = z;
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);
point_cloud_ptr->points.push_back (point);
}
if (z < 0.0) {//颜色渐变
r -= 12;
g += 12;
}
else {
g -= 12;
b += 12;
}
}
point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
point_cloud_ptr->height = 1;
pcl::visualization::CloudViewer viewer ("pcltest测试");
viewer.showCloud(point_cloud_ptr);
while (!viewer.wasStopped()){ };
return 0;
}
结果应该是显示出下面的图形。如果没有bug,显示的却不是这个,滑动一下滚轮并且点击左键拖动一下。
参考文章
[1] PCL1.12+VTK7.1.1 && Ubuntu20.04.3+VSCode https://zhuanlan.zhihu.com/p/461910839