ros2 bag 修复

ros2 的 bag 录制之后, 在主动关停或者进程被杀死后,才会产生 yaml 文件, 如果是突然断电甚至数据包中的数据库文件也会损坏。这时候可以使用下面的脚本进行修复。

并且需要注意 低版本的ros2  比如 foxy 不支持 bag reindex 指令, 需要使用高版本的,比如 humble 版本。

#!/bin/bash

# ros2 录制的 bag 如果损坏,通过这个脚本 以损坏的 db3 文件作为参数, 可以修复。


set -e

# 检查是否提供了输入文件路径
if [ "$#" -ne 1 ]; then
    echo "Usage: $0 input_file_path"
    exit 1
fi

INPUT_FILE="$1"

# 检查输入文件是否存在
if [ ! -f "$INPUT_FILE" ]; then
    echo "Error: Input file does not exist."
    exit 1
fi

# 获取输入文件的目录和文件名
INPUT_DIR=$(dirname "$INPUT_FILE")
INPUT_BASENAME=$(basename "$INPUT_FILE")


# 创建输出文件名
OUTPUT_FILE="$INPUT_DIR/fixed_$INPUT_BASENAME"

# 处理SQL转储并替换 ROLLBACK 为 COMMIT
sqlite3 "$INPUT_FILE" .dump | sed 's/ROLLBACK/COMMIT/g' > dump.sql

# 输入文件改名备份,避免影响修复
FILE_NEW_NAME="$INPUT_DIR/${INPUT_BASENAME}.bak"
mv "$INPUT_FILE" "$FILE_NEW_NAME"
echo "backup file: $FILE_NEW_NAME"

# 将修改后的 SQL 导入新的数据库文件
sqlite3 "$OUTPUT_FILE" < dump.sql

# 删除中间文件
rm dump.sql

echo "Processed file saved as: $OUTPUT_FILE"

ros2 bag reindex  $INPUT_DIR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值