- OS : Ubuntu 22.04
- ROS 2 Humble
- Gazebo 11
1. 서비스 서버 만들기
1. 코드 수정
from my_first_package_msgs.srv import MultiSpawn
from turtlesim.srv import TeleportAbsolute
from turtlesim.srv import Spawn
import time
import rclpy as rp
import numpy as np
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.spawn = self.create_client(Spawn, '/spawn')
self.req_teleport = TeleportAbsolute.Request()
self.req_spawn = Spawn.Request()
self.center_x = 5.54
self.center_y = 5.54
def calc_position(self, n, r):
gap_theta = 2.*np.pi / n
theta = [gap_theta*n for n in range(n)]
x = [r*np.cos(th) for th in theta]
y = [r*np.sin(th) for th in theta]
return x, y, theta
def callback_service(self, request, response):
x, y, theta = self.calc_position(request.num, 3)
for n in range(len(theta)):
self.req_spawn.x = x[n] + self.center_x
self.req_spawn.y = y[n] + self.center_y
self.req_spawn.theta = theta[n]
self.spawn.call_async(self.req_spawn)
time.sleep(0.1)
response.x = x
response.y = y
response.theta = theta
return response
def main(args=None):
rp.init(args=args)
multi_spawn = MultiSpawning()
rp.spin(multi_spawn)
rp.shutdown()
- MultiSpawn은 x[], y[], theta[]가 array 형태로 있는 데이터 타입
- TeleportAbsolute는 거북이 옮기는 역할
- Spawn은 원하는 위치에 거북이 출력
2. 실행

- 빌드 후 터틀심 실행
- my_serivce_server 실행
- service client 실행 - multi_spawn 서비스 - my_first_package_msgs/srv/MultiSpawn 데이터 타입, 9마리 생성
3. 결과 확인
