[ROS2] EP10. 서비스 서버 만들기

김희상·2024년 7월 18일

ROS2

목록 보기
10/17
post-thumbnail

  • OS : Ubuntu 22.04
  • ROS 2 Humble
  • Gazebo 11

1. 서비스 서버 만들기

1. 코드 생성

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 = [1., 20., 30.]
        response.theta = [100., 200., 300.]

        return response
    
def main(args=None):
    rp.init(args=args)
    MultiSpawn = MultiSpawning()
    rp.spin(MultiSpawn)
    rp.shutdown()

if __name__ =='__main__':
    main()
  • my_first_package에 my_service_server.py 만들기
  • create_service로 MultiSpawn 데이터 타입의 multi_spawn 생성
  • 누군가가 서비스를 request한다면 콜백함수

2. setup.py 추가

3. 빌드 후 환경 부르기

4. service list 확인

  • 데이터타입 MultiSpawn 확인

5. service call 테스트

  • response는 코드 작성한 그대로 확인
  • request 받은 메세지도 확인

2. teleport_absolute 클라이언트 만들기

서비스 서버 안에 서비스 클라이언트 생성 가능

1. 코드 수정

from my_first_package_msgs.srv import MultiSpawn
from turtlesim.srv import TeleportAbsolute

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)
        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.req_teleport.y = 1.
        self.teleport.call_async(self.req_teleport)

        return response
    
def main(args=None):
    rp.init(args=args)
    MultiSpawn = MultiSpawning()j
    rp.spin(MultiSpawn)
    rp.shutdown()

if __name__ =='__main__':
    main()

2. 빌드 후 환경 부르기

3. 실행

  • turtlesim과 my_service_server 실행

4, service call 확인


profile
3D 모델러의 개발 도전기

0개의 댓글