当前位置: 首页 > 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.cnnetsun.cn/news/3303231.html

相关文章:

  • Anthropic CGL安全层失效实录:语义过滤如何变成API单点故障
  • 基于风险结构预测的股票组合优化工程实践
  • ROS2 MoveIt2安装实战:Ubuntu 22.04+Humble环境分层验证指南
  • VS Code 2024 + Java 21 + MySQL 8.0 环境配置:3个插件与1个加密方式修复
  • Pytest 2.0 + Selenium 4.0 实战:3小时搭建Web自动化测试框架(附GitHub源码)
  • HTTP API 与 REST API 的本质区别:从协议载体到架构契约
  • Automation Studio 4.10 变量定义实战:3种变量表模式对比与自定义结构体封装
  • 高德地图 MassMarks 与 LabelMarker 性能对比:3000点场景下的帧率与内存实测
  • 科研必备技能全解析:从编程到统计的10类实用技术指南
  • ChaosLine插件 3DMAX 2024:5分钟创建3种复杂电缆与蜘蛛网模型
  • Java构建工具终极指南:openEuler维护的Maven与Gradle深度对比
  • Listen1浏览器插件:如何一站式聚合全网音乐,告别版权烦恼?
  • 多维聚合实战:生产级pandas时间窗口与多级分组优化
  • 红日靶场 VulnStack 1 渗透路径解析:从 Web 到域控的 4 个关键攻击阶段
  • 三重积分计算实战:5种常见曲面边界识别与3类坐标系选择指南
  • 工业AI安全实战:协议语义理解与五层防御纵深
  • AI对齐通讯第200期核心议题解析
  • 苍穹外卖体会
  • Linux sendfile零拷贝机制:原理、性能测试与高并发实战
  • C++配置文件引导优化PGO实战——让编译器基于运行时数据做出更优决策
  • OpenHarmony 权限动态申请封装(API Version23 + 适配版)
  • ArkUI 筛选清空后列表还乱怎么办:中式美食关键词、分类和排序状态怎么收口
  • 学生信息管理系统结构化需求分析:从7个非功能性需求到3级数据流图
  • 【Bug已解决】openclaw git integration failed / Cannot detect repository — OpenClaw Git 集成失败解决方案
  • Spring Cloud - 黑马商城
  • 蓝桥杯国赛深度反思:如果重来一次,我会这样优化备赛计划
  • 华为S5700交换机VLAN配置实战:基于700人企业网络的5步优化方案
  • 2026湖南GEO网站定制开发公司最新推荐:实地探访聚之唯,拆解AI时代官网开发的技术内幕
  • Seedream 5.0 Pro多模态图像生成模型:从技术原理到数据可视化实战
  • Cartographer 建图到导航实战:从 .pbstream 到 ROS 地图的 2 种转换方法与 Nav2 集成