Recording and playing back data — ROS 2 Documentation: Jazzy documentation
You can also record multiple topics, as well as change the name of the file ros2 bag saves to. The -o option allows you to choose a unique name for your bag file. The following string, in this case subset, is the file name. To record more than one topic at
docs.ros.org
Goal
- published된 topic or service의 data를 기록한다. 그리고 이를 아무때나 replay하는 것이 기능하다. 이번에는 이에 대한 내용을 다룰 것이다.
Background
- ROS 2에서 bag 명령어는 ROS 2 system에서 topic과 service에 대한 data를 기록하기 위한 것이다.
- 이는 topics와 services에서 전달되는 data를 수집한 뒤에 database에 저장한다.
기록된 data를 재성하여 테스트와 실험의 결과를 리플레이 가능하다. - topics과 services에 대한 record들은 작업의 내용을 공유하고 다른 사람이 이를 리플레이 할 수 있게 도와주는데 유용하다.
Managing Topic Data
- 1. 키보드 입력을 turtlesim system에서 기록하여, 나중에 저장후에 리플레이 할 예정이다.
그래서 우선 늘 그랬든 터틀심과 터틀심 조작 명령어를 입력하자.
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
- 2. 또한 data를 기록한 디록토리를 만들고 이동해보자.
mkdir bag_files
cd bag_files
- 3. ros 2 bag은 topic에 publish된 message data를 기록할수있다.
- 아래명령어로 우선 topic의 목록들을 확인해보자.
ros2 topic list

- 4. 우리는 https://jihong.tistory.com/478 에서 /turtle_teleop 노드가 /turtle1/cmd_vel 토픽에 명령을 퍼블리시하여 turtlesim에서 거북이를 움직이게 한다는 것을 배웠다.
- 처음에는 당연히 아무것도 표시되지 않는다. 왜냐면 teleop이 아무런 data를 publish하지 않고 있기 때문이다.
- teleop을 실행했던 터미널로 가서 거북이를 움직이자. 그러면 아래의 명령어를 입력한 창에서 데이터들이 퍼블리시 됨을 확인할 수 있다.
ros2 topic echo /turtle1/cmd_vel

- 5. single topic 기록하기...
- 특정한 topic에 publish된 data를 기록하려면 아래의 명령어 형식을 사용한다.
- 우리는 그래서 위에서 터틀심을 움직인 것을 기록할것이다. => 2번째 명령어 입력하자.
- 그러면 아래의 '그림1'처럼 출력될것이다.
- 그림1을 보면 ros bag이 turtle1/cmd_vel topic에 publish된 data를 기록하고 있음을 볼수있다.
- 우리는 그래서 위에서 터틀심을 움직인 것을 기록할것이다. => 2번째 명령어 입력하자.
- 특정한 topic에 publish된 data를 기록하려면 아래의 명령어 형식을 사용한다.
ros2 bag record <topic_name>
ros2 bag record /turtle1/cmd_vel

- 6. 기록을 중지해보자.
- 기록된 데이터는 아래와 같은 형식으로 저장된다. ( 그림 2 참고 )
- 이 디렉터리에는 metadata.yaml 파일과 함께 기록된 형식의 bag 파일이 포함되어 있다. ( 그림 3 참고 )
- 기록된 데이터는 아래와 같은 형식으로 저장된다. ( 그림 2 참고 )


- 7. multiple topics 기록하기
- ros2는 여러 topic을 동시에 기록하는 것이 가능하며, 저장하는 파일의 이름도 변경하는 것이 가능한다.
- 한번 아래의 명령어 형식으로 입력해보자. ( 그림 4 및 첫번째 코드 )
- -o옵션은 bag file에 고유한 이름을 지정할 수 있게 해준다. 아래의 명령어는 subset의 이름으로 저장하는 것이다.
- 또한 여러 topic을 저장하기 위해서는 공백으로 구분해서 나열해주면 된다.
- -a 옵션은 현재 시스템에서 사용 가능한 모든 topic의 data를 기록하는 것이다.
- ros2는 여러 topic을 동시에 기록하는 것이 가능하며, 저장하는 파일의 이름도 변경하는 것이 가능한다.
ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose
ros2 bag record -a

- 8. topic data 검사하기.
- 아래의 형식으로 입력하면 된다.
ros2 bag info <bag_file_name>

- 9. topic data replay
- bag파일을 리플레이 하기 전에 teleop이 실행중인 터미널에서 프로세스를 종료시키자. 그 다음에는 turtlesim창이 표시되게 준비해서 bag파일 재생 결과를 확인해보자. 아래 명령어 입력.
- 그러면 거북이는 record했던 경로를 따라서 움직일것이다. 왜냐하면 subset파일은 /turtle1/pose topic data를 기록했기에, ris2 bag play명령은 turtlesim을 실행한 시간 동안 종료되지 않을 것이다. 이는 움직이지 않아도 동일하다.
- bag파일을 리플레이 하기 전에 teleop이 실행중인 터미널에서 프로세스를 종료시키자. 그 다음에는 turtlesim창이 표시되게 준비해서 bag파일 재생 결과를 확인해보자. 아래 명령어 입력.
ros2 bag play subset
- 10. managing service data 설정
- introspection_client와 introspection_service 간의 service data를 기록하고 나중에 동일한 data를 표시 및 재생한다.
- service client와 server 간 데이터를 기록하려면 노드에서 Service Introspection을 활성화해야 합니다.
- 11. introspection_client와 introspection_service 노드를 실행하고 Service Introspection을 활성화해보자.
- 각각 순서대로 introspection_service와 introspection_client 를 활성화 하
ros2 run demo_nodes_cpp introspection_service --ros-args -p service_configure_introspection:=contents
ros2 run demo_nodes_cpp introspection_client --ros-args -p client_configure_introspection:=contents
- 12. ros 2 bag는 사용이 가능한 서비스에 대해서만 data를 기록하는 것이 가능하다. 아래의 명령어로 실행중인 서비스 목록을 볼수있다.
ros2 service list'ROS 2' 카테고리의 다른 글
| ROS 2 Tutorials : Creating a workspace (0) | 2025.01.13 |
|---|---|
| ROS 2 Tutorials : Using colcon to build packages (0) | 2025.01.13 |
| ROS 2 Tutorials : Launching nodes (0) | 2025.01.12 |
| ROS 2 Tutorials : Using rqt_console to view logs (1) | 2025.01.11 |
| ROS 2 Tutorials : Understanding actions (2) | 2025.01.05 |