**1.**第一步:安装基础编译工具和依赖
bash
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装编译工具和基础依赖
sudo apt install -y build-essential cmake-curses-gui git
# 安装 PCL 和 VTK 的底层依赖
sudo apt install -y libboost-all-dev libeigen3-dev libflann-dev \
libusb-1.0-0-dev libqhull-dev libopenni-dev \
libopenni2-dev
# 安装必要的 X11 开发包(ui)
sudo apt update
sudo apt install libx11-dev libxrandr-dev libxi-dev
# 安装QT5
sudo apt update
sudo apt install -y qt5-default qtbase5-dev qtdeclarative5-dev \
qtquickcontrols2-5-dev qml-module-qtquick2 \
libqt5quick5 libqt5quickwidgets5 \
qttools5-dev-tools qtpositioning5-dev \
qtmultimedia5-dev libqt5svg5-dev
# 安装 Qt5(注意:这里不能再用 qt5-default)
sudo apt install -y qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools \
libqt5opengl5-dev libqt5svg5-dev
# 安装其他可选依赖
sudo apt install -y libvtk7-dev # 注意:这里安装的是系统自带的VTK 7,但仅用于满足PCL编译时的某些可选依赖检查,我们最终会覆盖它
第二步:编译安装 VTK 9.5
2.下载VTK 9.5源码并编译:
bash
# 下载源码
wget https://www.vtk.org/files/release/9.5/VTK-9.5.0.tar.gz
tar -xzf VTK-9.5.0.tar.gz
cd VTK-9.5.0
# 创建编译目录
mkdir build && cd build
# 配置(启用Qt支持,这是PCL可视化必须的)
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DVTK_GROUP_ENABLE_Qt=YES \
-DVTK_MODULE_ENABLE_VTK_GUISupportQt=YES \
-DVTK_MODULE_ENABLE_VTK_GUISupportQtOpenGL=YES \
-DVTK_MODULE_ENABLE_VTK_ViewsQt=YES \
-DVTK_OPENGL_HAS_EGL=OFF \
-DVTK_USE_X=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local
解释:
cmake:配置工具,它会检查你的系统环境,并生成Makefile。
-DCMAKE_BUILD_TYPE=Release:编译为"发布"版本(优化后,运行更快)。
-DVTK_GROUP_ENABLE_Qt=YES:开启Qt支持(PCL的可视化需要VTK的Qt模块)。
-DCMAKE_INSTALL_PREFIX=/usr/local:指定安装目录为/usr/local(这是Linux下用户自行编译软件的默认位置)。
..:表示CMake配置文件(CMakeLists.txt)在上一级目录。如果出现错误提示缺少某些包 ,比如
Could NOT find Qt5,说明你的Qt没装全。请用以下命令补装sudo apt install qtbase5-dev libqt5x11extras5-dev
然后重新运行上面的 cmake 命令。
bash
# 编译(-j后面的数字是你的CPU核心数,可以加快速度)
make -j4
sudo make install
sudo ldconfig
make:根据Makefile开始编译源代码。
-j$(nproc):让make使用你CPU的所有核心并行编译,可以大大加快速度。例如你的CPU是4核,它就会用-j4。编译VTK需要较长时间 (大约20-40分钟,取决于电脑性能)。终端会不断滚动输出信息,看到100%就表示编译完成。
sudo make install
sudo:需要管理员权限才能往/usr/local里写文件。这条命令会把编译好的库、头文件等复制到
/usr/local下。
sudo ldconfig
ldconfig:更新系统的共享库缓存,让新安装的VTK库能被系统找到。
VTK 9.5 安装完成! 可以用以下命令检查是否安装成功:
ls /usr/local/lib/libvtk* # 应该能看到很多 libvtk 开头的文件
第三步:编译安装 PCL 1.15
1.下载源码
bash
cd ~
git clone https://github.com/PointCloudLibrary/pcl.git
cd pcl
git checkout pcl-1.15.0 # 切换到 1.15 版本标签
2.配置和编译:
bash
mkdir build && cd build
# 使用 ccmake 可以方便地检查和修改配置选项
ccmake ..
ccmake是 cmake 的交互式文本界面,你可以方便地开关选项。输入命令后,终端会变成蓝色背景的界面,顶部显示各种选项。
配置步骤:
按
c键(configure),开始第一次配置。可能会弹出一些信息,按回车继续。配置完成后,你会看到很多选项。我们需要调整几个关键项:
找到
CMAKE_BUILD_TYPE,默认可能是空,按回车进入编辑,输入Release,然后回车。找到
CMAKE_INSTALL_PREFIX,默认是/usr/local,保持不动。找到
WITH_VTK,默认应该是ON,如果不是,按回车把它切换为ON。找到
WITH_QT,同样切换为ON。其他选项保持默认即可。
按
c键再次配置(让新的设置生效)。如果没有错误,按
g键(generate)生成Makefile并退出。如果配置过程中出现红色错误 ,通常是缺少依赖。例如提示
Could NOT find VTK,那说明我们的VTK安装可能有问题。请先检查VTK是否正确安装(执行sudo ldconfig后再试)。如果还是找不到,可以手动指定VTK路径:在ccmake界面按t键进入高级模式,找到VTK_DIR,设置为/usr/local/lib/cmake/vtk-9.5(具体路径根据你的安装位置调整)。
3.编译和安装 :
bash
make -j$(nproc)
sudo make install
sudo ldconfig
三.如果VTK需要从新编译
要重新从头编译 VTK,你需要删除当前的 build 目录,然后重新创建并运行 CMake 配置,最后再次编译
bash
1. 回到 VTK 源码根目录并删除旧的 build 文件夹
cd ~/VTK/VTK-9.5.0
rm -rf build
2. 创建新的 build 文件夹并进入
mkdir build
cd build
重新运行 CMake 配置(使用针对 ARM/Jetson 优化的配置)
cmake -DCMAKE_BUILD_TYPE=Release \
-DVTK_GROUP_ENABLE_Qt=YES \
-DVTK_MODULE_ENABLE_VTK_GUISupportQt=YES \
-DVTK_OPENGL_HAS_EGL:BOOL=ON \
-DVTK_USE_X:BOOL=OFF \
-DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j2 # 或者 make -j$(nproc) 如果你内存充足
sudo make install
sudo ldconfig
算法加速可以用:cuPCL(可选)
bash
# 1. 克隆 NVIDIA 官方的 cuPCL 仓库
git clone https://github.com/NVIDIA-AI-IOT/cuPCL.git
cd cuPCL
# 2. 切换到适配你系统的分支 (Jetpack 5.x)
# 如果你的 Jetpack 是 5.x,应该有一个对应的分支,如果没有明确分支,main 分支通常也支持较新的版本。
# 你可以用 'git branch -a' 查看所有分支。假设我们使用 main 分支。
# git checkout jetpack5.x # 如果有明确分支,请取消注释并执行
# 3. 编译 cuFilter 模块 (其中包含了 VoxelGrid)
cd cuFilter
make
编译成功后,你会在 cuFilter 目录下得到 libcufilter.so 库文件,以及对应的头文件(如 voxel_grid.h)。
第二步:修改你的项目配置
你需要告诉你的 CMake 项目去哪里找 cuPCL 的库和头文件。
-
将 cuPCL 添加到你的项目 :简单起见,你可以将整个
cuPCL文件夹复制到你项目目录下(例如/home/nvidia/Project/MarineSearchRescue/third_party/cuPCL)。 -
修改
CMakeLists.txt:在你的主CMakeLists.txt文件中,添加以下内容,找到 cuPCL 并链接它。
bash
# 设置 cuPCL 的路径
set(CUPCL_ROOT "${CMAKE_SOURCE_DIR}/third_party/cuPCL" CACHE PATH "Path to cuPCL")
set(CUPCL_INCLUDE_DIR "${CUPCL_ROOT}/cuFilter")
set(CUPCL_LIBRARY "${CUPCL_ROOT}/cuFilter/libcufilter.so")
# 包含 cuPCL 的头文件目录
include_directories(${CUPCL_INCLUDE_DIR})
# ... 后面的 target_link_libraries 部分 ...
target_link_libraries(MarineSearchRescue
${PCL_LIBRARIES}
${OpenMP_CXX_LIBRARIES}
${CUPCL_LIBRARY} # 链接 cuPCL 库
# ... 其他库
)