ROS2

[ROS2] Tutorial Beginner : CLI tools - Understanding topics

씨주 2024. 10. 8. 16:09

Understanding topics

Background

topic은 node간 message를 주고받는 bus 역할을 하는 graph의 필수요소이다.

 

노드는 topic으로 data를 publish함과 동시에 topic에 대한 subscription을 가진다.

publisher가 topic으로 message를 보내면 subscriber가 topic으로부터 message를 받는다.

 

Tasks

setup

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

 

rqt graph

node와 topic간의 연결과 교환을 시각화하기 위해 rqt_graph를 사용한다.

rqt_graph

2개의 action이 보이긴 하지만 지금 단계에선 무시하자.

/teleop_turtle노드는 data를 /turtle1/cmd_vel 토픽으로 publish하고, /turtlesim 노드는 토픽으로부터 data를 subscribe한다.

 

topic list

ros2 topic list

 

-t를 추가하면 topic type을 확인할 수 있다.

ros2 topic list -t

 

이를 통해 노드간 topic을 통해 이동할 때 동일 정보에 대해 이야기하고 있음을 알 수 있다.

 

topic echo

실시간으로 topic에 publish되는 data를 알고 싶다면 topic echo를 사용하면 된다.

# ros2 topic echo <topic_name>
ros2 topic echo /turtle1/cmd_vel

 

turtle_teleop_key에 방향키로 이동한다면 동시에 echo에 position data가 publish된다.

 

rqt_graph의 Debug box 체크 해제 후 확인해보면 /_ros2cll_366175가 echo로부터 생성되었고 이 publisher를 통해 cmd_vel에 publishing되는 data를 확인할 수 있다.

 

topic info

cmd_vel의 topic info를 확인해보면 message type, Publisher 수, Subscription 수를 알 수 있다.

 

interface show

topic info에서 geometry_msgs/msg/Twist는 geometry_msgs 패키지 내에 Twist라고 불리는 msg를 의미한다.

이를 자세히 확인해보자.

ros2 interface show geometry_msgs/msg/Twist

/turtlesim 노드는 2개의 vector를 가진 message(linear, angular)를 기대한다는 의미로 echo를 통해 확인한 /teleop_turtle에서 publish한 data와 동일하다.

 

topic pub

message 구조도 확인했으니 이제 직접 data를 publish해보자.

'<args>'는 topic으로 전달하는 실제데이터로, YAML형식을 따라야 한다.

# ros2 topic pub <topic_name> <msg_type> '<args>'
ros2 topic pub /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}}"

 

또한 topic pub를 하고 rqt_graph를 보면, cmd_vel에 /_ros2cli_366647이 추가된 것을 확인할 수 있다.

 

위의 topic은 계속해서 data가 publish되지만 한번만 publish되길 원한다면 --once 옵션을 더해주면 된다.

또한 -w 2를 추가하였는데, 이는 'wait for two matching subscriptions'라는 의미로 turtlesim과 topic echo 2개의 subscription이 있기에 필요하다.

ros2 topic pub --once -w 2 /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}}"

 

마지막으로 pose topic을 echo해보자.

ros2 topic echo /turtle1/pose

 

topic hz

data가 publish되는 hz를 알 수 있다.

ros2 topic hz /turtle1/pose

 

cmd_vel에 rate 1로 publish하고 hz를 확인해보면 average rate가 1로 뜨는 것을 확인할 수 있다.

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}}"

 

 

 

ROS2_Humble Documentation : https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools.html