Загружаем каталог…
Загружаем каталог…
이번 실습에서는 ROS 2의 Topic 통신 방식과 rosbag을 이용한 데이터 기록 및 재생을 실습했다. TurtleSim을 활용하여 Topic을 통해 거북이의 움직임을 제어하고, 해당 Topic의 메시지를 Bag 파일로 저장한 뒤 다시 재생해 보았다. 1. ROS 2 Topic이란? ROS 2에서 Topic은 노드(Node) 사이에서 메시지를 주고받기 위한 통신 방식이다. Topic 통신에서는 다음과 같은 역할로 구분된다. Publisher: Topic에 메시지를 발행하는 노드 Subscriber: Topic을 구독하여 메시지를 전달받는 노드 Topic: Publisher와 Subscriber 사이에서 메시지가 전달되는 통신 경로 Message: Topic을 통해 실제로 전달되는 데이터 하나의 노드는 Publisher와 Subscriber 역할을 동시에 수행할 수도 있으며, 여러 개의 Topic을 사용하여 다른 노드와 통신할 수도 있다. Topic 통신 구조 Publisher Node │ │ Message ▼ Topic │ ▼ Subscriber Node TurtleSim에서는 거북이의 속도와 방향을 제어할 때 다음 Topic을 사용한다. /turtle1/cmd_vel 해당 Topic의 메시지 타입은 다음과 같다. geometry_msgs/msg/Twist Twist 메시지는 선속도와 각속도 정보를 전달하여 거북이의 이동 및 회전을 제어한다. 2. ROS 2 Topic 확인 현재 실행 중인 Topic 목록과 메시지 타입은 다음 명령어로 확인할 수 있다. ros2 topic list -t 예를 들어 TurtleSim을 실행한 상태에서는 다음과 같이 /turtle1/cmd_vel Topic을 확인할 수 있다. /turtle1/cmd_vel [geometry_msgs/msg/Twist] 또한 rqt_graph 를 이용하면 현재 실행 중인 노드와 Topic 사이의 연결 관계를 그래프로 확인할 수 있다. rqt_graph 이를 통해 어떤 노드가 Topic을 발행하고 어떤 노드가 구독하고 있는지 시각적으로 확인할 수 있다. 3. Topic 직접 발행하기 ros2 topic pub 명령어를 사용하면 특정 Topic에 직접 메시지를 발행할 수 있다. 한 번만 메시지 발행 ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}" --once 옵션을 사용했기 때문에 메시지를 한 번만 발행한다. 이때 linear.x 는 전진 속도를, angular.z 는 회전 속도를 의미한다. 따라서 TurtleSim에서는 앞으로 이동하면서 회전하는 움직임이 나타난다. 일정한 주기로 메시지 발행 ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}" --rate 1 을 사용하면 초당 1번씩 동일한 메시지를 지속적으로 발행한다. 이를 통해 Topic에 메시지를 지속적으로 발행하면서 TurtleSim의 움직임이 계속 제어되는 것을 확인했다. 4. ROS 2 Bag이란? rosbag은 ROS에서 발생하는 Topic 메시지를 기록하고 나중에 다시 재생할 수 있도록 저장하는 기능이다. 실제 로봇에서는 센서 데이터나 제어 데이터를 기록해 두었다가 나중에 동일한 데이터를 다시 재생하면서 테스트하거나 분석할 수 있다. ROS 2에서는 다음과 같은 ros2 bag 명령어를 사용한다. ros2 bag record ros2 bag info ros2 bag play 각 명령어의 역할은 다음과 같다. 명령어 기능 ros2 bag record Topic 메시지를 기록 ros2 bag info 기록된 Bag 정보 확인 ros2 bag play 기록된 메시지를 다시 재생 5. Topic 메시지 기록하기 TurtleSim의 이동 명령이 전달되는 /turtle1/cmd_vel Topic을 기록했다. ros2 bag record /turtle1/cmd_vel 이 상태에서 TurtleSim을 움직이면 /turtle1/cmd_vel 을 통해 전달되는 메시지가 Bag 파일에 저장된다. 실습에서는 약 93초 동안 데이터를 기록했으며, 총 28개의 메시지가 저장되었다. 6. 기록된 Bag 정보 확인 기록이 끝난 후 다음 명령어를 사용하여 Bag의 정보를 확인했다. ros2 bag info rosbag2_2026_10_01-10_19_24/ 확인 결과 다음과 같이 기록된 것을 확인할 수 있었다. Duration: 93.717029682s Messages: 28 Topic information: Topic: /turtle1/cmd_vel Type: geometry_msgs/msg/Twist Count: 28 이를 통해 /turtle1/cmd_vel Topic의 geometry_msgs/msg/Twist 메시지가 정상적으로 기록된 것을 확인했다. 7. Bag 데이터 재생하기 기록한 Bag 파일은 ros2 bag play 명령어를 이용하여 다시 재생할 수 있다. ros2 bag play rosbag2_2026_10_01-10_19_24/ Bag을 재생하면 저장되어 있던 /turtle1/cmd_vel 메시지가 다시 TurtleSim으로 전달된다. 실습 결과 TurtleSim에서 기록 당시 거북이가 이동했던 경로가 다시 재현되는 것을 확인했다. 실습 화면에서는 ros2 bag play 를 통해 Bag 파일을 정상적으로 재생하고 있으며, TurtleSim 화면에서 저장된 이동 명령에 따라 거북이가 움직인 경로를 확인할 수 있다. 마무리 이번 실습을 통해 ROS 2에서 노드 간 통신에 사용되는 Topic의 기본 개념과 Publisher/Subscriber 구조를 확인했다. 또한 /turtle1/cmd_vel Topic에 Twist 메시지를 직접 발행하여 TurtleSim을 제어하고, 해당 Topic의 메시지를 ROS 2 Bag으로 기록한 후 다시 재생하는 과정까지 실습했다. 정리하면 다음과 같다. Topic → 노드 간 메시지 통신 ros2 topic pub → Topic에 메시지 직접 발행 ros2 bag record → Topic 메시지 저장 ros2 bag info → 저장된 Bag 정보 확인 ros2 bag play → 저장된 메시지 재생 이번 실습을 통해 ROS 2의 Topic 통신과 데이터 기록·재생 과정을 직접 확인할 수 있었다.
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
Ubuntu ROS 실습(11). 이번 실습에서는 ROS 2의 Topic 통신 방식과 rosbag을 이용한 데이터 기록 및 재생을 실습했다. TurtleSim을 활용하여 Topic을 통해 거북이의 움직임을 제어하고, 해당 Topic의 메시지를 Bag 파일로 저장한 뒤 다시 재생해 보았다. 1. ROS 2 Topic이란? ROS 2에서 Topic은 노드(Node) 사이에서 메시지를 주고받기 위한 통신 방식이다. Topic 통신에서는 다음과 같은 역할로 구분된다. Publisher: Topic에 메시지를 발행하는 노드 Subscriber: Topic을 구독하여 메시지를 전달받는 노드 Topic: Publisher와 Subscriber 사이에서 메시지가 전달되는 통신 경로 Message: Topic을 통해…
Открыть источник