(민형기님 ros2 무료강의 정리 노트)
민형기님의 ROS2 무료 강의를 오늘도 정리해본다 :) 매일 매일이 무척 알차다.
ROS2에서 Topic은 여러 노드들 사이에 비동기적이고, 연속적으로 데이터들을 주고받을 수 있게 하는 통신 메커니즘이다. Topic을 통해 각각의 노드(Publisher)가 정보를 발행(Publish)할 수 있고, 다른 노드(Subscriber)가 그 정보를 받아볼 수 있게 한다.
노드 간의 데이터 교환이 가능하도록 해주며, 특정 로봇에 여러 시스템을 탑재했을 때 각각의 시스템에서의 데이터 처리에 굉장히 유용한 방식이라고 한다. (파이썬에서의 병렬처리가 연상되는 대목임.)
Service와 개념이 비슷하긴 하나 Service는 Request를 받았을 때만 작동되는 반면에, Topic은 Message type과 Topic 이름만 알면 모두 열람이 가능하기 때문에 확장성이 매우 뛰어나다.
turtlesim을 구성하고 있는 topic들도 살펴볼 수 있다.
ros2 topic list

아래 코드는 발행자(publisher)가 몇 명인지, 구독자(subscription)은 몇명인지, 메시지 타입에 대한 정보를 출력해낸다. 특정 Topic의 통신 구조와 상태를 이해하는데 도움을 준다. turtlesim을 구성하고 있는 topic list는 무엇인지 먼저 살펴본 후, turtle1/pose에 대해 topic info 명령어로 검색해본 것이다. (이게 무슨 도움인지 잘 와닿진 않는다.)
ros2 topic info

아래 코드를 통해 더 상세한 정보를 알 수 있다. Publisher, Subscription에 대한 topic과 type에 대해 알 수 있다. */topic name [topic type] 의 순서로 나와있다.
ros2 topic list -vm # ros2 topic list와 유사하지만 data type까지 알 수 있는 코드다.

아래 명령어로 data type도 알 수 있다.
ros2 interface show

ros2 topic info에서 subscription이 0이었는데, subscription을 통해 구독할 수 있다. turtle1의 pose에 대해 구독을 하겠다는 뜻이다. 아래 코드를 실행해보면 subcription 할 수 있고, 출력값을 살펴보면 위치가 같은데, 나의 거북이가 계속 그 자리에 있기 때문이다.
ros2 topic echo /turtle1/pose

아래 코드를 사용하면 개요? 같은 걸 알 수 있는데 /turtle1/pose topic이 나의 터미널로 표시되고 있음을 의미한다.
rqt_graph
언젠가 이 코드들이 주는 정보를 제대로 활용하는 날이 오겠지...