🛠️ 准备编译环境

官方仓库列出的 Ubuntu 支持范围为 16.04、18.04、20.04 和 22.04,编译器需要支持 C++14。示例采用:

打开终端,安装基础工具和 PCAP 依赖:

sudo apt update
sudo apt install -y build-essential cmake git libpcap-dev

libpcap-dev 用于编译 PCAP 回放示例。只编译在线雷达功能时,也可以在 CMake 中开启 DISABLE_PCAP_PARSE,后文会给出对应命令。Eigen、PCL 和 Boost 在基础在线 Demo 中不是必需项:Eigen 用于驱动内部坐标变换,PCL 与 Boost 主要用于官方点云显示工具。

💡 Windows 用户: 如果需要在 Windows 系统中编译 rs_driver,可参考 RoboSense 官方文档:《如何在 Windows 上编译 rs_driver》。文档介绍了 Windows 环境下的依赖配置与编译流程。

📦 下载并查看官方示例

cd ~/ws
git clone https://github.com/RoboSense-LiDAR/rs_driver.git
cd ~/ws/rs_driver

在线雷达示例位于:

~/ws/rs_driver/demo/demo_online.cpp

打开源文件:

nano ~/ws/rs_driver/demo/demo_online.cpp

🌐 设置 雷达 与 主机 网络

以 RoboSense Airy 为例,将 Ubuntu 有线网卡设置为静态 IP 192.168.1.102,子网掩码设为 255.255.255.0,网关可以留空。然后打开 demo/demo_online.cpp,将雷达型号和接收端口改为:

param.input_type = InputType::ONLINE_LIDAR;
param.input_param.msop_port = 6699;
param.input_param.difop_port = 7788;
param.input_param.imu_port = 6688;
param.lidar_type = LidarType::RSAIRY;

完成后重新编译并运行 demo_online。如果雷达的 IP 或数据目的地址曾被修改,应以 RSView 中的实际网络配置为准。RoboSense 官方在线雷达配置说明

🧱 编译在线雷达 Demo

已安装 libpcap-dev 时,可以按官方方式打开 Demo 编译开关:

cd /ws/rs_driver
mkdir build && cd build
# 编译并构建 demo_online 和 demo_pcap 示例,若不需要构建示例可去掉 -DCOMPILE_DEMOS=ON
cmake -DCOMPILE_DEMOS=ON ..     
make -j4

正常时会在 build/demo/ 下生成:

demo_online
demo_online_multi_lidars
demo_pcap

🚀 运行程序并判断是否成功

使用默认构建目录时运行:

cd ~/ws/rs_driver
./build/demo/demo_online

启动后先出现驱动版本、输入类型、雷达类型、端口和接收缓冲区信息。当前官方主分支的驱动核心版本在核对时为 v1.5.20;仓库更新后版本号可能变化,以本机输出为准。

收到并完成分帧后,日志会持续出现:

RoboSense Lidar-Driver Linux online demo start......
msg: 0 point cloud size: 96
msg: 1 point cloud size: 86400
msg: 2 point cloud size: 86400
16809b6e7b5564b9edd5b4b303fc62f3.png

🧯 根据错误码定位问题

📭 ERRCODE_MSOPTIMEOUT

驱动超过约 1 秒没有收到 MSOP。先用 tcpdump 检查数据是否到达电脑,再核对 msop_port、单播目标 IP、组播网卡、防火墙和端口占用。抓不到包时,修改 C++ 回调不会解决网络输入问题。

📐 ERRCODE_NODIFOPRECV

机械式雷达已经收到 MSOP,但缺少 DIFOP 中的角度信息。检查 difop_port 和抓包结果。wait_for_difop=false 可以帮助判断是否停在这一层,但缺少标定角度时点云可能变平或不准确。

🧩 ERRCODE_WRONGMSOPLEN / ERRCODE_WRONGMSOPID

驱动收到了与当前解码器不匹配的数据。优先核对 LidarType;型号正确后,再检查 VLAN、自定义数据层、端口是否混入另一台雷达的数据,以及固件与驱动版本。

🧱 ERRCODE_PKTBUFOVERFLOW

接收线程和处理线程之间的包队列溢出。回调中的耗时任务应移到独立处理线程,同时检查 CPU 负载、网络丢包和 Socket 接收缓冲区。官方 CMake 默认开启 ENABLE_MODIFY_RECVBUF,但它不能补偿持续阻塞的处理逻辑。

🔢 ERRCODE_ZEROPOINTS

驱动完成分帧时得到空点云。核对距离过滤、型号、DIFOP、回波配置和数据包完整性。单独出现一次与持续出现的意义不同;持续空帧更值得继续检查配置。

🧩 把 rs_driver 接入自己的 CMake 项目

📥 将 rs_driver 作为第三方库来使用

在您的 CMakeLists.txt 中,找到 rs_driver 包并链接到它。

应用项目的 CMakeLists.txt 可以写成:

find_package(rs_driver REQUIRED)
include_directories(${rs_driver_INCLUDE_DIRS})
target_link_libraries(your_project ${rs_driver_LIBRARIES})

🧷 将 rs_driver 作为子模块使用

将 rs_driver 作为子模块添加到你的项目中。

在您的 CMakeLists.txt 中,找到 rs_driver 包并链接到它。

add_subdirectory(${PROJECT_SOURCE_DIR}/rs_driver)
find_package(rs_driver REQUIRED)
include_directories(${rs_driver_INCLUDE_DIRS})
target_link_libraries(your_project ${rs_driver_LIBRARIES})

