rosbag2_py

jaeha_lee·2025년 3월 4일

rosbag2_py는 ROS 2에서 rosbag2 API를 Python에서 사용할 수 있도록 제공하는 패키지입니다. ROS 2의 rosbag2는 로봇 시스템의 센서 데이터, 토픽 메시지 등을 저장하고 재생하는 기능을 담당합니다.

rosbag2_py 주요 기능

  1. Bag 파일 기록 (Recording)

    • 특정 토픽의 메시지를 .db3 (SQLite 기반) 포맷으로 저장할 수 있습니다.
    • 기록할 토픽, QoS(품질 서비스), 압축 설정 등을 조정할 수 있습니다.
  2. Bag 파일 재생 (Playback)

    • 기록된 bag 파일을 재생하여 ROS 2 네트워크에서 다시 사용할 수 있습니다.
    • 재생 속도 조절 및 특정 시간 구간만 재생 가능.
  3. Bag 파일 읽기 (Reading)

    • 저장된 bag 파일에서 메시지를 하나씩 읽어 특정 토픽 데이터만 분석 가능.
  4. Bag 파일 메타데이터 조회 (Metadata Query)

    • 저장된 bag 파일의 구조, 포함된 토픽 목록, 메시지 개수 등을 확인.

rosbag2_py 주요 API

rosbag2_pyrosbag2_py.readerrosbag2_py.writer 등의 모듈을 제공합니다.

1. Bag 파일 기록 예제

from rosbag2_py import SequentialWriter
from rosbag2_py._storage import StorageOptions, ConverterOptions
from rclpy.serialization import serialize_message
from std_msgs.msg import String

# 저장할 Bag 파일 설정
storage_options = StorageOptions(uri='my_bag', storage_id='sqlite3')
converter_options = ConverterOptions(input_format='', output_format='')

writer = SequentialWriter()
writer.open(storage_options, converter_options)

# 기록할 토픽과 메시지 타입 설정
topic_name = '/example_topic'
msg_type = String
writer.create_topic({'name': topic_name, 'type': 'std_msgs/msg/String', 'serialization_format': 'cdr'})

# 메시지 작성 및 저장
msg = String()
msg.data = 'Hello, ROSBag2!'
writer.write(topic_name, serialize_message(msg), 0)  # 0은 타임스탬프

2. Bag 파일 재생 예제

from rosbag2_py import Player
from rosbag2_py._storage import StorageOptions, PlayOptions

# Bag 파일 재생 옵션 설정
storage_options = StorageOptions(uri='my_bag', storage_id='sqlite3')
play_options = PlayOptions()

player = Player()
player.play(storage_options, play_options)

3. Bag 파일 읽기 예제

from rosbag2_py import SequentialReader
from rosbag2_py._storage import StorageOptions

storage_options = StorageOptions(uri='my_bag', storage_id='sqlite3')

reader = SequentialReader()
reader.open(storage_options)

# 저장된 메시지 읽기
while reader.has_next():
    (topic, msg, t) = reader.read_next()
    print(f"Received message from {topic} at time {t}")

4. Bag 파일 메타데이터 조회

from rosbag2_py import Info
from rosbag2_py._storage import StorageOptions

storage_options = StorageOptions(uri='my_bag', storage_id='sqlite3')

info = Info()
metadata = info.read_metadata(storage_options.uri, storage_options.storage_id)

print(metadata)

rosbag2_py의 장점

  • C++ 기반의 rosbag2 API를 Python에서 활용 가능.
  • 저장된 데이터를 직접 조작하거나 분석하는 데 유용.
  • 실시간으로 데이터 저장 및 재생 가능.
  • rosbag2의 다양한 스토리지 플러그인 지원 (예: SQLite, PostgreSQL 등).

rosbag2_py는 ROS 2에서 데이터 로깅 및 분석을 Python 환경에서 쉽게 수행할 수 있도록 돕는 핵심 패키지입니다. 🚀

0개의 댓글