ros1에서의 rospy대신 ros2에서는 rclpy를 사용하여 ros2 node를 구현합니다.

rclpy import하기

ROS2 메세지 토픽 Publish하기

ROS2 메세지 토픽 Subscribe하기

turtlesim node 실행

$ ros2 run turtlesim turtlesim_node

jupyter notebook 실행

$ jupyter notebook

서비스 확인

ros2 service list -t
/clear [std_srvs/srv/Empty]
/kill [turtlesim/srv/Kill]
/reset [std_srvs/srv/Empty]
/spawn [turtlesim/srv/Spawn]
/turtle1/set_pen [turtlesim/srv/SetPen]
**/turtle1/teleport_absolute** [turtlesim/srv/TeleportAbsolute]
/turtle1/teleport_relative [turtlesim/srv/TeleportRelative]
/turtlesim/describe_parameters [rcl_interfaces/srv/DescribeParameters]
/turtlesim/get_parameter_types [rcl_interfaces/srv/GetParameterTypes]
/turtlesim/get_parameters [rcl_interfaces/srv/GetParameters]
/turtlesim/list_parameters [rcl_interfaces/srv/ListParameters]
/turtlesim/set_parameters [rcl_interfaces/srv/SetParameters]
/turtlesim/set_parameters_atomically [rcl_interfaces/srv/SetParametersAtomically]

코드 작성

import rclpy as rp
from turtlesim.srv import TeleportAbsolute

rp.init()
test_node = rp.create_node('client_test')

service_name = '/turtle1/teleport_absolute'
cli = test_node.create_client(TeleportAbsolute, service_name)

#Instantiate request topic
req = TeleportAbsolute.Request()

req.x = 3.
req.y = 3.
req.theta = 0.
req

#서비스 명령 전송
cli.call_async(req)
rp.spin_once(test_node)

Jupyter에서 image Subscribe 하기