多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

rosbag2 录制回放:从第一次录制到稳定回放的实操指南

rosbag2 录制回放:从第一次录制到稳定回放的实操指南 rosbag2 录制回放从第一次录制到稳定回放的实操指南【免费下载链接】rosbag2项目地址: https://gitcode.com/gh_mirrors/ro/rosbag2rosbag2 把 ROS 2 消息录到磁盘、随时按原样回放解决调试完机器人想回溯刚才那段传感器数据的问题。按下面的命令跑一遍录包、查信息、回放十分钟能闭环。跑通第一次装好依赖录下第一个包如果机器上已有 ROS 2 环境直接装发行版自带的 rosbag2sudo apt-get install ros-$ROS_DISTRO-rosbag2apt 版本缺你需要的参数时从源码编译。克隆到工作区后在工作区根目录执行colcon buildgit clone https://gitcode.com/gh_mirrors/ro/rosbag2装好后录第一个包。-o指定输出目录-a录全部话题CtrlC 退出时会自动落盘元数据ros2 bag record -o my_first_bag -a录完先别急着回放用info确认数据真的写进去了——默认存储格式是 mcap能看到话题列表、消息数和时长就说明链路通了ros2 bag info my_first_bag核心工作流拆解rosbag2 录制回放的三种姿势全量录制用 --no-discovery 锁住话题集联调时想全量抓话题又怕录到一半新节点上线把话题列表撑乱。加--no-discovery后只录启动时已存在的话题不再自动发现新的内存占用随之稳定ros2 bag record -o full_bag -a --no-discovery验证另开终端跑ros2 topic listbag 里的话题应和启动那一刻完全一致。选项定义可对照 录制命令行参数源码。按时长分段 zstd 压缩让磁盘不爆小时级录制单文件会大到难以搬动。--max-bag-duration按秒切分file 模式的 zstd 压缩率最高ros2 bag record -o long_bag -a \ --max-bag-duration 600 \ --compression-mode file --compression-format zstd验证目录下出现多个.mcap文件ros2 bag info long_bag汇总时长仍连续。⚠️ 只写--compression-format不写 mode 会直接报错退出两个参数必须成对出现。变速回放--rate、--start-offset 控制时间轴只想从第 10 秒开始、用一半速度看 30 秒-r是回放倍率--start-offset跳过前面 10 秒--playback-duration限定播放 30 秒后自动结束ros2 bag play my_first_bag --rate 0.5 --start-offset 10 --playback-duration 30验证终端进度条按倍速推进时长到点自动停。回放时 ROS 时间与稳态时间的映射关系这张图讲得最清楚高频踩坑速查现象录大话题时被系统 OOM kill根因消息缓存是双缓冲默认--max-cache-size100MB悲观情形要两倍内存修复ros2 bag record -o bag -a --max-cache-size 10485760设 0 则每条消息直接落盘——这是 ros2 bag 内存优化的第一招现象异常退出后 play 报错、找不到元数据根因进程没走完收尾流程存储插件没写出 metadata修复ros2 bag reindex bag目录注意传目录不是文件这是 rosbag2 时间戳修复的标准动作现象报 Cannot specify compression format without a compression mode根因--compression-format单独使用是空壳必须挂在某个压缩模式上修复补上--compression-mode file --compression-format zstd现象--use-sim-time和--no-discovery一起用直接报错根因sim time 要发现/clock话题才能打时间戳而--no-discovery关掉了发现修复二选一去掉--no-discovery或放弃--use-sim-time调优与进阶回放卡顿或消息乱序把--read-ahead-queue-size从默认 1000 调大用内存换缓冲深度袋内消息本身乱序时再配--message-order sent按发布时间排序。长时录制怕占满磁盘--max-bag-duration 600 --max-bag-files 3组成环形记录滚动删除最旧文件。话题太多没必要全录-a换成--regex .*odometry.*只抓需要的。录、查、放三步串起来后卡住时优先查元数据和缓存参数这两个位置。回放的完整时间轴推导见 playback time 设计文档。【免费下载链接】rosbag2项目地址: https://gitcode.com/gh_mirrors/ro/rosbag2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表