Ego-Planner 编译卡在 realsense?手把手教你解决 librealsense2 与 Fast DDS 的版本冲突

张开发
2026/5/22 4:21:38 15 分钟阅读
Ego-Planner 编译卡在 realsense?手把手教你解决 librealsense2 与 Fast DDS 的版本冲突
Ego-Planner编译卡在realsense深度解析librealsense2与Fast DDS版本冲突解决方案当你满怀期待地准备运行Ego-Planner进行无人机路径规划仿真时却在编译阶段遭遇了令人头疼的librealsense2依赖问题。特别是当CMake报出missing: fastcdr fastrtps的错误时很多开发者都会陷入困惑——明明已经安装了最新版的RealSense SDK为什么还会出现这种问题本文将深入剖析这一经典编译错误的根源并提供两种经过验证的解决方案帮助你快速恢复项目编译。1. 问题根源ABI兼容性与CMake配置陷阱librealsense2从v2.56.4版本开始引入了一个隐蔽但影响深远的变化其CMake配置文件错误地声明了对Fast DDS原名Fast-RTPS组件的依赖而实际上这些组件并非相机驱动运行所必需。这种配置问题源于SDK内部的构建系统调整导致以下连锁反应ABI兼容性断裂新版本SDK尝试链接Fast-CDR和Fast-RTPS库但这两个库在标准Ubuntu仓库中并不提供预编译包CMake验证机制当CMake执行find_package(realsense2)时会严格检查所有声明的依赖项任一缺失都会导致配置失败版本差异陷阱v2.48.0到v2.50.0之间的版本没有这个问题但更高版本会触发此错误典型的错误输出如下CMake Warning at realsense2_camera/CMakeLists.txt:44 (find_package): Found package configuration file: /usr/lib/x86_64-linux-gnu/cmake/realsense2/realsense2Config.cmake but it set realsense2_FOUND to FALSE so package realsense2 is considered to be NOT FOUND. Reason given by package: The following imported targets are referenced, but are missing: fastcdr fastrtps2. 解决方案一降级librealsense2 SDK这是推荐大多数用户采用的方案操作相对简单且不影响其他ROS功能包。2.1 完全卸载现有SDK首先需要彻底清理系统中可能存在的多个SDK版本sudo apt remove --purge librealsense2* sudo rm -rf /usr/local/lib/cmake/realsense2 sudo rm -rf /usr/lib/x86_64-linux-gnu/cmake/realsense22.2 安装v2.48.0版本从源码编译指定版本可确保完全控制安装过程cd ~ git clone -b v2.48.0 https://github.com/IntelRealSense/librealsense cd librealsense安装构建依赖sudo apt install -y libudev-dev pkg-config libgtk-3-dev \ libusb-1.0-0-dev libglfw3-dev libssl-dev配置和编译mkdir build cd build cmake ../ -DCMAKE_BUILD_TYPERelease -DBUILD_EXAMPLEStrue make -j$(nproc) sudo make install验证版本realsense-viewer --version2.3 修改ROS包的CMake配置定位到realsense-ros包的CMakeLists.txt文件通常在~/catkin_ws/src/realsense-ros/realsense2_camera找到版本检查部分并修改为find_package(realsense2 2.48.0 EXACT REQUIRED)2.4 解决可能的符号冲突有时旧版SDK会与新安装的驱动产生符号冲突需要重建符号链接sudo ldconfig3. 解决方案二源码编译安装Fast DDS如果你必须使用新版librealsense2或者项目中其他组件依赖较新的SDK功能则需要完整安装Fast DDS工具链。3.1 安装基础依赖sudo apt update sudo apt install -y cmake git gcc g libssl-dev \ libasio-dev libtinyxml2-dev libssl-dev3.2 获取Fast DDS源码建议使用v2.3.0稳定版本git clone --recursive -b v2.3.0 https://github.com/eProsima/Fast-DDS.git cd Fast-DDS3.3 处理CMake版本要求Ubuntu 20.04默认CMake版本(3.16)可能过低需要手动升级wget https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1-linux-x86_64.tar.gz tar -xzf cmake-3.22.1-linux-x86_64.tar.gz sudo cp -r cmake-3.22.1-linux-x86_64/* /usr/local/3.4 编译安装foonathan_memory这是Fast DDS的必需依赖git clone https://github.com/foonathan/memory.git cd memory mkdir build cd build cmake .. sudo cmake --build . --target install cd ../..3.5 构建Fast DDS主项目mkdir build cd build cmake .. -DTHIRDPARTYON -DBUILD_SHARED_LIBSON \ -DCMAKE_CXX_FLAGS-Wno-errorconversion make -j$(nproc) sudo make install3.6 验证安装检查关键库文件是否就位ls /usr/local/lib | grep -E fastcdr|fastrtps4. 方案对比与选型建议评估维度降级SDK方案安装Fast DDS方案复杂度★★☆ (简单)★★★★ (复杂)耗时10-15分钟30-60分钟系统影响可能影响依赖新SDK的其他应用增加系统库复杂度长期维护性需要锁定版本兼容未来更新磁盘占用约200MB约500MB适用场景单一项目环境多项目复杂环境推荐选择策略开发测试环境优先选择方案一降级SDK生产环境或长期维护项目考虑方案二完整安装Fast DDSWSL环境下强烈建议方案一避免兼容性问题5. 进阶排查与常见问题处理即使按照上述步骤操作仍可能遇到一些意外情况。以下是几个典型问题的解决方法5.1 残留配置文件导致的冲突有时旧配置会干扰新安装sudo updatedb locate realsense2Config.cmake | xargs sudo rm -f sudo ldconfig5.2 WSL2下的USB设备识别如果使用WSL2且需要实际连接RealSense相机# Windows端以管理员身份执行 usbipd wsl list usbipd wsl attach --busid 设备ID5.3 多版本ROS的兼容问题当系统同时安装ROS Noetic和Melodic时# 明确指定ROS版本环境 source /opt/ros/distro/setup.bash catkin_make -DPYTHON_EXECUTABLE/usr/bin/python35.4 编译时的内存不足问题在资源受限环境中# 减少并行编译线程 make -j2 # 或增加交换空间 sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile6. 深度技术解析为什么会出现这种冲突这个看似简单的编译错误背后实际上反映了现代C生态系统中的几个深层问题ABI管理困境Fast DDS作为DDS实现其ABI稳定性直接影响依赖它的所有组件CMake的严格依赖检查现代CMake的find_package机制会验证所有传递依赖二进制分发与源码编译的鸿沟预编译包往往假设标准环境而源码编译可以定制但复杂度高版本锁定策略缺失大多数Linux发行版不提供多版本并行安装支持理解这些底层原理有助于开发者更好地预见和避免类似的依赖冲突问题。在实际项目中建议使用容器技术如Docker隔离不同项目的构建环境维护详细的版本依赖清单建议用rosdep等工具对关键依赖项进行本地镜像备份考虑使用vcpkg或conan等现代包管理方案

更多文章