[ROS 2]010: ROS 2 서비스(service)

maroo·2022년 8월 1일
0

ROS2

목록 보기
18/39
post-thumbnail

https://cafe.naver.com/openrt/24128

1. 서비스

-Service: 동기식 양방향 메시지 송수신 방식
-Service Client: service request
-Service Server: service response
-request 및 response: srv 인터페이스(msg의 변형)

2. 서비스 목록 확인(ros2 service list)

turtlesim노드 실행

$ ros2 run turtlesim turtlesim_node

실행 중인 노드들의 서비스 목록 확인

$ ros2 service list

3. 서비스 형태 확인(ros2 service type)

ros2 service type 뒤에 특정 서비스명을 입력해서 서비스 형태 확인

$ ros2 service type /clear
$ ros2 service type /kill
$ ros2 service type /spawn

실행 중인 노드들의 서비스 목록과 형태 함께 확인

$ ros2 service list -t

4. 서비스 찾기(ros 2 service find)

ros2 service find 뒤에 특정 서비스 형태를 입력해 그 형태를 쓰는 서비스명을 확인

$ ros2 service find std_srvs/srv/Empty
$ ros2 service find turtlesim/srv/Kill

5. 서비스 요청(ros2 service call)

서비스 서버에게 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'}"


profile
할수이따 ~

0개의 댓글