#!/usr/bin/env bash set -euo pipefail if [ "$#" -lt 2 ]; then echo "Usage: merge_ros1.sh OUT.bag IN1.bag [IN2.bag ...]" exit 1 fi OUT_BAG="$1" shift IN_BAGS=("$@") source /opt/ros/noetic/setup.bash echo "[ROS] start roscore" roscore >/tmp/roscore.log 2>&1 & ROSCORE_PID=$! sleep 3 echo "[ROS] start record -> $OUT_BAG" rosbag record -a -x "/rosout.*" -O "$OUT_BAG" >/tmp/rosbag_record.log 2>&1 & REC_PID=$! sleep 2 for b in "${IN_BAGS[@]}"; do echo "[ROS] play $b" rosbag play "$b" >/tmp/rosbag_play.log 2>&1 done echo "[ROS] stop record" kill -INT "$REC_PID" || true wait "$REC_PID" || true echo "[ROS] stop roscore" kill -INT "$ROSCORE_PID" || true echo "[ROS] merge done -> $OUT_BAG"