서비스(Service) 이해하기
저작권: 쿼드(QUAD) 드론연구소 https://www.youtube.com/@quad-robotics
Last updated
Was this helpful?
저작권: 쿼드(QUAD) 드론연구소 https://www.youtube.com/@quad-robotics
Last updated
Was this helpful?
서비스는 ROS 그래프의 노드에 대한 또 다른 통신 방법입니다. 서비스는 호출 및 응답 모델 대 게시자-구독자 주제 모델을 기반으로 합니다. 토픽은 노드가 데이터 스트림을 구독하고 지속적인 업데이트를 받을 수 있도록 허용하지만 서비스는 클라이언트가 구체적으로 호출할 때만 데이터를 제공합니다.
두개의 터미널에 각각 /turtlesim 과
/teleop_turtle
두 개의 turtlesim 노드를 시작 합니다.
새 터미널에서 ros2 service list 명령을 실행하면 시스템에서 현재 활성화된 모든 서비스 목록이 반환됩니다.
두 노드 모두 이름에 동일한 6개의 서비스(parameters)가 있음을 알 수 있습니다 . ROS2의 거의 모든 노드에는 매개변수가 구축되는 이러한 인프라 서비스가 있습니다. 다음 자습서에서 매개 변수에 대해 자세히 설명합니다. 이 자습서에서는 매개 변수 services가 논의에서 생략됩니다.
서비스에는 서비스의 요청 및 응답 데이터가 구성되는 방식을 설명하는 유형이 있습니다. 서비스 유형은 토픽 유형과 유사하게 정의되지만 서비스 유형은 요청에 대한 메시지와 응답에 대한 메시지의 두 부분으로 구성됩니다.
서비스 유형을 찾으려면 다음 명령을 사용하십시오.
터틀심의 /clear
서비스를 살펴보겠습니다. 새 터미널에서 다음 명령을 입력합니다.
다음을 반환해야 합니다.
유형 Empty
은 서비스 호출이 요청을 할 때 데이터를 보내지 않고 응답을 받을 때 데이터를 받지 않음을 의미합니다.
모든 활성 서비스의 유형을 동시에 보려면 다음 과 같이 명령 에 --show-types
약어로 표시되는 -t 옵션을 추가할 수 있습니다 .
다음을 반환합니다.
특정 유형의 모든 서비스를 찾으려면 다음 명령을 사용할 수 있습니다.
예를 들어 다음과 같이 입력된 모든 Empty 서비스를 찾을 수 있습니다.
다음을 반환합니다.
명령줄에서 서비스를 호출할 수 있지만 먼저 입력 인수의 구조를 알아야 합니다.
Empty 서비스 유형의 인터페이스를알아 보겠습니다.
다음을 반환합니다.
요청 구조(위)와 응답 구조(아래)를 "---" 를리이용하여 분리합니다 . 그러나 앞에서 배운 것처럼 Empty
형식은 데이터를 보내거나 받지 않습니다. 따라서 당연히 그 구조는 비어 있습니다.
이번엔 Empty 서비스 유형의 인터페이스를알아 보겠습니다.
ros2 interface show turtlesim/srv/Spawn
다음을 반환합니다.
---
줄 위의 정보는 /spawn
서비스를 호출하는 데 필요한 인수(x
, y
그리고 theta)
를 알려줍니다 . 생성된 거북이의 2D 위치를 결정하고 name
은선택 사항입니다.
줄 아래에 있는 정보는 이 경우 알아야 할 정보는 아니지만 서비스에요청서 받은 응답의 데이터 유형을 이해하는 데 도움이 될 수 있습니다.
이제 서비스 유형이 무엇인지, 서비스 유형을 찾는 방법 및 해당 유형의 인수 구조를 찾는 방법을 알았으므로 다음을 사용하여 서비스를 호출할 수 있습니다.
<arguments>
부분은 선택 사항입니다. 예를 들어 Empty 유형이 지정된 서비스에는 인수가 없다는 것을 알고 있습니다.
이 명령은 거북이가 그린 선의 turtlesim 창을 지웁니다.
이제 <arguments>
인수를 넣고/spawn 서비스를 호출
하여 새 거북이를 생성해 보겠습니다. 명령줄에서 서비스 호출의 입력은 YAML 구문이어야 합니다.
무슨 일이 일어나고 있는지에 대한 이 메서드 스타일 보기와 서비스 응답을 얻을 수 있습니다.
Turtlesim 창이 새로 생성된 거북이로 바로 업데이트됩니다.