type
Post
status
Published
date
Apr 8, 2026
slug
summary
rosbag简介
tags
具身智能
ROS
SLAM
category
项目开发
icon
password
环境:Docker:ubuntu22.04+ros2:humble
rosbag
1. 相关概念
- 物理底片 (
rosbag): 录制数据包本质上就是把传感器(Mid-360 雷达、IMU)在一路上的所有原始输出,带上精确的时间戳,原封不动地录进一个 SQLite3 数据库文件里。
- 时光机 (
use_sim_time): 离线建图的核心逻辑是“欺骗”建图算法,让算法以为“包里的历史时间”就是“现在的真实时间”。如果不开启这个开关,算法会因为“数据过期了几十分钟甚至几天”而疯狂丢弃所有数据。
2. 标准操作流
阶段 1:室外数据采集
- 启动雷达: (在 Docker 内)Bash
- 开始录制: 新开终端,指定保存的文件夹名(如
campus_bag)和需要监听的 Topic。Bash
- 遛狗姿势:
- 起步静止: 录制开始后,让狗原地静止 3-5 秒,给 Fast-LIO 的 IMU 留足零偏初始化的时间。
- 平滑移动: 尽量避免原地猛烈打转或突然的急加速,缓慢转弯对里程计最友好。
- 大回环: 强烈建议最后绕回起点,这能触发 SLAM Toolbox 的回环检测,消除长距离累积误差。
- 安全杀青: 走回终点后,在运行录制的终端按
Ctrl + C,等待系统安全关闭数据库,切忌直接拔电源。
阶段 2:数据质检
在回放之前,确认包没坏、数据没漏:
(主要看时长、文件大小,以及
/livox/lidar 是否有几十万上百万条消息。)阶段 3:实验室离线建图
- 修改 Launch 文件(一次性工作):
- 把真实的雷达启动节点 (
livox_driver_launch) 注释掉。 - 给需要时间同步的节点(如
slam_toolbox、pointcloud_to_laserscan)加上参数:'use_sim_time': True。
- 启动纯算法:
- 打开“透视眼”: (在本地 Ubuntu)
输入
rviz2 打开图形界面,准备接收画面。- 播放数据(关键步骤): (在 Docker 内新开终端)
必须回到工作空间根目录并
source(防止终端不认识自定义的 Livox 消息格式),然后带上时钟参数播放:- 结束保存: 等包播完,去算法终端按
Ctrl + C,完美的.pcd点云底图就会落在你指定的文件夹里。
备注:高频避坑指南
- “终端失忆”引发的血案:
如果你播包时看到满屏的
Topic '/livox/lidar' has unknown type 黄色警告,绝对是因为当前播包的终端没有执行 source install/setup.bash。- 时间撕裂 (
dropping message报错): - 播包时有没有加
-clock参数? - Launch 文件里的节点有没有全加上
'use_sim_time': True? - RViz 左下角的全局时间(Time)是在走动,还是卡在 0?
如果你在 RViz 里死活看不到画面,或者日志疯狂报错说在丢弃历史数据,请检查:
- 空间爆炸:
Mid-360 的扫描频率极高,录制 10 分钟可能就会产生好几个 GB 的
.db3 文件。在录制长距离(比如跨越两栋楼)之前,一定要用 df -h 检查一下拓展坞(或保存路径)的硬盘空间够不够,如果录到一半硬盘满了,包就废了。- 死路复盘:
如果离线建出来的图发生了“漂移”或者墙体重影,不要重录数据! 数据大概率是没问题的。你应该做的是调整 Fast-LIO 或者 SLAM Toolbox 的配置文件参数,然后重新
ros2 bag play 再跑一次,这就是离线建图最爽的地方。有关问题,欢迎您在底部评论区留言,一起交流~
- Author:Koreyoshi
- URL:https://tangly1024.com/article/342c7b13-c6a7-8062-b88c-e9d4f2d99853
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!




