티스토리 뷰
서비스 서버, 클라이언트 만들기 (service_server.py)
서비스 서버의 구조
서버 노드 만들기(클래스)
- init 정의
- 서버를 만드는 함수 self.create_service(만든 서비스 타입, 이름, 실행함수)
- callback 함수 정의 (response 반환)
- client 로부터 request 받으면 실행
main 함수
- 객체화
- spin 실행
- shutdown
if 문
서비스 서버 만들기
구독, 발행 노드를 만들때는 create_subscription, create_publisher를 이용했던 것처럼 이번에는 create_service를 이용한다.
multi_spawn이란 이름의 MultiSpawn 데이터 타입의 서비스를 호출?
callback 함수에서는 request와 response를 받고
from my_first_package_msgs.srv import MultiSpawn
import rclpy as rp
from rclpy.node import Node
class MultiSpawning(Node):
def __init__(self):
super().__init__('multi_spawn')
self.server = self.create_service(MultiSpawn, 'multi_spawn', self.callback_service)
def callback_service(self, request, response):
print('Request:', request)
response.x= [1., 2., 3.]
response.y= [10., 20., 30.]
response.theta = [100., 200., 300.]
return response
def main(args=None):
rp.init(args=args)
multi_spawn = MultiSpawning()
rp.spin(multi_spawn)
rp.shutdown()
if __name__== '__main__':
main()
터미널 상에서 service call
더보기
ros2 service call /multi_spawn my_first_package_msgs/srv/MultiSpawn “{num: 1}”
서비스를 호출하면 request를 전달하고 response를 반환받을 수 있다.
실제로 사용할 때에는 전달받은 request를 이용해
response를 도출해내고 반환하거나 하는 동작을 만들 수 있을 것이다.
teleport_absolute 에 대한 클라이언트 추가하기
동작
위에서 만든 서버는 그대로 두고
서버에 request가 들어오면 teleport_absolute 를 요청하는? 클라이언트를 추가하려고 한다.
코드 구현
teleport absolute 쓸 것이기에
from turtlesim.srv import TeleportAbsolute 임포트 해야함
class MultiSpawning(Node):
def __init__(self):
super().__init__('multi_spawn')
self.server = self.create_service(MultiSpawn, 'multi_spawn', self.callback_service)
self.teleport = self.create_client(TeleportAbsolute, '/turtle1/teleport_absolute')
self.req_teleport = TeleportAbsolute.Request()
def callback_service(self, request, response):
self.req_teleport.x = 1.
self.teleport.call_async(self.req_teleport)
return response
터틀심 실행 → 서버 실행 → 서비스 호출
서버도 만들고 클라이언트 호출도 가능하다.
'전공 > ROS' 카테고리의 다른 글
ROS2 서비스 정의 만들기 (1) | 2024.11.16 |
---|---|
ROS2 rqt로 토픽 발행하기, log 구현하고 rqt로 확인하기 (1) | 2024.11.15 |
ROS2 여러 토픽 구독, 발행하기 (1) | 2024.11.14 |
ROS2 메시지 패키지 만들기, 메시지 정의하기 (0) | 2024.11.13 |
ROS2 발행 노드 publisher 만들고 실행해보기 2 (0) | 2024.11.12 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 10만포인트
- 알뜰폰요금제
- 알리익스프레스
- 계산방법
- 경북대
- 카시오
- 교체
- 문서 스캔
- f-94w
- 배송기간
- mealy
- 메쉬 밴드
- 맛집
- 카카오페이
- 방향장
- 파스타
- 타란튤라
- a모바일
- 네이버페이
- 북문
- 오블완
- 할인
- 시계 줄
- 리브엠
- 티스토리챌린지
- Liiv M
- f-91w
- 방어동작
- 알뜰 요금제
- 리브모바일
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함