데이터 녹화 및 재생

목표: 특정 토픽에 발행된 데이터를 녹화하여 언제든 다시 재생하고 검토할 수 있습니다.

배경 지식

ros2 bag 는 시스템의 토픽에서 발행된 데이터를 녹화하는 명령 줄 도구입니다. 이 도구는 여러 토픽을 통해 전달된 데이터를 축적하고 데이터베이스에 저장합니다. 그런 다음 데이터를 재생하여 실험 및 테스트의 결과를 다시 생성할 수 있습니다. 토픽을 녹화하는 것은 작업을 공유하고 다른 사람들이 작업을 다시 만들 수 있도록 하는 훌륭한 방법입니다.

전제 조건

ros2 bag 이 정상적인 ROS 2 설정의 일부로 설치되어 있어야 합니다.

ROS 2를 설치해야 하는 경우 설치 지침 을 참조하십시오.

이 튜토리얼은 이전 튜토리얼에서 다룬 개념, 예를 들어 노드토픽 을 포함하여 설명합니다. 또한 turtlesim 패키지 를 사용합니다.

항상 새로운 터미널을 열 때마다 ROS 2를 소스로 잊지 마십시오.

작업

1 설정

나중에 저장하고 재생할 수 있도록 turtlesim 시스템에서 키보드 입력을 녹화하게 될 것이므로 먼저 /turtlesim/teleop_turtle 노드를 시작합니다.

새 터미널을 열고 다음을 실행합니다.

ros2 run turtlesim turtlesim_node

또 다른 터미널을 열고 다음을 실행합니다.

ros2 run turtlesim turtle_teleop_key

또한 저장된 녹화본을 저장할 디렉토리를 생성하겠습니다.

mkdir bag_files
cd bag_files

2 토픽 선택

ros2 bag 는 토픽에서 발행된 데이터만 녹화할 수 있습니다. 시스템의 토픽 목록을 보려면 새 터미널을 열고 다음 명령을 실행하십시오.

ros2 topic list

다음과 같이 반환됩니다.

/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

토픽 튜토리얼에서 turtlesim 이 터틀을 이동시키기 위해 /turtle1/cmd_vel 토픽에 명령을 발행한다는 것을 배웠습니다.

/turtle1/cmd_vel 에서 발행되는 데이터를 보려면 다음 명령을 실행하십시오.

ros2 topic echo /turtle1/cmd_vel

처음에는 아무것도 나타나지 않습니다. 왜냐하면 텔레옵이 데이터를 발행하지 않기 때문입니다. 녹화할 때 활성화되어 있는 터미널로 돌아가 선택하십시오. 화살표 키를 사용하여 터틀을 움직이면 ros2 topic echo 를 실행 중인 터미널에서 데이터가 발행되는 것을 볼 수 있습니다.

linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
  ---

3 ros2 bag record

3.1 단일 토픽 녹화

토픽에 발행된 데이터를 녹화하려면 다음 구문을 사용하여 명령을 실행합니다.

ros2 bag record <topic_name>

선택한 토픽에 이 명령을 실행하기 전에 녹화를 시작한 디렉토리로 이동하려면 새 터미널을 열고 이전에 만든 bag_files 디렉토리로 이동하십시오.

다음 명령을 실행하십시오.

ros2 bag record /turtle1/cmd_vel

이제 ros2 bag/turtle1/cmd_vel 토픽에서 발행되는 데이터를 녹화하고 있습니다. 텔레옵 터미널로 돌아가서 거북이를 다시 움직여보십시오. 움직임의 내용은 중요하지 않지만, 나중에 데이터를 재생할 때 패턴을 인식하기 쉽도록 눈에 띄게 움직여보세요.

../../_images/record.png

녹화를 중지하려면 Ctrl+C 를 누르십시오.

데이터는 rosbag2_year_month_day-hour_minute_second 패턴의 이름을 가진 새로운 bag 디렉토리에 축적됩니다. 이 디렉토리에는 녹음된 형식의 bag 파일과 함께 metadata.yaml 도 포함되어 있습니다.

3.2 여러 토픽 녹화

