ROS2 Tutorial (Basic)
  • 교육 안내
  • ROS2 개요
  • ROS2 환경 구성
  • turtlesim, ROS2 rqt
  • 노드(Node) 이해하기
  • 토픽(Topic) 이해하기
  • 서비스(Service) 이해하기
  • 파라메터(Parameter) 이해하기
  • 액션(Action) 이해하기
  • rqt_console 을 이용해 로그 보기
  • 노드 실행하기(launch)
  • 데이터 기록 및 재생
  • ROS2 프로그래밍 시작
  • 작업공간 만들기
  • 패키지 만들기
  • 간단한 게시자와 구독자 노드 만들기
  • 간단한 서비스 및 클라이언트 작성
  • 사용자 정의 msg 및 srv 파일 생성
  • 사용자 정의 인터페이스 구현
  • 파라메터 사용하기
  • 문제 식별에 ros2doctor 사용하기
Powered by GitBook
On this page
  • 개요
  • # 실습
  • 2. Topic 선택
  • 3. ros2 bag record
  • 4. ros2 bag info
  • 5. ros2 bag play

Was this helpful?

Export as PDF

데이터 기록 및 재생

저작권: 쿼드(QUAD) 드론연구소 https://www.youtube.com/@quad-robotics

개요

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

# 실습

데이터를 저장하고 재생하기 위해 시스템에 키보드 입력을 기록할 것이므로 /turtlesim및 /teleop_turtle노드를 시작하여 시작하십시오.

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

ros2 run turtlesim turtlesim_node

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

ros2 run turtlesim turtle_teleop_key

기록된 데이터를저장할 새 디렉토리를 만들어 봅시다.

mkdir bag_files
cd bag_files

2. Topic 선택

ros2 bag에 게시된 특정 토픽 메시지의 데이터만 기록할 수 있습니다. 시스템 토픽 목록을 보려면 새 터미널을 열고 다음 명령을 실행하십시오.

ros2 topic list

다음을 반환합니다.

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

토픽 자습서에서 /turtle_teleop노드가 거북이가 turtlesim에서 움직이도록 하는 명령을 /turtle1/cmd_vel토픽에 게시한다는 것을 배웠습니다.

/turtle1/cmd_vel에게시 중인 데이터를 보려면 다음 명령을 실행합니다.

ros2 topic echo /turtle1/cmd_vel

Teleop에서 데이터를 게시하지 않기 때문에 처음에는 아무 것도 표시되지 않습니다. teleop을 실행한 터미널로 돌아가서 활성화되도록 선택합니다. 화살표 키를 사용하여 거북이를 움직이면 실행 중인 터미널에 데이터가 게시되는 것을 볼 수 있습니다 .

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

3. ros2 bag record

토픽에 게시된 데이터를 기록하려면 다음명령 구문을 사용합니다.

ros2 bag record <topic_name>

선택한 항목에서 이 명령을 실행하기 전에 새 터미널을 열고 이전에 만든 bag_files디렉터리로 이동합니다. 왜냐하면 rosbag 파일은 디렉터리에 저장되기 때문입니다.

다음 명령을 실행합니다.

ros2 bag record /turtle1/cmd_vel

터미널에 다음 메시지가 표시됩니다(날짜와 시간은 다를 수 있음).

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

이제 토픽에 게시된 데이터를 기록하고 있습니다. teleop 터미널로 돌아가 거북이를 다시 움직입니다. 움직임은 중요하지 않지만 나중에 /turtle1/cmd_vel데이터를 재생할 때 볼 수 있도록 인식 가능한 패턴을 만드십시오.

기록을 중지하려면 Ctrl+C누릅니다 .

데이터는 다음과 같은 패턴의 이름으로 백 파일에 축적됩니다.rosbag2_year_month_day-hour_minute_second

3.1 여러 토픽 기록

여러 토픽을 기록하고 저장할 파일의 이름을 변경할 수도 있습니다.

다음 명령을 실행합니다.

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

이 -o 옵션을 사용하면 백 파일의 고유한 이름을 선택할 수 있습니다. 다음 문자열(이 경우 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...

4. ros2 bag info

다음을 실행하여 기록에 대한 세부 정보를 볼 수 있습니다.

ros2 bag info <bag_file_name>

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

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

개별 메시지를 보려면 데이터베이스(이 경우 sqlite3)를 열어 검사해야 합니다. 이는 본 학습의범위를 벗어납니다.

5. ros2 bag play

bag 파일을 재생하기 전에 teleop이 실행되고 있는 터미널에 Ctrl+C 입력합니다. 그런 다음 작동 중인 bag 파일을 볼 수 있도록 turtlesim 창이 표시되는지 확인합니다.

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

ros2 bag play subset

터미널은 다음 메시지를 반환합니다.

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

거북이는 기록하는 동안 입력한 것과 동일한 경로를 따릅니다(정확히 100%는 아니지만 turtlesim은 시스템 타이밍의 작은 변화에 민감합니다).

파일이 turtle1/pose 토픽을 subset기록했기 때문에 이동하지 않더라도 turtlesim을 실행하는 동안 명령이 종료되지 않습니다.

/turtlesim 노드가 활성화되어 있는 한 일정한 간격으로 토픽에 대한 데이터를 게시하기 때문입니다. 위의 예제 결과 에서 /turtle1/pose 토픽의 정보가 9개에 불과하다는 것을 알아차렸을 것입니다. 기록하는 동안 화살표 키를 누른 횟수입니다.

3000 이상의 값이 /turtle1/pose 에있음 을 알 수 있습니다 . 기록하는 동안 해당 토픽에 대한 데이터가 3000번 게시되었습니다.

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

ros2 topic hz /turtle1/pose
Previous노드 실행하기(launch)NextROS2 프로그래밍 시작

Last updated 1 year ago

Was this helpful?