1. 初识M2DGR:一个为多传感器SLAM量身打造的数据集
如果你正在研究机器人定位与建图(SLAM),尤其是想把视觉、激光雷达(LiDAR)、惯性测量单元(IMU)这些传感器融合起来,那你一定为找数据头疼过。要么是数据不全,要么是传感器没标定好,要么就是场景太单一。今天我要跟你分享的,就是这个领域的“宝藏”数据集——M2DGR。我自己在调试各种SLAM算法时,没少被数据问题折腾,直到用上它,很多测试才变得顺畅起来。
M2DGR的全称是“Multi-modal, Multi-sensor Dataset for Ground Robots”,翻译过来就是“面向地面机器人的多模态多传感器数据集”。这个名字听起来就很有料,实际也确实如此。它是由一个装备精良的地面机器人采集的,这个机器人身上挂了足足十几种传感器,简直像个移动的传感器超市。这里面包括了六个鱼眼相机和一个朝天的RGB相机、一个红外相机、一个事件相机、一个视觉惯性传感器(就是带IMU的深度相机)、两个不同频率的IMU、一个32线的激光雷达(Velodyne VLP-32C)、一个消费级的GNSS接收器,甚至还有一个带实时动态(RTK)信号的GNSS-IMU组合导航系统。最让人安心的是,所有这些设备都经过了精密的标定和时间同步,数据是同时记录的,这意味着你拿到的是一套“对齐”好的多源数据流,省去了自己搞同步和标定的大麻烦。
这个数据集包含了36个序列,数据量大概有1TB,覆盖了室内、室外、街道、校园等多种复杂场景。这对于测试SLAM算法在不同环境下的鲁棒性来说,简直是黄金标准。我最初就是看中了它传感器的全面性和场景的多样性,才决定用它来系统性地测试和对比主流的SLAM框架。无论是想跑纯视觉的ORB-SLAM,还是视觉惯性的VINS-Mono,或者是激光惯性的LIO-SAM、FAST-LIO,你都能在M2DGR里找到对应的数据话题。接下来,我就把自己从环境搭建、参数配置到实际运行踩过的坑和总结的经验,从头到尾给你捋一遍,目标是让你也能快速上手,用这个数据集验证或适配你自己的算法。
2. 环境准备与数据预处理
工欲善其事,必先利其器。在开始折腾各个SLAM框架之前,咱们得先把基础环境搭好,并且搞清楚数据包里到底有什么。我所有的实验都是基于Ubuntu 20.04和ROS Noetic进行的,这也是目前很多SLAM项目的主流支持平台。
首先,你得确保ROS安装好了。如果还没装,网上教程一大堆,核心就是配置好软件源,然后sudo apt install ros-noetic-desktop-full。安装完成后,别忘了执行source /opt/ros/noetic/setup.bash,或者把这行命令加到你的~/.bashrc文件里,这样每次打开终端ROS环境就自动生效了。接下来,你需要为每个SLAM框架创建工作空间。我的习惯是为不同类型的框架创建不同的工作空间,避免依赖冲突。比如,我会建一个catkin_ws_orb专门放ORB-SLAM系列,再建一个catkin_ws_lio放激光惯性里程计系列。创建和编译工作空间的标准流程是这样的:
mkdir -p ~/catkin_ws_orb/src
cd ~/catkin_ws_orb
catkin_make
source devel/setup.bash
说完环境,咱们来看看数据。M2DGR数据集以ROS bag文件的形式提供。我们以street_02.bag这个序列为例。在播放bag包之前,我强烈建议你先用rqt_bag或者rosbag info命令看一眼。打开一个终端,运行:
roscore
rqt_bag street_02.bag
这个可视化工具能让你清晰地看到每个话题(Topic)的数据流和时间戳。我在这里就发现了一个关键问题:图像数据的时间戳存在跳变,而且不同传感器之间的时间同步并非完美。这对于依赖严格时间戳的视觉惯性融合算法(如VINS-Mono、ORB-SLAM3)来说,可能是个潜在的“杀手”。所以,在后续配置时,对于时间同步要求高的算法,我们需要心里有数,结果不理想可能不全是算法的锅。
另一个必须注意的点是数据格式。M2DGR中的图像话题,比如/camera/color/image_raw,发布的是压缩格式(compressed)。但绝大多数视觉SLAM算法默认订阅的是原始(raw)图像格式。如果你直接播放bag包,算法节点是收不到图像的。因此,我们需要在运行SLAM的同时,启动一个图像转码节点。这个命令会在后续每个涉及视觉的框架中反复出现:
2042




被折叠的 条评论
为什么被折叠?



