当前位置: 首页 > news >正文

Ubuntu 20.04 + ROS Noetic 下,手把手解决 Cartographer 安装的‘libabsl-dev’报错

Ubuntu 20.04 + ROS Noetic 下解决 Cartographer 依赖问题的实战指南

当你在 Ubuntu 20.04 上安装 ROS Noetic 的 Cartographer 时,遇到libabsl-dev依赖错误可能是最令人沮丧的事情之一。这个错误看似简单,实则揭示了 ROS 生态系统中一个常见的版本兼容性问题。本文将带你深入理解问题根源,并提供多种解决方案,让你不仅能解决当前问题,还能掌握 ROS 依赖管理的核心技巧。

1. 理解 libabsl-dev 依赖问题的本质

Cartographer 是一个功能强大的 SLAM(同步定位与地图构建)库,它依赖于 Google 的 Abseil 库(即libabsl-dev)。在 Ubuntu 20.04 的默认仓库中,Abseil 的版本可能与 Cartographer 所需的版本不匹配,这就是问题的核心所在。

为什么会出现这个问题?

  • Ubuntu 20.04 官方仓库中的 Abseil 版本较旧
  • ROS Noetic 的 Cartographer 需要特定版本的 Abseil API
  • 包管理系统无法自动解决这种版本冲突

提示:这不是 Cartographer 特有的问题,许多现代 C++ 项目都会遇到类似的依赖冲突。

2. 解决方案一:使用 ROS 官方推荐的安装方法

最直接的方法是按照 ROS 官方文档的推荐方式安装 Cartographer。这种方法会处理大部分依赖问题:

sudo apt-get install ros-noetic-cartographer-ros

如果遇到依赖错误,可以尝试以下步骤:

  1. 更新你的包列表:

    sudo apt-get update
  2. 安装完整的 ROS Noetic 桌面版(如果尚未安装):

    sudo apt-get install ros-noetic-desktop-full
  3. 安装开发工具:

    sudo apt-get install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
  4. 初始化 rosdep:

    sudo rosdep init rosdep update
  5. 安装 Cartographer 及其 ROS 封装:

    sudo apt-get install ros-noetic-cartographer-ros

3. 解决方案二:手动编译 Abseil 库

当官方仓库的版本不满足要求时,手动编译是最可靠的解决方案。以下是详细步骤:

3.1 安装必要的编译工具

sudo apt-get install -y \ cmake \ g++ \ git \ libboost-all-dev \ libeigen3-dev \ libgflags-dev \ libgoogle-glog-dev \ libprotobuf-dev \ protobuf-compiler

3.2 下载并编译 Abseil

git clone https://github.com/abseil/abseil-cpp.git cd abseil-cpp mkdir build cd build cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. make -j$(nproc) sudo make install

3.3 安装 Cartographer

现在你可以继续安装 Cartographer:

mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/googlecartographer/cartographer_ros.git cd .. rosdep install --from-paths src --ignore-src --rosdistro=noetic -y catkin_make_isolated --install --use-ninja source install_isolated/setup.bash

4. 解决方案三:修改 package.xml 文件

如果你正在从源代码构建 Cartographer,可以尝试修改package.xml文件来适应系统已有的 Abseil 版本:

  1. 找到 Cartographer 的package.xml文件

  2. 修改 Abseil 依赖项:

    <depend>libabsl-dev</depend>

    改为:

    <depend condition="$ROS_DISTRO == 'noetic'">libabsl-dev</depend>
  3. 保存文件后重新构建:

    catkin_make

5. 不同解决方案的对比与选择

解决方案优点缺点适用场景
官方安装简单快捷可能无法解决所有依赖问题快速尝试或简单项目
手动编译完全控制版本过程复杂,耗时需要特定版本或开发环境
修改配置快速解决特定问题可能影响其他依赖了解 ROS 包管理的高级用户

6. 验证安装是否成功

安装完成后,可以通过以下命令验证 Cartographer 是否正常工作:

roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag

如果一切正常,你应该能看到 RViz 中显示地图构建过程。

7. 常见问题与故障排除

问题1:编译时出现 "absl/types/optional.h: No such file or directory" 错误

解决方案:

sudo apt-get install libabsl-dev

问题2:运行时出现 "undefined symbol" 错误

