前言
ROS Noetic 中自帶的 PCL 1.10 并沒有 GPU 支持。如果想要啟用 GPU/CUDA 支持的話,只能自己編譯。
然而與 OpenCV 類似,ROS 使用了 pcl_ros, pcl_conversions 等包作為 PCL 與 在 ROS 的接口,使用自編譯版本的 PCL 需要修改這些包的設(shè)置,較為麻煩。
以下是在 ROS 中使用自編譯(帶 GPU 支持)版本 PCL 的完整步驟。
編譯 PCL
最新版 PCL (PCL 1.14.0) 若啟用 gpu 支持,需要 CUDA Toolkit v9.2+
同時(shí),因?yàn)槭褂昧?ccmake,需要安裝 cmake-curses-gui:
sudo apt install cmake-curses-gui
在項(xiàng)目官方倉(cāng)庫(kù)下載 PCL,然后簽出到自己需要的版本。
一般保持在 master 分支即可。若想使用特定版本,可以使用
git tag查看版本并簽出。
簽出完成后,至項(xiàng)目目錄下:
mkdir build && cd build
ccmake ..
此時(shí),進(jìn)入 cmake 配置界面。
按 c 進(jìn)入編譯選項(xiàng)配置。

這里把選項(xiàng) BUILD_CUDA 和 BUILD_GPU 打開。
多按幾次 c,會(huì)根據(jù)之前的選項(xiàng)生成新的選項(xiàng)。然后根據(jù)需要打開選項(xiàng)。
按 c,直到下方出現(xiàn)按鍵 g 的提示后,按 g。此時(shí)配置完成。
之后編譯安裝:
make
sudo make install
默認(rèn)安裝路徑下,PCL 會(huì)被安裝到 /usr/local。
修改 pcl_conversions 和 pcl_ros
對(duì)于 pcl_conversion,需要修改的文件是 /opt/ros/noetic/share/pcl_ros/cmake/pcl_rosConfig.cmake
首先是修改頭文件的目錄。找到含有 include 目錄的行,將 /usr/include/pcl-1.10 改為 /usr/local/include/pcl-1.14
再往下到 set(libraries 開頭的行,將所有 pcl 的庫(kù)路徑修改至 /usr/local/lib 下。
對(duì)于 pcl_ros,也是同樣操作。但 pcl_ros 可能缺少部分 pcl 庫(kù)的路徑,如 libpcl_registration.so。需要手動(dòng)加上。
實(shí)際路徑根據(jù)安裝位置確定,這里是默認(rèn)安裝位置。
至此,安裝已全部完成。所有依賴 pcl,pcl_ros,pcl_conversion 的包應(yīng)該都能正常編譯。
如果發(fā)現(xiàn)鏈接器報(bào)錯(cuò) undefined reference,可能是 pcl_ros 的部分庫(kù)目錄沒有加上,找到?jīng)]有加上的路徑就好。
附:禁止 pcl_conversions 和 pcl_ros 的更新
操作完成后,這兩個(gè)包在更新時(shí)可能會(huì)覆蓋掉上面進(jìn)行的設(shè)置,可以使用 apt-mark 屏蔽對(duì)軟件包的更新:
sudo apt-mark hold pcl_conversions
sudo apt-mark hold pcl-ros