在 ROS Noetic 中使用带 GPU 支持的 PCL
前言
ROS Noetic 中自带的 PCL 1.10 并没有 GPU 支持。如果想要启用 GPU/CUDA 支持的话,只能自己编译。
然而与 OpenCV 类似,ROS 使用了 pcl_ros, pcl_conversions 等包作为 PCL 与 在 ROS 的接口,使用自编译版本的 PCL 需要修改这些包的设置,较为麻烦。
以下是在 ROS 中使用自编译(带 GPU 支持)版本 PCL 的完整步骤。
编译 PCL
最新版 PCL (PCL 1.14.0) 若启用 gpu 支持,需要 CUDA Toolkit v9.2+
同时,因为使用了 ccmake
,需要安装 cmake-curses-gui
:
sudo apt install cmake-curses-gui
在项目官方仓库下载 PCL,然后签出到自己需要的版本。
一般保持在 master 分支即可。若想使用特定版本,可以使用
git tag
查看版本并签出。
签出完成后,至项目目录下:
1 | mkdir build && cd build |
此时,进入 cmake 配置界面。
按 c
进入编译选项配置。
这里把选项 BUILD_CUDA
和 BUILD_GPU
打开。
多按几次 c
,会根据之前的选项生成新的选项。然后根据需要打开选项。
按 c
,直到下方出现按键 g
的提示后,按 g
。此时配置完成。
之后编译安装:
1 | make |
默认安装路径下,PCL 会被安装到 /usr/local
。
修改 pcl_conversions 和 pcl_ros
对于 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 的库路径修改至 /usr/local/lib
下。
对于 pcl_ros,也是同样操作。但 pcl_ros 可能缺少部分 pcl 库的路径,如 libpcl_registration.so
。需要手动加上。
实际路径根据安装位置确定,这里是默认安装位置。
至此,安装已全部完成。所有依赖 pcl,pcl_ros,pcl_conversion 的包应该都能正常编译。
如果发现链接器报错 undefined reference
,可能是 pcl_ros 的部分库目录没有加上,找到没有加上的路径就好。
附:禁止 pcl_conversions 和 pcl_ros 的更新
操作完成后,这两个包在更新时可能会覆盖掉上面进行的设置,可以使用 apt-mark
屏蔽对软件包的更新:
1 | sudo apt-mark hold pcl_conversions |