티스토리 친구하기

본문 바로가기

Robotics/ROS2

ROS2 topic 1 [ROS2 토픽 1]

728x90

Background

ROS 2는 복잡한 시스템을 많은 모듈식 노드로 분할합니다. Topic은 노드가 message(메시지)를 교환하는 버스 역할을 하며, ROS graph의 필수적인 요소입니다.

 


노드는 데이터를 임의의 수의 topic에 publish(게시)할 수 있습니다. 동시에 임의의 수의 topic에 대해 subscription(구독) 할 수 있습니다.

 

 

 Topic은 노드 간, 즉 시스템이 다른 부분들간에 데이터를 이동시키는 주요한 방법 중의 하나입니다.

1. Setup

새로운 터미널을 열고 아래의 명령어를 입력합니다.

 

# Open a new terminal and run:
ros2 run turtlesim turtlesim_node

# Open another terminal and run:
ros2 run turtlesim turtle_teleop_key

2. rqt_graph

rqt_graph는 ROS에서 Node와 Topic간의 관계를 시각화해주는 그래픽 도구입니다.

- 실행 중인 ROS 시스템에서 Node [직사각형]

- Node들이 발행(publish) 및 구독(subscription)하는 토픽 [원]

- 사용되는 메시지 유형

- 메시지의 흐름 방향 [화살표]

rqt_graph는 ROS 시스템의 전체 아키텍처를 이해하고 디버깅하는 데 유용합니다

 

아래의 명령어를 통해 rqt_graph를 실행합니다.

 

# 터미널에서 아래의 명령어 입력
rqt_graph

# 또 다른 방법
# 터미널에서 아래의 명령어 입력
rqt

# Plugins > Introspection > Node Graph 선택

 

 

위의 노드 및 topic과 그래프 주변의 두 가지 작업이 표시됩니다(지금은 무시). 마우스를 가운데에 있는 항목 위에 놓으면 위 이미지와 같이 색상이 강조 표시되는 것을 볼 수 있습니다.

그래프는 /turtesim 노드와 /teleop_turtle 노드가 topic 통해 서로 통신하는 방식을 보여줍니다. /teleop_turtle 노드는 데이터(터틀을 이동하기 위해 입력한 키 입력)를 /turtle1/cmd_vel topic에 publish하고 /turtlesim 노드는 해당 topic을 subscription해서 데이터를 수신합니다.

3. ros2 topic list

새로운 터미널에서 'ros2 topic list'를 입력하면 active 되어 있는 모든 topic들이 출력됩니다.

 

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

 

'ros2 topic list -t'는 블라켓에 topic 타입도 포함해서 topic 리스트를 출력합니다.

 

/parameter_events [rcl_interfaces/msg/ParameterEvent]
/rosout [rcl_interfaces/msg/Log]
/turtle1/cmd_vel [geometry_msgs/msg/Twist]
/turtle1/color_sensor [turtlesim/msg/Color]
/turtle1/pose [turtlesim/msg/Pose]

 

이러한 모든 항목이 rqt_graph의 어디에 있는지 궁금하다면 'Hide'아래의 모든 상자를 uncheck 할 수 있습니다

 

 

복잡한 것을 피하기 위해 Hide를 체크합니다.

4. ros2 topic echo

`ros2 topic echo` 명령어는 지정된 ROS 2 토픽에서 발행되는 메시지를 출력합니다. 이 명령어를 사용하면 선택한 토픽에서 발생하는 모든 메시지를 모니터링할 수 있습니다. `ros2 topic echo` 뒤에는 메시지를 받을 토픽의 이름이 옵션으로 제공되어야 합니다. 예를 들어, `ros2 topic echo /cmd_vel` 명령어는 `/cmd_vel` 토픽에서 발행되는 모든 메시지를 출력합니다. 이 명령어를 사용하여 노드가 토픽에서 수신하는 데이터를 실시간으로 확인할 수 있습니다.

 

# 예시
ros2 topic echo <topic_name>

# cmd_vel 데이터 확인
ros2 topic echo /turtle1/cmd_vel

 

cmd_vel은 로봇의 선속도 및 각속도를 나타는 topic 입니다. 처음에는 아무것도 반환하지 않습니다. 그것은 /teleop_turtle이 무언가를 출판하기를 기다리고 있기 때문입니다. 

turtle_teleop_key가 실행 중인 터미널로 돌아가서 화살표를 사용하여 거북이를 이동시킵니다. echo가 동시에 실행되는 터미널을 관찰하면 모든 동작에 대해 publish되는 위치 데이터를 볼 수 있습니다.

 

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

 

rqt_graph로 돌아가서 Debug 박스를 uncheck합니다.

 

 

/_ros2cli_26646은 방금 실행한 echo 명령에 의해 생성된 노드입니다(숫자가 다를 수 있음). 이제 publisher가 cmd_vel topic을 통해 데이터를 publish하고 있으며 2개의 subscriber(/_ros2cli_26646, /turtlesim)가 '/turtle1/cmd_vel'을 subscription하는 것을 확인할 수 있습니다. 

 

 

반응형