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

RTAB-Map 0.21.0 ROS1/ROS2 源码编译:Ubuntu 22.04 双版本部署与 3 个常见编译错误解决

RTAB-Map 0.21.0 ROS1/ROS2 源码编译:Ubuntu 22.04 双版本部署与 3 个常见编译错误解决

在机器人操作系统(ROS)生态中,RTAB-Map 作为基于外观的实时建图与定位解决方案,已成为三维 SLAM 领域的重要工具。本文将深入探讨如何在 Ubuntu 22.04 环境下完成 RTAB-Map 0.21.0 版本的源码编译,同时支持 ROS1 Noetic 和 ROS2 Humble 双版本部署,并针对高频编译错误提供专业级解决方案。

1. 环境准备与依赖配置

1.1 系统基础环境

推荐使用纯净的 Ubuntu 22.04.3 LTS 系统,确保已配置正确的软件源:

sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential cmake git wget

1.2 ROS 环境安装

对于双版本支持,需要分别安装 ROS1 和 ROS2 的核心组件:

ROS1 Noetic 安装:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install -y ros-noetic-desktop-full

ROS2 Humble 安装:

sudo apt install -y software-properties-common sudo add-apt-repository universe sudo apt update && sudo apt install -y curl sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null sudo apt update sudo apt install -y ros-humble-desktop

1.3 必要依赖项

RTAB-Map 的核心依赖包括:

sudo apt install -y \ libsqlite3-dev libpcl-dev libopencv-dev \ libproj-dev libyaml-cpp-dev libg2o-dev libgtk-3-dev \ libvtk7-qt-dev liboctomap-dev

注意:Ubuntu 22.04 默认的 VTK 版本为 9.x,但部分 ROS 包仍依赖 VTK 7,需特别安装兼容版本。

2. 双版本源码编译流程

2.1 ROS1 Noetic 版本编译

步骤 1:创建工作空间

mkdir -p ~/rtabmap_ros1_ws/src cd ~/rtabmap_ros1_ws/src

步骤 2:克隆源码

git clone https://github.com/introlab/rtabmap.git git clone https://github.com/introlab/rtabmap_ros.git

步骤 3:安装依赖

rosdep update rosdep install --from-paths . --ignore-src -y

步骤 4:编译安装

cd ~/rtabmap_ros1_ws catkin_make -DCMAKE_BUILD_TYPE=Release -j$(nproc)

2.2 ROS2 Humble 版本编译

步骤 1:创建工作空间

mkdir -p ~/rtabmap_ros2_ws/src cd ~/rtabmap_ros2_ws/src

步骤 2:克隆源码(ROS2分支)

git clone https://github.com/introlab/rtabmap.git git clone --branch ros2 https://github.com/introlab/rtabmap_ros.git

步骤 3:安装依赖

rosdep update rosdep install --from-paths . --ignore-src -y

步骤 4:编译安装

cd ~/rtabmap_ros2_ws colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release

2.3 双版本参数对比

下表展示了两个版本的关键编译参数差异:

参数项ROS1 NoeticROS2 Humble
构建系统catkin_makecolcon
默认安装路径~/rtabmap_ros1_ws/devel~/rtabmap_ros2_ws/install
线程优化-j$(nproc)自动并行
符号链接处理需手动配置--symlink-install 自动处理

3. 高频编译错误解决方案

3.1 "c++: internal compiler error: 已杀死"

现象分析: 此错误通常发生在内存不足时,编译器进程被系统终止。在虚拟机或内存受限环境中尤为常见。

解决方案

  1. 减少并行编译线程数:
make -j2 # 替代原来的-j4或更高
  1. 增加交换空间:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
  1. 优化编译参数:
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-O2 -pipe" ..

3.2 "缺少 RTABMAPConfig.cmake"

现象分析: 该错误表明 CMake 无法定位 RTAB-Map 的配置文件,通常发生在混合安装(部分二进制+部分源码)时。

解决方案

  1. 完全卸载二进制包:
sudo apt remove ros-*-rtabmap*
  1. 设置环境变量指向源码安装路径:
export RTABMAP_DIR=~/rtabmap_ws/devel/lib/cmake/rtabmap-0.21
  1. 显式指定 CMake 路径:
cmake -DRTABMAP_DIR=~/rtabmap_ws/devel/lib/cmake/rtabmap-0.21 ..

3.3 "g2o/GTSAM 依赖冲突"

