[ROS2] Service

찹쌀이네공부방·2024년 8월 24일
post-thumbnail

(민형기님 ros2 무료강의 정리 노트)

딥러닝을 구현할 때, Client가 Server에게 이미지나 csv파일 등의 데이터 경로를 전달한다. Server, Client 개념을 이때 차근차근 알아나가기 시작했던 것 같다. ROS2에서도 Service 개념이 등장하는 것으로 보아, 데이터를 전송하고 받는 개념이지 않을까라는 생각으로 강의를 마주하였다.

개념은 비슷했다. 노드 라는 개념을 연장해서 노드 간 요청(Request), 응답(Response) 신호를 사용해서 통신하는 방법이다. 즉, Client가 어떤 정보를 제공함으로써 결과값을 요청(Request)하면, Server는 결과물을 반환(Response)하는 개념이었다.

한편, Service라는 개념은 Request, Response를 포함하는 개념이었다. (.srv) 파일로 정의되며, Request 코드와 Response 코드로 정의되어 있다.

# request
int64 a
int64 b
-------------
# response
int64 average

아래 그림에서 위 코드는 service name에 포함되어 있다고 볼 수 있고, 이 service name이 (.srv)에 적혀있음을 뜻한다.

tutlesim을 실행한 뒤, 어떤 Service를 사용할 수 있는지 알 수 있다.

ros2 service list


뭐 여러가지 많다. 위 Service list 중에서 하나를 골라 type을 알 수 있다.

ros2 service type /궁금한 service list

또, (.srv)로 구성된 service의 definition도 interface show 명령어를 통해 알 수 있다. service type과 interface show 명령어로 한번 보자.

거북이의 x좌표, y좌표, 거북이 머리가 어디로 향해 있는지 theta 각도인 듯 하다. 참고로, theta 각도는 rad이라고 한다.

이번엔 service call을 실행시켜보자.

아래 코드 의미는 "turtle1/teleport_absulte라는 service를 request할건데, turtlesim/srv/TeleportAbsorlute라는 data type을 가진 service한테 request한다는 것이고, 좌표는 각각 x, y, theta에 입력된 바와 같다." 라는 뜻이다.

ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsorlute "{x: 2, y: 2, theta: 1.57}"

나의 거북이가 움직였다.

reset service call을 이용해 다시 원점으로 되돌려놓았다. reset의 data type이 궁금하다면 아래 코드를 실행하면 되고, /reset std_srvs/srv/Empty {}라고 나올 것이다. reset은 원래의 좌표로 되돌릴 때 필요한 service call이므로 {}괄호 안에 비어있다.

ros2 service type /reset


물론 reset은 ros2 service list에서도 확인 가능!

profile
개발로그 적어두기.

0개의 댓글