👁️ 需要点云窗口时再加入官方 Viewer

demo_online 只打印日志,不显示点云。官方 rs_driver_viewer 基于 PCL;需要它时再安装较大的可视化依赖:

cd ~/ws/rs_driver
mkdir build && cd build
# 要编译rs_driver_viewer,需要使能编译选项COMPILE_TOOLS=ON。
cmake -DCOMPILE_TOOLS=ON ..     
make -j4

以 Airy 和示例端口启动:

cd ~/ws/rs_driver

./build-viewer/tool/rs_driver_viewer 
  -type RSAIRY 
  -msop 6699 
  -difop 7788
76c3243352c8df67af1f140587d2d323.png

型号、端口和网络应与前面验证通过的 demo_online 保持一致。Viewer 弹出窗口并持续刷新点云,说明可视化链路也已经跑通。官方 Viewer 使用说明

🖥️ Ubuntu 22.04 下 Viewer 因 PCL 1.12 崩溃

RoboSense 官方 Viewer 文档指出,Ubuntu 22.04 中 PCL 1.12 与 VTK 9.0 的组合可能运行失败,并记录了 PCL 1.14 与 VTK 9.0 的可用组合。下面把 PCL 1.14.1 单独安装到 /opt/pcl-1.14,保留系统 PCL 1.12,只让新的 Viewer 构建使用 1.14。

PCL 社区也记录了 Ubuntu 22.04、PCL 1.12.1 与 VTK 9.1 环境中窗口出现后立即段错误的复现信息。该 Issue 证明了相同类型的运行现象,但本教程采用的版本切换方案以 RoboSense Viewer 文档为依据。PCL Issue #5237

这一节适用于 Viewer 已编译成功,但启动时出现 VTK 警告、段错误或窗口崩溃的情况。demo_online 本身正常时,无需为了终端日志功能编译 PCL。

🛠️ 准备 PCL 源码编译依赖

sudo apt update  
sudo apt install -y 
   git 
   cmake    
   ninja-build    
   build-essential    
   libboost-all-dev    
   libeigen3-dev    
   libflann-dev    
   libvtk9-dev

Ubuntu 的 libpcl-dev 会保留系统 PCL 1.12,同时补齐 Boost、Eigen、FLANN、VTK 等构建依赖。新的 PCL 1.14.1 会安装到独立目录,不覆盖 /usr 下的系统版本。PCL 官方文档将 Boost、Eigen 和 FLANN 列为基础依赖,将 VTK 列为 pcl_visualization 的依赖。PCL 官方源码编译说明

📦 下载并配置 PCL 1.14.1

cd ~/ws

git clone --depth 1 
  --branch pcl-1.14.1 
  https://github.com/PointCloudLibrary/pcl.git 
  pcl-1.14.1

生成构建配置并编译:

# 生成编译配置
cmake 
  -S ~/ws/pcl-1.14.1 
  -B ~/ws/pcl-1.14.1/build-rs-viewer 
  -G Ninja 
  -DCMAKE_BUILD_TYPE=Release 
  -DCMAKE_INSTALL_PREFIX=/opt/pcl-1.14 
  -DBUILD_visualization=ON 
  -DBUILD_apps=OFF 
  -DBUILD_examples=OFF 
  -DBUILD_tools=OFF 
  -DBUILD_global_tests=OFF

# 确认可视化模块已启用
grep '^BUILD_visualization:BOOL=' ~/ws/pcl-1.14.1/build-rs-viewer/CMakeCache.txt

# 开始编译(双线程)
cmake --build ~/ws/pcl-1.14.1/build-rs-viewer -j2

# 如果内存不足被 Killed,改用单线程
cmake --build ~/ws/pcl-1.14.1/build-rs-viewer -j1

# 编译完成后安装
sudo cmake --install ~/ws/pcl-1.14.1/build-rs-viewer

确认安装结果:

find /opt/pcl-1.14 
  ( -name PCLConfig.cmake 
  -o -name 'libpcl_visualization.so*' )

正常至少能找到 PCLConfig.cmake 和带 .so.1.14 版本号的可视化库。

🧭 指定 PCL 1.14 重新编译 Viewer

# 自动找到 PCL 1.14 的 CMake 配置目录
PCL_DIR_114="$(dirname "$(find /opt/pcl-1.14 -name PCLConfig.cmake -print -quit)")"
echo "$PCL_DIR_114"

# 重新编译 rs_driver_viewer
cd ~/ws/rs_driver

cmake 
  -S . 
  -B build-pcl114 
  -DCOMPILE_TOOLS=ON 
  -DCMAKE_BUILD_TYPE=Release 
  -DPCL_DIR="$PCL_DIR_114"

cmake --build build-pcl114 -j2

编译完成后就可以运行官方viewer显示点云了。

cd ~/ws/rs_driver
./build-pcl114/tool/rs_driver_viewer -type RSAIRY -msop 6699 -difop 7788

🧰 rs_driver 编译失败

日志出现以下问题,可能源码的 input.hpp 漏掉了 <memory>。

note: 'std::shared_ptr' is defined in header '<memory>'; did you forget to '#include <memory>'?

修改头文件。

cd ~/ws/rs_driver

nano src/rs_driver/driver/input/input.hpp

找到:

#include <functional>
#include <thread>
#include <cstring>

在下面增加一行:

#include <memory>

修改后应为:

14572b7f17a5429a6ec34f725cf90807.png

保存修改后重新编译即可。

🔗 官方资料

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注