1. 项目概述
最近在机器人定位导航项目中尝试使用Cartographer进行2D纯定位(Pure Localization)实验时,遇到了一些意料之外的坑。虽然Cartographer官方文档看起来相当完善,但在实际将ROS1环境下的示例迁移到ROS2(Humble)时,还是踩了不少雷。本文将详细记录整个实验过程,特别是那些官方文档没有明确说明的细节问题。
Cartographer作为Google开源的SLAM(同步定位与地图构建)系统,在机器人领域有着广泛应用。其纯定位模式特别适合在已有地图的情况下进行精准定位,比如仓储机器人、服务机器人等场景。不过官方示例主要基于ROS1,对于ROS2用户来说直接照搬会遇到各种兼容性问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与数据获取
2.1 基础环境配置
我的实验环境如下:
- 操作系统:Ubuntu 22.04 LTS
- 虚拟化平台:VirtualBox 7.0
- ROS版本:ROS2 Humble
首先需要安装Cartographer相关的ROS2包:
bash复制sudo apt-get install ros-humble-cartographer \
ros-humble-cartographer-ros-msgs \
ros-humble-cartographer-ros \
ros-humble-cartographer-rviz
注意:很多教程会漏装cartographer-rviz,这会导致后续无法在RVIZ2中显示子地图(submaps)。
2.2 数据集准备
官方提供了两个背包2D扫描的示例数据集:
- b2-2016-04-05-14-44-52.bag (用于建图)
- b2-2016-04-27-12-31-41.bag (用于定位)
由于这些数据是ROS1格式的bag文件,需要转换为ROS2格式。我使用rosbags工具进行转换:
bash复制pip3 install rosbags>=0.9.11
rosbags-convert --src ~/Downloads/b2-2016-04-05-14-44-52.bag \
--dst ~/Downloads/b2-ros2-2016-04-05-14-44-
