[ ROS2 ] ROS 기초 II (Topic, Service, Action)
이전 포스트의 내용에서는 Node와 Package에 대해 다루었다. Node와 Package이 무엇인지 궁금하다면 해당 포스트를 방문하기 바란다. 본 포스트에서는 메시지 통신 방식 Topic, Service, Action에 대해 알아보자.
1️⃣ Topic
ROS2 Topic
ROS2에서는 모듈식 노드를 많이 분할함으로써 복잡한 시스템을 만들 수 있다. 이때 Topic이 Node 사이에 데이터 Message가 오가는 길 Bus 역할을 한다.
정리하자면, Topic은 비동기식 단방향 메시지 송수신 방식으로 동작한다. 이는 msg 인터페이스 형태의 메시지를 송신하는 publisher와 메시지를 수신하는 subscriber로 이루어져 있다. 공식문서에 게시된 다음의 gif를 통해 Topic이 어떻게 동작하는지 알아보자.
Topic은 여러 Node에서 데이터를 받을 수 있고, 여러 Node에게 데이터 전송도 가능하다.
이러한 점 때문일까? ROS 프로그래밍의 70% 이상이 Topic으로 이루어져 있다고 한다. 그만큼 메시지 통신 방식 중 가장 기본적이고 가장 널리 사용된다. 또한, 비동기성이며 연속성이라는 성질을 가지고 있어 센서 값 전송 및 항시 정보를 주고받아야 하는 부분에서 주로 사용된다.
Topic을 만들 수 있는 다른 명령어들은 다음 기회에 정리하겠다.
2️⃣ Service
ROS2 Service
Service는 동기식 양방향 메시지 송수신 방식으로 동작한다. 모터 on/off, 순간적 회피 기동, 파라미터 service 등 단발적이고 빠른 통신이 요구될 때 많이 사용되는 메시지 통신 기법이다.
서비스를 요청하는 Service Client와 요청받은 서비스를 수행한 후 응답하는 Service Server로 이루어져 있다.
위의 gif를 보면 알 수 있듯이, 하나의 Service Server에는 여러 Client Node가 request할 수 있지만 Server는 동시에 여러 request를 처리하지는 못한다는 것을 기억해야 한다.
📌 Topic과 Service의 차이점
Topic과 Service는 언뜻 보면 비슷해 보이지만 다르다.
Topic은 Publish하면 여러 Node가 Subscribe 가능한 반면, Service는 request가 온 대상에만 response를 주는 1:1의 통신 기법을 가지고 있다고 할 수 있다.
또, Topic은 대부분 지속적으로 publish를 진행할 수 있지만 Service는 단발성에 가깝다는 점도 차이점으로 들 수 있다.
- 분명한 요청의 주체가 존재, 빠르게 동작 완료되는 경우 ➡️ Service
- 불특정한 Node가 subscribe의 대상이 되며, 지속적으로 데이터 송수신 일어나는 경우 ➡️ Topic
3️⃣ Action
Action의 특징
Action Client는 Action Server가 response를 보내기 전까지 계속 기다리지 않고, 다른 일을 할 수 있다. 또한 Action Client는 request 보낸 뒤에도 지속적으로 feedback을 받을 수 있다. 이때, feedback을 받다고 뭔가가 잘못 돌아가고 있다는 것을 감지한 경우엔 cancel할 수도 있다.
여러 request를 동시에 작업하는 건 본질적으로 불가하지만 프로그래밍적으로 해결이 가능하다는 특징을 가지고 있다.
Action의 예시
"Action = 내비게이션 ?"
Action은 내비게이션의 작동 원리와 상당히 유사하다.
목적지 request 받고, 경로검색을 마치면 안내가 시작된다. 운전 도중에도 도로 상황을 고려한 feedback을 계속해서 제공받는다. 목적지에 도착하면 경로 안내를 종료하고 다음 request 대기한다.
➡️ 실제로 ROS2의 자율 주행 Nav2 프로젝트에서 Action을 적극 활용하고 있다고 한다.
Next Post..
다음 포스트는 DDS와 QoS에 대해 정리할 예정이다.
💙 You need to log in to GitHub to write comments. 💙
If you can't see comments, please refresh page(F5).

