새소식

로봇,ROS,SLAM

[ROS2] ROS2 service 알아보기

  • -

이번에 Service를 사용해보자 

 

ROS의 service란?

대기/응답 (Request/Response) 통신으로 동기식 통신 방법을 ROS에서는 서비스라고 한다. 

ROS 서비스는 노드들이 서로 통신하는 방법으로, 노드가 요청을 보내고 응답을 받는 것을 허용합니다.

대기/응답 (Request/Response) 으로 동기식 통신 방법을 말하며, 직렬적으로 지속적인 데이터 스트림에 적합한 통신을 할 때 사용됩니다. 

ros2 service는 서비스를 통해 ROS의 클라이언트/서버 프레임워크를 쉽게 연결할 수 있습니다.

 

 

 

 

 

turtlesim에 클라이언트가 call을 통해 turtle을 움직이게 해보겠다. 

 

즉 call이 request라고 생각하면 되겠다. 

 

사용할 수 있는 서비스가 무엇이 있는지 먼저 확인해보자.

 

ros2 service list

 

 

그 다음 type을 확인한다. 

 

ros2 service type /turtle1/teleport_absolute

 

 

그 다음 interface를 확인해보자.

ros2 interface show turtlesim/srv/TeleportAbsolute

 

 

 

그렇다면 이제 turtle을 움직여 보자.

 

call 사용 예시 

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

 

여기서 중요한점은 : 다음 한칸 뛰고 숫자 값을 써야한다. 

 

 

다음 서비스 리스트에서 확인한 /reset 을 사용해보자. 

 

마찬가지로 /reset의 service type을 확인해본다. 

 

ros2 service type /reset

 

 

 

그러면 이 Empty의 interface를 확인해보자. 

ros2 interface show std_srvs/srv/Empty

 

 

그러면 아래와 같은 명령어로 reset할 수 있다.

 

ros2 service call /reset std_srvs/srv/Empty {}

 

 

그럼 제자리에 오게 되어있다.

 

거북이 한마리 더 추가하기 (/spawn 사용하기)

서비스 리스트를 다시 한번 확인

 

/spawn의 type을 확인해보자. 

 

ros2 service type /spawn

 

 

다음으로 spawn의 interface를 확인해보자.

 

ros2 interface show turtlesim/srv/Spawn

 

 

즉, x, y, theta로 초기 위치를 지정하고 string name으로 거북이 객체 이름을 정해주라는 것이다. 물론 string name은 Optinal하고 이름을 정하지 않을거면 비워두면 된다. 

 

그럼 거북이 한마리 더 추가를 위한 service call를 추가한다. 

 

ros2 service call /spawn turtlesim/srv/Spawn "{x: 1, y: 1, theta: 0, name: ''}"

 

 

 

service list를 다시 확인해보자.

 

 

turtle1과 turtl2로 각각 구분해서 서비스를 다룰 수 있다.

 

 

두 거북이를 이동시켜보면 아래와 같다. 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.