这通常是由于版本不匹配导致的。解决方案是确保所有组件都使用相同版本的 Abseil:

sudo apt-get remove libabsl-dev sudo rm -rf /usr/local/lib/cmake/absl

然后重新按照手动编译的步骤安装 Abseil。

问题3:Cartographer 无法启动,提示缺少 ROS 包

确保你已经安装了所有必要的 ROS 依赖:

rosdep install --from-paths src --ignore-src --rosdistro=noetic -y

8. 性能优化与进阶配置

一旦解决了基本的安装问题,你可以考虑以下优化:

  • 调整 Cartographer 参数:修改lua配置文件以适应你的硬件
  • 使用更高效的构建系统:如 Ninja
  • 启用硬件加速:确保你的系统正确配置了 GPU 支持
-- 示例:调整轨迹构建参数 TRAJECTORY_BUILDER_2D = { use_imu_data = true, min_range = 0., max_range = 30., min_z = -0.8, max_z = 2., }

在解决 Cartographer 安装问题的过程中,我发现手动编译虽然耗时,但提供了最大的灵活性和控制力。特别是在开发环境中,这种方法可以避免许多潜在的版本冲突问题。对于生产环境,建议使用经过测试的 Docker 镜像或预编译包,以确保稳定性。

http://www.jsqmd.com/news/853824/

相关文章:

  • 2026研发效能工具全景评测:Gitee Insight在DevSecOps赛道的差异化分析
  • LabVIEW生产者消费者模式:队列实现多任务并发与数据流解耦
  • 别再死记硬背了!用NestJS + TypeORM实战‘用户-标签’系统,搞懂OneToMany和ManyToOne
  • 实测Orange Pi 5的RK3588S性能:CoreMark跑分17979,比你想的强多少?
  • 你的动漫图片为什么总是不够清晰?3个步骤让AI帮你还原4K级画质
  • SSM加速器优化:算子融合与内存感知设计
  • 技术路线深度对比:PPTAgent结构化生成与DeepPresenter环境驱动架构解析
  • 终极免费窗口强制调整工具:如何突破Windows尺寸限制
  • 降AIGC黑科技揭秘!AI率92%暴降至5%!实测10款降AI率网站!免费额度狂薅攻略
  • 保姆级教程:手把手教你将YOLOv8n模型导出为TensorRT/RKNN/Horizon可用的ONNX格式(附避坑点)
  • 《Keil MDK-Arm》编译报错:ARM Compiler Version 5缺失的深度排查与一站式修复指南
  • 用C语言结构体给51单片机游戏开发‘开挂’:以ST7735S驱动TFT屏贪吃蛇为例
  • 新手建站首选!阿贝云免费云服务真实使用体验
  • 小米手表表盘设计终极指南:5分钟掌握Mi-Create可视化工具
  • 从Fmask到U-Net:遥感云检测算法怎么选?一份给地信从业者的选型指南
  • i.MX9352嵌入式开发实战:硬件调试、系统移植与驱动问题排查指南
  • API契約測試 Pact 實戰指南
  • 从T-Pose到活灵活现:解决Mixamo动画导入Unity后材质丢失、骨骼错位的常见问题全攻略
  • SoC设计基石:组合逻辑与时序逻辑的协同与避坑指南
  • Spark:解决Minecraft服务器卡顿的终极性能诊断方案
  • 2026年如何选专业翻译公司?汇泉翻译破解精准效率痛点 - 资讯速览
  • 从氦氖到二氧化碳:聊聊那些“老当益壮”的工业气体激光器(选型避坑指南)
  • 门诊量提升55%:医疗建筑设计公司案例解析 - 资讯速览
  • 服务器UEFI启动项冗余排查与自动化清理实践
  • FPGA UDP通信实战:从数据回环到网络测速,用Tri Mode Ethernet MAC玩转千兆以太网
  • 好用的临沂GEO生成式引擎优化公司
  • 2026年PE瓶生产厂家:三大核心趋势解读 - 资讯速览
  • 3步快速上手DeepLearnToolbox:Matlab/Octave深度学习入门实战指南
  • 告别DLL缺失!用VS2019打包C++程序为EXE的保姆级避坑指南
  • 医疗建筑设计公司常见问题解答(2026专家版) - 资讯速览