You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROS Melodic中使用sick_scan_xd录制bag文件,如何保存所有分割文件?

解决方案

问题根源

原脚本的两个核心问题导致复制操作失效:

  1. 每次循环启动前执行rm -f nav310_ws/bagFiles/*,清空了临时目录里的前一次录制文件,后续无文件可复制
  2. 没有在每次rosbag record完成后及时处理生成的bag文件

修改后的工作脚本

以下脚本会保留每次录制的bag文件,并自动复制到allBags目录,同时避免文件名冲突:

#!/bin/bash

# 确保目标存储目录存在,不存在则自动创建
mkdir -p nav310_ws/allBags

while true; do  # 循环录制,直到按下CTRL+C终止
    # 执行rosbag录制,输出到临时目录
    rosbag record -o nav310_ws/bagFiles/session --split --duration=1 --max-splits 1 /cloud
    
    # 遍历临时目录下的所有bag文件,复制到目标目录并重命名
    for bag_file in nav310_ws/bagFiles/*.bag; do
        # 确保文件存在(避免目录为空时的遍历错误)
        if [ -f "$bag_file" ]; then
            # 生成唯一时间戳,防止文件名重复覆盖
            timestamp=$(date +%Y%m%d_%H%M%S)
            # 复制并重命名文件到allBags
            cp "$bag_file" "nav310_ws/allBags/session_${timestamp}_$(basename "$bag_file")"
            # 可选:复制完成后删除临时文件,节省磁盘空间
            # rm "$bag_file"
        fi
    done
done

关键调整说明

  • 移除了开头的rm -f nav310_ws/bagFiles/*:不再清空临时目录,保留录制完成的bag文件直到复制完成
  • 新增mkdir -p nav310_ws/allBags:确保目标目录存在,避免复制时因目录缺失报错
  • 录制完成后立即执行复制逻辑:通过时间戳为复制后的文件添加唯一前缀,彻底解决文件名冲突问题
  • 可选删除临时文件:如果磁盘空间有限,可取消注释rm "$bag_file",复制后删除临时文件释放空间

更简洁的替代方案(无需临时目录)

如果不需要临时存储环节,可直接让rosbag生成唯一命名的文件到allBags目录,省去复制步骤:

#!/bin/bash

mkdir -p nav310_ws/allBags

while true; do
    # 生成唯一时间戳作为文件名前缀
    timestamp=$(date +%Y%m%d_%H%M%S)
    # 直接录制到allBags目录,文件名自带时间戳确保唯一
    rosbag record -o nav310_ws/allBags/session_${timestamp} --split --duration=1 --max-splits 1 /cloud
done

内容的提问来源于stack exchange,提问作者AEW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:22:27