파일 이름을 변경하거나 녹화하려면 다음 명령을 실행하십시오.

ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose

-o 옵션을 사용하여 bag 파일의 고유 이름을 선택할 수 있습니다. 다음 문자열, 이 경우 subset ,는 파일 이름입니다.

여러 토픽을 동시에 녹화하려면 간단히 노드를 나열하고 공백으로 구분하면 됩니다.

다음 메시지가 표시됩니다. 두 가지 토픽이 녹화되고 있음을 확인하는 메시지입니다.

[INFO] [rosbag2_storage]: Opened database 'subset'.
[INFO] [rosbag2_transport]: Listening for topics...
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel'
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/pose'
[INFO] [rosbag2_transport]: All requested topics are subscribed. Stopping discovery...

터틀을 움직이고 끝날 때 Ctrl+C 를 누르십시오.

Note

또한 명령에 추가할 수 있는 다른 옵션이 있으며, -a 는 시스템의 모든 토픽을 녹화합니다.

4 ros2 bag info

다음 명령을 실행하여 녹화에 대한 자세한 정보를 볼 수 있습니다.

ros2 bag info <bag_file_name>

이 명령을 subset bag 파일에 실행하면 파일에 대한 정보 목록이 반환됩니다.

ros2 bag info subset
Files:             subset.db3
Bag size:          228.5 KiB
Storage id:        sqlite3
Duration:          48.47s
Start:             Oct 11 2019 06:09:09.12 (1570799349.12)
End                Oct 11 2019 06:09:57.60 (1570799397.60)
Messages:          3013
Topic information: Topic: /turtle1/cmd_vel | Type: geometry_msgs/msg/Twist | Count: 9 | Serialization Format: cdr
                Topic: /turtle1/pose | Type: turtlesim/msg/Pose | Count: 3004 | Serialization Format: cdr

5 ros2 bag play

bag 파일을 재생하기 전에 텔레옵이 실행 중인 터미널에서 Ctrl+C 를 입력하십시오. 그런 다음 turtlesim 창이 표시되는지 확인하여 bag 파일이 작동 중인지 확인하십시오.

다음 명령을 입력하십시오.

ros2 bag play subset

터미널에서 다음 메시지가 반환됩니다.

[INFO] [rosbag2_storage]: Opened database 'subset'.

터틀은 녹화할 때 입력한 경로를 따를 것입니다(100% 정확하지 않음; turtlesim은 시스템의 타이밍에 작은 변경에 민감합니다).

../../_images/playback.png

subset 파일이 /turtle1/pose 토픽을 녹음했으므로 ros2 bag play 명령은 녹음할 때 텔레옵이 움직이지 않았더라도 /turtlesim 노드가 활성화되어 있는 한 계속 실행됩니다. 이것은 /turtlesim 노드가 활성화되어 있는 한 시스템은 정기적으로 /turtle1/pose 토픽에서 데이터를 발행하기 때문입니다. ros2 bag info 예제 결과에서 /turtle1/cmd_vel 토픽의 Count 정보는 9로 표시되었고, 이것은 녹화 중 화살표 키를 누른 횟수입니다.

/turtle1/pose 는 3000회 이상 발행되었으며 이동 중에 데이터가 토픽에 3000회 발행되었습니다.

위치 데이터가 얼마나 자주 발행되는지 알아보려면 다음 명령을 실행할 수 있습니다.

ros2 topic hz /turtle1/pose

요약

ros2 bag 명령을 사용하여 ROS 2 시스템에서 토픽에 전달된 데이터를 녹화할 수 있습니다. 작업을 다른 사람과 공유하거나 자신의 실험을 검토할 때 알아두면 좋은 도구입니다.

다음 단계

“초급: CLI 도구” 튜토리얼을 완료했습니다! 다음 단계는 “초급: 클라이언트 라이브러리” 튜토리얼에 참여하여 시작하십시오. build package.

관련 콘텐츠

ros2 bag 에 대한 자세한 설명은 README ros2 bag 에서 찾을 수 있습니다. QoS 호환성 및 ros2 bag 에 대한 자세한 정보는 Qos 호환성 을 참조하십시오.