ROS에서 rosbag으로 로그 남기고 재생하며 디버깅하는 기본 루틴

대상: 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_timetrue로 설정해야 합니다. 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 옵션을 활용하면 효율적으로 테스트할 수 있습니다.
  • 실제 하드웨어 연결 없이도 동일한 데이터로 반복 테스트가 가능하므로, 센서 기반 알고리즘 디버깅의 핵심 도구입니다.

댓글 남기기