ROS 2 서비스 Service

권호떡의 데싸정복·2024년 10월 5일

서비스 Service

  • 그림과 같이 동일 서비스에 대해 복수의 클라이언트를 가질 수 있도록 설계됨.
  • Node C의 Service Client가 Node B의 Service Server에게 서비스 요청을 하였다면 Node B의 Service Server는 요청받은 서비스를 수행한 후 Node C의 Service Client에게만 서비스 응답을 함
  • 여기서는 Node B가 Service Server이므로 여러 클라이언트(Node A, C, D)가 Node B로 서비스를 요청함
# 거북이 애플리케이션 실행
$ ros2 run turtlesim turtlesim_node

# 서비스 list 확인
$  ros2 service list

# 서비스 type 확인
# clear 서비스 유형 검색. /clear 서비스는 거북이 시뮬레이션 환경을 재설정하는 서비스
$ ros2 service type /clear

# kill 서비스는 시뮬레이션의 거북이를 죽이거나, 중지하는 역할
$ ros2 service type /kill

# spawn은 거북이나 로봇과 같은 object를 생성하는 서비스
$ ros2 service type /spawn

# ROS 2 시스템에서 사용 가능한 모든 서비스 출력
$ ros2 service list -t

# 서비스 이름을 찾아줌
$ ros2 service find std_srvs/srv/Empty
$ ros2 service find turtlesim/srv/Kill


# 거북이가 지나온 길을 다 지워줌
$ ros2 service call /clear std_srvs/srv/Empty

# 거북이를 없앰
$  ros2 service call /kill turtlesim/srv/Kill "name: 'turtle1'"

# 초기화. 즉 거북이가 없다면 다시 만들어줌 (디테일로 계속 거북이 모양이 바뀜 ㅋㅋ)
$ ros2 service call /reset std_srvs/srv/Empty

# 거북이 펜을 색깔과 두께를 바꿔줌
$  ros2 service call /turtle1/set_pen turtlesim/srv/SetPen "{r: 255, g: 255, b: 255, width: 10}"

# 기존 거북이 삭제
$ ros2 service call /kill turtlesim/srv/Kill "{name: 'turtle1'}"

# 새로운 거북이 생성
# x: 5.5, y: 9.0 좌표는 위치를 의미. theta: 1.57 은 거북이가 바라보고 있는 방향을 의미
$ ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 9.0, theta: 1.57, name: 'leonardo'}"
$ ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 7.0, theta: 1.57, name: 'raffaello'}"
$ ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 5.0, theta: 1.57, name: 'michelangelo'}"
$ ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 3.0, theta: 1.57, name: 'donatello'}"

Service interface, srv

  • 서비스 또한 토픽과 마찬가지로 별도의 인터페이스를 가짐. 파일로는 srv파일을 가르킴
profile
데이터사이언스정복

0개의 댓글