https://cafe.naver.com/openrt/24128
-Service: 동기식 양방향 메시지 송수신 방식
-Service Client: service request
-Service Server: service response
-request 및 response: srv 인터페이스(msg의 변형)
turtlesim노드 실행
$ ros2 run turtlesim turtlesim_node
실행 중인 노드들의 서비스 목록 확인
$ ros2 service list
ros2 service type 뒤에 특정 서비스명을 입력해서 서비스 형태 확인
$ ros2 service type /clear
$ ros2 service type /kill
$ ros2 service type /spawn
실행 중인 노드들의 서비스 목록과 형태 함께 확인
$ ros2 service list -t
ros2 service find 뒤에 특정 서비스 형태를 입력해 그 형태를 쓰는 서비스명을 확인
$ ros2 service find std_srvs/srv/Empty
$ ros2 service find turtlesim/srv/Kill
서비스 서버에게 request를 한번 해 보자.
ros2 service call <서비스명> <서비스형태> "<서비스 요청 내용>" 와 같이 명령어를 적으면 된다.
/clear 서비스
: turtlesim의 이동 궤적을 지우는 서비스
turtlesim노드를 실행한 상태에서 먼저 turtlesim을 움직여보고,
$ ros2 run turtlesim turtle_teleop_key
/clear서비스를 요청해 보자.
$ ros2 service call /clear std_srvs/srv/Empty
/kill 서비스
turtle1이라는 이름의 거북이를 죽이고 싶으면 다음 명령어로 요청을 하면 된다.
$ ros2 service call /kill turtlesim/srv/Kill "name: 'turtle1'"
/reset서비스
: 말 그대로 리셋이다. 처음 상태로 되돌리는 서비스
$ ros2 service call /reset std_srvs/srv/Empty
/set_pen 서비스
: 지정한 거북이의 궤적 색(r,g,b로 지정)과 크기(width로 지정)를 변경하는 서비스
$ ros2 service call /turtle1/set_pen turtlesim/srv/SetPen "{r: 0, g: 43, b: 238, width: 50}"
$ ros2 service call /turtle1/set_pen turtlesim/srv/SetPen "{r: 255, g: 255, b: 255, width: 1}"
$ ros2 service call /turtle1/set_pen turtlesim/srv/SetPen "{r: 0, g: 0, b: 0, width: 5}"
$ ros2 service call /turtle1/set_pen turtlesim/srv/SetPen "{r: 100, g: 24, b: 189, width: 10}"
여러 값을 넣어보며 변경할 수 있다.
/spawn 서비스
: 지정한 위치 및 자세에 지정한 이름으로 거북이를 추가하는 서비스
지저분한 화면을 reset하고 원래 거북이를 죽인 후,
$ ros2 service call /reset std_srvs/srv/Empty
$ ros2 service call /kill turtlesim/srv/Kill "name: 'turtle1'"
4마리 거북이를 만들었다.
$ ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 9, theta: 1.57, name: 'alpha'}"
$ ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 7, theta: 1.57, name: 'beta'}"
$ ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 5, theta: 1.57, name: 'delta'}"
$ ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 3, theta: 1.57, name: 'gamma'}"