ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
ros2 service call /turtle1/set_pen turtlesim/srv/SetPen "{r: 0, g: 255, b: 0, width: 20}"
ros2 service call /turtle1/set_pen turtlesim/srv/SetPen "{r: 255, g: 255, b: 0, width: 10}"
ros2 service call /turtle1/set_pen turtlesim/srv/SetPen "{r: 0, g: 255, b: 255, width: 7}"

ros2 service call /reset std_srvs/srv/Empty
ros2 service call /kill turtlesim/srv/Kill "name: 'turtle1'"
ros2 service call /spawn turtlesim/srv/Spawn "{x: 7, y: 6, theta: 0, name: 'turtle1'}"
ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 8, y: 6, theta: -2.5132}"
ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 7.190983, y: 5.412215, theta: -1.2566}"
ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 7.5, y: 4.4611582, theta: 0}"
ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 6.690983, y: 5.048943, theta: 0}"
ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 5.881966, y: 4.461158, theta: 0}"
ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 6.190983, y: 5.4122147, theta: 0}"
ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 5.381966, y: 6, theta: 0}"
ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 6.381966, y: 6, theta: 0}"
ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 6.690983, y: 6.9510565, theta: 0}"
ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 7, y: 6, theta: 0}"

-> 이전 Point에 각도로 cos, sin값 구해서 다음
ros2 service call /reset std_srvs/srv/Empty
ros2 service call /kill turtlesim/srv/Kill "{name: 'turtle1'}"
ros2 service call /spawn turtlesim/srv/Spawn "{x: 6, y: 6, name: 't1'}"
ros2 service call /spawn turtlesim/srv/Spawn "{x: 6, y: 4.5, name: 't2'}"
ros2 service call /spawn turtlesim/srv/Spawn "{x: 6, y: 3, name: 't3'}"
ros2 service call /spawn turtlesim/srv/Spawn "{x: 6, y: 7.5, name: 't4'}"
ros2 topic pub /t1/cmd_vel --rate 1 geometry_msgs/msg/Twist "{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
ros2 topic pub /t2/cmd_vel --rate 2 geometry_msgs/msg/Twist "{linear: {x: 1.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
ros2 topic pub /t3/cmd_vel --rate 3 geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
ros2 topic pub /t4/cmd_vel --rate 4 geometry_msgs/msg/Twist "{linear: {x: 2.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
import rclpy as rp
from turtlesim.srv import TeleportAbsolute, Kill, Spawn
from std_srvs.srv import Empty
import time
import numpy as np
def send_request(test_node, req):
future = cli.call_async(req)
while not future.done():
rp.spin_once(test_node)
rp.init()
test_node = rp.create_node('client_test')
cli = test_node.create_client(Empty, '/reset')
req = Empty.Request()
send_request(test_node, req)
cli.destroy()
time.sleep(0.1)
cli = test_node.create_client(Kill, '/kill')
req = Kill.Request()
req.name = 'turtle1'
send_request(test_node, req)
cli.destroy()
time.sleep(0.1)
star_degrees = [
0,
-144,
-72,
144,
-144,
72,
144,
0,
72,
-72
]
before_x, before_y = 6, 6
star_length = 2
cli = test_node.create_client(Spawn, '/spawn')
req = Spawn.Request()
req.x, req.y = float(before_x), float(before_y)
req.name = 'turtle1'
send_request(test_node, req)
cli.destroy()
time.sleep(0.1)
service_name = '/turtle1/teleport_absolute'
cli = test_node.create_client(TeleportAbsolute, service_name)
req = TeleportAbsolute.Request()
for degree in star_degrees:
req.x = before_x + star_length * np.cos(degree * np.pi/180)
req.y = before_y + star_length * np.sin(degree * np.pi/180)
send_request(test_node, req)
before_x = req.x
before_y = req.y
cli.destroy()
test_node.destroy_node()
import rclpy as rp
from turtlesim.srv import TeleportAbsolute, Kill, Spawn
from std_srvs.srv import Empty
import time
import numpy as np
def send_request(test_node, req):
future = cli.call_async(req)
while not future.done():
rp.spin_once(test_node)
rp.init()
test_node = rp.create_node('client_test')
cli = test_node.create_client(Empty, '/reset')
req = Empty.Request()
send_request(test_node, req)
cli.destroy()
time.sleep(0.1)
cli = test_node.create_client(Kill, '/kill')
req = Kill.Request()
req.name = 'turtle1'
send_request(test_node, req)
cli.destroy()
time.sleep(0.1)
star_points = 5
before_x, before_y = 6, 6
star_length = 2
degree = -144
cli = test_node.create_client(Spawn, '/spawn')
req = Spawn.Request()
req.x, req.y = float(before_x), float(before_y)
req.name = 'turtle1'
send_request(test_node, req)
cli.destroy()
time.sleep(0.1)
service_name = '/turtle1/teleport_absolute'
cli = test_node.create_client(TeleportAbsolute, service_name)
req = TeleportAbsolute.Request()
for i in range(star_points):
req.x = before_x + star_length * np.cos(degree * np.pi/180)
req.y = before_y + star_length * np.sin(degree * np.pi/180)
send_request(test_node, req)
before_x = req.x
before_y = req.y
degree += -144
cli.destroy()
test_node.destroy_node()
import rclpy
from rclpy.node import Node
from turtlesim.msg import Pose
class Subscriber(Node) :
def __init__(self) :
super().__init__('subscriber')
self.sub1 = self.create_subscription(
Pose, # 임포트 된 메시지 타입
'/t1/pose', # 토픽리스트에서 조회한 토픽 주소
self.callback1,
10)
self.sub2 = self.create_subscription(
Pose, # 임포트 된 메시지 타입
'/t2/pose', # 토픽리스트에서 조회한 토픽 주소
self.callback2,
10)
self.sub3 = self.create_subscription(
Pose, # 임포트 된 메시지 타입
'/t3/pose', # 토픽리스트에서 조회한 토픽 주소
self.callback3,
10)
self.sub4 = self.create_subscription(
Pose, # 임포트 된 메시지 타입
'/t4/pose', # 토픽리스트에서 조회한 토픽 주소
self.callback4,
10)
def callback1(self, msg) :
x = msg.x
y = msg.y
print(f"turtle_name: t1 X: {x} , Y: {y}")
def callback2(self, msg) :
x = msg.x
y = msg.y
print(f"turtle_name: t2 X: {x} , Y: {y}")
def callback3(self, msg) :
x = msg.x
y = msg.y
print(f"turtle_name: t3 X: {x} , Y: {y}")
def callback4(self, msg) :
x = msg.x
y = msg.y
print(f"turtle_name: t4 X: {x} , Y: {y}")
def main(args=None) :
rclpy.init(args=args)
node = Subscriber()
try :
rclpy.spin(node)
except KeyboardInterrupt :
node.get_logger().info('Stopped by Keyboard')
finally :
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__' :
main()