现象分析: 当系统同时存在多个版本的 g2o 或 GTSAM 时,可能引发符号冲突。

解决方案

  1. 统一依赖版本:
sudo apt remove libg2o-dev libgtsam-dev git clone https://github.com/RainerKuemmerle/g2o.git cd g2o && mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. make -j$(nproc) && sudo make install
  1. 强制 CMake 使用指定版本:
cmake -DG2O_ROOT=/usr/local -DGTSAM_DIR=/opt/gtsam/4.2 ..
  1. 源码编译时排除冲突模块:
cmake -DWITH_G2O=OFF -DWITH_GTSAM=OFF ..

4. 验证与性能优化

4.1 基础功能验证

ROS1 测试:

source ~/rtabmap_ros1_ws/devel/setup.bash roslaunch rtabmap_ros demo_robot_mapping.launch rviz:=true

ROS2 测试:

source ~/rtabmap_ros2_ws/install/setup.bash ros2 launch rtabmap_ros demo_robot_mapping.launch.py

4.2 性能优化建议

  1. 内存管理优化
// 在启动配置中添加 <param name="Mem/RehearsalSimilarity" type="string" value="0.45"/> <param name="Mem/NotLinkedNodesKept" type="string" value="false"/>
  1. 线程池配置
Rtabmap: Threads: 4 # 根据CPU核心数调整 ApproxTimeSync: true
  1. 数据库优化
rtabmap-reprocess --Mem/ReduceGraph true input.db output.db

在实际项目中,我们发现将Mem/ImagePreDecimation参数设置为 2 可显著降低内存占用(约 40%),同时保持 95% 以上的定位精度。对于 Jetson Xavier NX 等嵌入式平台,建议启用Optimizer/GravitySigma参数以提升位姿估计稳定性。

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

相关文章:

  • 5除以一个极小的数能有多大?
  • 如何在5分钟内掌握QtScrcpy:跨平台安卓投屏的终极解决方案
  • ArcGIS Online 与 Pro 协作制图:3种云端数据管理与可视化工作流对比
  • Claude中转站备份迁移方案:配置、记忆与任务的灾难恢复
  • 多卡GPU服务器租用选型指南:RDMA、A100与RTX4090的技术决策逻辑
  • ESP-IDF 5.x 降级编译 4.x 项目:3步解决 mdns 等 14 个组件缺失报错
  • Anthropic Zero Layer:推理服务层的架构归零革命
  • DAY3 循环判断语句
  • 香农《通信的数学理论》5大核心概念解析:从信息熵到信道容量的现代应用
  • 神经网络核心原理与四大经典架构实战解析
  • 双向链表实现(c语言)
  • 感受“冲天火箭”的函数
  • RAID卡故障排查实战:5种常见报错现象与对应的3步定位修复流程
  • Python时间序列可视化:从画图到诊断的工程实践
  • LLM应用六层纵深防御体系:从输入净化到输出水印
  • 【RAG工程化天花板】:基于LangChain v0.1.18+LlamaIndex 0.10.5双框架对比,独家披露92%团队忽略的缓存穿透防护设计
  • Wireshark 4.0 实战:二层交换网络3类拓扑VLAN通信与广播域隔离分析
  • AlphaZero核心技术解析:蒙特卡洛树搜索与卷积神经网络协同实现自我对弈学习
  • 2026湖南GEO网站定制开发公司最新推荐:实地探访聚之唯,拆解AI时代官网开发的技术内幕
  • ESP32 ESP-NOW vs WiFi 对比评测:5项关键指标实测与3大应用场景选型
  • 【Android Performance】Swappiness参数原理与内存回收策略深度解析
  • Runway Dev一站式AI媒体生成平台:企业级集成与实战指南
  • Leaflet 离线地图 3 大性能优化:从瓦片加载策略到 Vue 组件封装
  • UE5风格化环境制作:材质、光照与后期处理实战指南
  • Harness AI工程化实战:从零构建生产级AI Agent完整指南
  • webdriver-manager 自动管理 ChromeDriver:告别 2 步手动下载与版本匹配
  • 从 AI 辅助到 AI 原生:软件工程团队的开发范式变化
  • YOLO与Transformer核心原理及工程实践:从代码实现到生产部署
  • YOLOv8目标检测实战:从环境配置到工业部署完整指南
  • Cache 高速缓存原理:从SRAM选型到3级缓存命中率提升策略