ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ROS2 Topic 기초 사용법
    ROS/ROS2 2025. 1. 8. 19:50
    ROS2 version: Jazzy

    1. Topic?

    ROS2에서 Topic은 가장 기본이 되는 단방향 데이터 송수신 방법으로, Publisher가 데이터 전송, Subscriber가 데이터 수신을 하게 된다.

    기본적으로 1:1 통신을 하지만 상황에 따라 1:N, N:1, N:N 통신도 가능하다.

     

    Topic 1:1 통신
    Topic 1:N 통신

     

    Topic은 주로 센서데이터를 받아오거나 모터에 명령을 보낼때 사용한다.

     

    2. Topic 실습

    이전처럼 Turtlesim과 Teleopkey를 실행해보자.

     

    Terminal 1

    ros2 run turtlesim turtlesim_node

     

    Terminal 2

    ros2 run turtlesim turtle_teleop_key

     

    Terminal 3

    rqt_graph

     

    rqt_graph를 통해 다음의 node graph를 볼 수 있다.

    rqt_graph

    /teleop_turtle node로 부터 /turtle1/cmd_vel Topic을 Publisher 했고, /turtlesim node가 이를 Subscriber 하는 것을 볼 수 있다.

     

    2.1 list

    ros2 topic list # topic list를 출력.
    ros2 topic list -t # topic list와 메시지 타입 출력.

    topic list

    2.2 echo

    ros2 topic echo <topic_name>

    topic이 발행하는 데이터를 볼 수 있다.

     

    2.3 info

    ros2 topic info <topic_name>

    topic이 발행하는 데이터의 정보를 볼 수 있다.

    topic info

    위의 정보를 통해서 발행된 msg의 type은 geometry_msgs/msg/Twist.

    해당 Topic을 게시하는 노드가 하나, 해당 Topic을 구독하는 노드가 하나 있다는 뜻.

     

    2.4 interface show

    ros2 interface show geometry_msgs/msg/Twist

    위의 info 명령어로 얻은 msg type의 interface를 볼 수 있다.

    interface show

    2.5 pub

    ros2 topic pub <topic_name> <msg_type> '<args>'

    Topic으로 명령을 Publisher 할 수 있다.

    '<args>'는 interface show로 확인한 interface.

    # 연속적으로 pub
    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}}"
    
    # 1번 실행
    ros2 topic pub -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}}"
    
    # 하나의 메시지를 publisher 후 종료
    ros2 topic pub --once -w 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}}"

     

    마지막 메시지의 경우 옵션은 다음과 같다.

    • --once: 메시지를 한번반 publisher
    • -w 2: 구독자의 수가 2개인 경우. (현재 /turtlesim, ros2 topic echo로 Subscription의 수는 2개이다.)

    topic info로 확인한 Subscription의 수
    rqt_graph로 확인한 /turtle1/cmd_vel의 Subscription

    즉, 구독자의 수가 2개 이상인 경우 한 번만 실행하라는 뜻이다.

     

    이번에는 pose를 echo 명령어로 확인해보자.

    ros2 topic echo /turtle1/pose

    /turtle1/pose 확인

     

     

    1. /pose topic으로 메시지 게시

    ros2 topic pub /pose geometry_msgs/msg/PoseStamped '{header: "auto", pose: {position: {x: 1.0, y: 2.0, z: 3.0}}}'

    결과:

     

    2. /reference topic으로 메시지 게시

    결과:

     

    2.6 hz

    ros2 topic hz /turtle1/pose

    hz명령어로 데이터가 publish되는 속도(Hz)를 확인할 수 있다.

    결과:

    hz 확인

    평균 62hz 정도가 나오며 약 0.016초에 한번씩 토픽을 발행하고 있다.

     

    2.7 bw

    ros2 topic bw /turtle1/pose

    Topic이 사용하는 대역폭(bandwidth)을 확인할 수 있다.

    결과:

    bw 확인

    결과를 보면 평균 1.50 KB/s의 대역폭으로 /turtle1/pose 토픽이 사용되는 것을 확인할 수 있다.

     

    2.8 find

    ros2 topic find <topic_type>

    특정 메시지 타입을 어떤 topic이 이용하는지 보려면 위의 명령어를 사용하면 된다.

    ros2 topic find geometry_msgs/msg/Twist

    결과:

     

    2.9 delay

    topic은 RMW(Robot MiddleWare) 및 네트워크 장비를 거치기 때문에 지연(latency)시간이 반드시 존재한다.

    사용하는 msg에 header[6]라는 stamp msg를 사용하고 있다면 다음의 명령어를 이용하여 지연 시간을 확인할 수 있다.

    ros2 topic delay <topic_name>

    지연 시간 = |발행한 시간 - 구독한 시간|

     

     

    ref:

    https://docs.ros.org/en/jazzy/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Topics/Understanding-ROS2-Topics.html

     

    Understanding topics — ROS 2 Documentation: Jazzy documentation

    © Copyright 2025, Open Robotics.

    docs.ros.org

     

    'ROS > ROS2' 카테고리의 다른 글

    ROS2 Service 기초 사용법  (0) 2025.01.13
    ROS2 Node 기초 사용법  (0) 2025.01.07
    ROS2 유용한 명령어  (0) 2025.01.07
    ROS2 DDS (Data Distribution Service)  (0) 2025.01.06
    _ROS2_Robot Operating System2  (0) 2024.05.24
Designed by Tistory.