대상: 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% 이상 절약할 수 있습니다.