대상: ROS(특히 ROS1, Melodic/Noetic 등)를 사용하면서 센서 데이터나 토픽 흐름을 분석하고 싶은 개발자
환경: Ubuntu 20.04 + ROS Noetic (ROS Melodic도 동일한 명령어로 사용 가능)
1. 문제/주제 요약
ROS 노드 디버깅을 하다 보면, 실시간으로 센서 데이터를 받아보는 대신 로그 데이터를 저장하고 재생하면서 디버깅하는 경우가 많습니다.
이를 위해 ROS에서는 rosbag이라는 강력한 도구를 제공합니다.
이 글에서는 rosbag을 이용해 로그를 남기고, 재생하면서 디버깅하는 기본 루틴을 정리합니다.
2. 원인/배경 설명
실제 하드웨어를 연결해 테스트하는 건 번거롭고, 센서 환경이 일정하지 않기 때문에 디버깅 효율이 떨어집니다.rosbag을 이용하면 아래와 같은 장점이 있습니다.
- 센서 데이터(예:
/camera/image_raw,/scan,/odom)를 그대로 기록 - 기록된 데이터를 여러 번 재생하면서 알고리즘 디버깅 가능
- 하드웨어 없이 오프라인 재현 테스트 가능
즉, 한 번의 실제 주행 데이터를 여러 번 재활용할 수 있게 해주는 툴입니다.
3. 기본 루틴 (기록 → 재생 → 분석)
(1) 현재 토픽 확인
먼저 어떤 토픽을 저장할지 확인합니다.
rostopic list
예시:
/camera/image_raw
/scan
/odom
/cmd_vel
(2) rosbag으로 데이터 기록하기
전체 토픽을 저장할 때:
rosbag record -a -O run1.bag
-a: 모든 토픽 기록-O: 저장 파일 이름 지정 (확장자는.bag)
특정 토픽만 저장할 때:
rosbag record -O lidar_odom.bag /scan /odom
백그라운드에서 기록하고 싶을 때:
rosbag record -O run1.bag /scan /odom &
💡 Tip: 오래 실행될 경우
.bag파일이 커질 수 있으니Ctrl + C로 적절한 시점에 종료하세요.
(3) rosbag 파일 정보 확인
기록이 잘 되었는지 확인하려면:
rosbag info run1.bag
출력 예시:
path: run1.bag
duration: 120.3s
start: Nov 30 2025 10:32:15.10 (1732953135.10)
end: Nov 30 2025 10:34:15.40 (1732953255.40)
topics: /scan (sensor_msgs/LaserScan)
/odom (nav_msgs/Odometry)
(4) rosbag 재생하기
rosbag play run1.bag
이제 해당 토픽들이 마치 실시간으로 퍼블리시되는 것처럼 /scan, /odom 등의 토픽이 발행됩니다.
여러 옵션을 자주 씁니다:
- 재생 속도 조절:
rosbag play run1.bag --rate=0.5 # 절반 속도로 rosbag play run1.bag --rate=2.0 # 2배속으로 - 일부만 재생 (시작/종료 시간):
rosbag play run1.bag --start=10 --duration=30 - loop 모드 (무한 반복):
rosbag play run1.bag --loop - 토픽 필터링 (특정 토픽만 발행):
rosbag play run1.bag --topics /scan
(5) rqt_graph, rviz 등과 함께 확인하기
재생하면서 다음 도구들을 병행하면 매우 유용합니다:
rqt_graph: 노드 간 토픽 연결 구조 확인rqt_plot: 수치 데이터 시각화rviz: 센서 데이터(레이저, 이미지, 지도 등) 시각화
예:
rqt_graph
rviz
4. 추가 팁 / 자주 하는 실수
- 시간 동기 문제
→rosbag play는 기본적으로 recorded time을 사용하므로, 다른 노드에서use_sim_time을true로 설정해야 합니다.rosparam set use_sim_time true - rosbag 용량 폭발
→ 이미지, 포인트클라우드 토픽은 데이터가 매우 크므로, 꼭 필요한 토픽만 저장하세요. - rosbag split 옵션 (파일 자동 분할 저장)
rosbag record -O run --split --size=2048 /scan /odom - 오래된 rosbag 재생 시 오류
→ ROS 버전 차이로 메시지 타입이 다를 수 있습니다.
가능하면 같은 ROS 버전에서 기록·재생하세요.
5. 정리
rosbag record로 토픽 로그를 저장하고,rosbag play로 재생하면 오프라인 디버깅이 가능합니다.- 재생 시
--rate,--loop,--topics옵션을 활용하면 효율적으로 테스트할 수 있습니다. - 실제 하드웨어 연결 없이도 동일한 데이터로 반복 테스트가 가능하므로, 센서 기반 알고리즘 디버깅의 핵심 도구입니다.