본문 바로가기
로보틱스/ROS

로스백, Rosbag 을 이용한 메시지 로깅 및 재생

by makepluscode 2021. 1. 3.
반응형

Backgroud

오픈소스 기반의 ROS (Robot Operating System)는 로봇 애플리케이션을 만들기 위한 라이브러리 및 도구 모음 입니다. 디바이스 드라이버에서 알고리즘에 이르기까지 강력한 개발자 도구를 갖춘 ROS는 로봇 프로젝트에 필요한 많은 것을 갖추고 있습니다. ROS 의 두 번째 버전 ROS2 에서는 기존 버전에서 문제를 많이 개선해서 실시간 (Realtime) 성이 보장된 로봇 애플리케이션 프레임워크를 제공합니다.

Goal

지난 포스팅에서 (ROS 에서 가장 기본이 되는) turtlesim 예제를 빌드하고 실행했습니다.

 

[ROS2 ] Turtlesim 실행하기

Backgroud 오픈소스 기반의 ROS (Robot Operating System)는 로봇 애플리케이션을 만들기 위한 라이브러리 및 도구 모음 입니다. 디바이스 드라이버에서 알고리즘에 이르기까지 강력한 개발

makepluscode.tistory.com

이번 포스팅에서는 다수의 노드에서 발생한 메시지와 데이터를 로깅하고 재생하는 방법에 대해서 설명합니다. ROS bag 은 시간 (timestamp) 를 포함한 직렬화된 메시지 파일을 만드는 개발 도구 입니다. ROS bag 도구를 이용하면 node 간의  주고 받는 topic, message 를 저장하여 재생할 수 있습니다.

Step by step

지난 포스팅을 참고하여 Turtlesim 예제를 실행 합니다. 그리고 새로운 terminal 에서 rqt_graph 를 실행 합니다.

ros2 run rqt_graph rqt_graph

rqt_graph

위에서 실행한 rqt_graph 를 이용하면 turtlesim 예제의 구조를 보다 자세히 알 수 있습니다.

  1. turtlesim 과 teleop_turtle 의 2개의 노드로 구성 됩니다.
  2. turtlesim 은 cmd_vel 을 구독하고, feedback 과 status 를 발행합니다.
  3. teleop_turtle 는 feedback 과 status 를 구독하고 cmd_vel 를 발행합니다.

발행하고 구독하는 토픽 메시지 (topic message) 를 저장하고 재생해보기 위해, 필요한 package 를 설치합니다.

sudo apt-get install ros-dashing-ros2bag*
sudo apt-get install ros-dashing-rosbag2-storage-default-plugins

설치가 완료되면 다음 명령어로 토픽 메시지를 rosbag 파일로 저장 합니다.

~/log$  ros2 bag record -a
[INFO] [rosbag2_storage]: Opened database 'rosbag2_2020_12_16-06_52_20'.
[INFO] [rosbag2_transport]: Listening for topics...
[INFO] [rosbag2_transport]: Subscribed to topic '/rosout'
[INFO] [rosbag2_transport]: Subscribed to topic '/parameter_events'
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/color_sensor'
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/pose'
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/rotate_absolute/_action/status'
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/rotate_absolute/_action/feedback'
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel'

저장된 파일의 형태는 meta 파일과 SQLite (*.db3) 형식 입니다.

~/log/rosbag2_2020_12_16-06_55_52$ ls
metadata.yaml  rosbag2_2020_12_16-06_55_52.db3

meta 파일에는 저장된 ROS 노드와 토픽 메시지의 정보가 기술되어있습니다.

$ cat metadata.yaml 
rosbag2_bagfile_information:
  version: 1
  storage_identifier: sqlite3
  relative_file_paths:
    - rosbag2_2020_12_16-06_55_52.db3
  duration:
    nanoseconds: 678665973
  starting_time:
    nanoseconds_since_epoch: 1608130552315711735
  message_count: 90
  topics_with_message_count:
    - topic_metadata:
        name: /turtle1/color_sensor
        type: turtlesim/msg/Color
        serialization_format: cdr
      message_count: 45
    - topic_metadata:
        name: /turtle1/pose
        type: turtlesim/msg/Pose
        serialization_format: cdr
      message_count: 45

저장된 db3 로 재생이 가능합니다.

os2 bag play rosbag2_2020_12_16-04_04_11/
반응형