rosbag 파일이 너무 커질 때: 토픽 필터링, 압축, 기간 제한 팁

대상: rosbag을 자주 기록하지만 파일 용량이 너무 커져서 관리가 어려운 ROS 개발자
환경: Ubuntu 20.04 + ROS Noetic (Melodic도 동일 명령어 사용 가능)


1. 문제/주제 요약

rosbag을 활용하면 센서 로그를 쉽게 저장할 수 있지만, 이미지나 포인트클라우드가 포함되면 파일 용량이 수 GB 단위로 커집니다.
특히 /camera/image_raw, /velodyne_points 같은 토픽은 몇 초 만에도 수백 MB를 차지할 수 있습니다.

이 글에서는 rosbag 파일 용량을 줄이기 위한 세 가지 핵심 전략
1️⃣ 토픽 필터링, 2️⃣ 압축 옵션, 3️⃣ 기간 제한 — 을 단계별로 정리합니다.


2. 원인/배경 설명

rosbag은 기본적으로 모든 메시지를 raw 형식으로 저장합니다.
즉, 카메라 이미지나 포인트 클라우드 같은 대용량 토픽이 포함되면 아래와 같은 현상이 발생합니다.

  • 단 몇 분의 기록으로 수 GB 용량 발생
  • 저장 중 CPU 점유율 상승, I/O 병목
  • HDD/SSD 공간 부족
  • 재생 시 느려짐

따라서, 필요한 데이터만 선별해서 저장하고, 압축과 기간 제한을 적절히 사용해야 합니다.


3. 해결 방법: 세 가지 핵심 전략


(1) 토픽 필터링으로 꼭 필요한 데이터만 저장하기

-a 옵션으로 모든 토픽을 저장하는 대신, 필요한 토픽만 선택하세요.

rosbag record -O filtered.bag /odom /cmd_vel /scan

: 센서 이미지(/camera/image_raw)나 /tf 등은 디버깅 목적에 따라 제외하면 용량을 크게 줄일 수 있습니다.

특정 패턴만 저장하려면:

rosbag record -O data.bag /odom /imu /camera/image_raw/compressed

→ 압축된 이미지 토픽(/compressed)만 저장해도 큰 효과가 있습니다.


(2) 압축 옵션 사용 (storage compression)

rosbag은 --lz4 또는 --bz2 압축 옵션을 지원합니다.

LZ4 압축 (기본적으로 빠르고 실시간 기록에 적합)

rosbag record --lz4 -O run_compressed.bag /scan /odom

BZ2 압축 (압축률은 높지만 CPU 부하 큼)

rosbag record --bz2 -O run_compressed.bag /scan /odom

이미 저장된 .bag 파일을 나중에 압축할 수도 있습니다.

rosbag compress --lz4 bigdata.bag

압축 해제는 다음 명령으로:

rosbag decompress bigdata.bag

💡 권장 조합

  • 실시간 기록 시: --lz4
  • 오프라인 백업용: --bz2

(3) 기간 제한 / 파일 분할

rosbag은 장시간 기록 시 자동으로 분할 저장하거나 일정 시간만 기록하는 옵션을 제공합니다.

일정 시간만 기록

rosbag record -O short_run.bag --duration=30 /scan /odom

→ 30초 후 자동으로 종료

파일 크기 기준 분할

rosbag record -O run --split --size=2048 /scan /odom

→ 2GB 단위로 자동 분할 저장 (run_1.bag, run_2.bag, …)

시간 기준 분할

rosbag record -O run --split --duration=60 /scan /odom

→ 1분마다 새로운 bag 파일로 분리

이 방식은 장시간 로깅 시 “마지막 몇 개 구간만 유지”하는 식으로 관리하기 쉽습니다.


4. 추가 팁 / 자주 하는 실수

  • /tf 저장 주의
    /tf는 메시지 빈도가 매우 높아 bag 크기를 폭발시킵니다.
    /tf_static만 저장하거나 /tf를 제외하는 게 좋습니다. rosbag record -O run.bag -x "/tf"
  • 이미지 압축 토픽 활용
    /camera/image_raw 대신 /camera/image_raw/compressed 사용
    → 약 10배 이상 용량 감소 가능
  • 압축 후 bag 파일 정보 확인 rosbag info run_compressed.bag 출력 중 compression: lz4 또는 bz2로 표시됩니다.
  • 필요한 토픽만 추출하기
    기존 bag에서 일부 토픽만 추출 가능: rosbag filter full.bag filtered.bag "topic == '/odom' or topic == '/scan'"

5. 정리

전략주요 옵션효과
토픽 필터링/scan /odom 등 필요한 것만 선택데이터양 직접 감소
압축 저장--lz4, --bz2저장공간 절약, CPU 사용량 증가 가능
기간/크기 제한--duration, --split --size자동 분할 관리, 안정적인 로깅

📌 요약

  • 모든 토픽(-a) 기록은 비추천 — 꼭 필요한 토픽만!
  • 실시간 기록에는 --lz4, 장기 보관에는 --bz2
  • --split, --duration으로 관리 자동화

이 세 가지 조합만 잘 써도, rosbag 용량을 최대 80~90% 이상 절약할 수 있습니다.

댓글 남기기