Understanding services
Background
service는 ROS graph내에서 node간 communication하는 방법 중 하나이다.
topic은 publisher-subscribe model, service는 call-and-response model이라는 차이가 있다.
topic은 data stream을 subscribe하면서 연속적으로 update가 가능하지만, service는 client가 call할 때만 data를 제공한다.
Tasks
setup
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
service list
ros2 service list
6개의 parameter service를 볼 수 있는데, 대부분의 노드는 parameter가 구축된 infrastructure service가 있다.
service type
# ros2 service type <service_name>
ros2 service type /clear
Empty는 service가 data를 보내고 있지 않다는 것을 의미한다.
topic과 마찬가지로 -t를 추가하면 type도 확인할 수 있다.
ros2 service list -t
service find
특정 type의 service를 찾을 수도 있다.
# ros2 service find <type_name>
ros2 service find std_srvs/srv/Empty
interface show
interface show를 통해 ---를 중심으로 위에는 request structure, 아래에는 response structure가 나타난다.
# ros2 interface show <type_name>
ros2 interface show std_srvs/srv/Empty
Empty는 앞서 알아본바와 같이 data를 주고받지 않기 때문에 struucture가 blank이다.
/spawn의 type인 /turtlesim/srv/Spawn를 본다면 2D turtle를 생성(spawn)하기 위해 x, y, theta(pose 결정)가 필요하고, name은 optional하다.
ros2 interface show turtlesim/srv/Spawn
service call
service type, structure 찾는 방법을 알았으니 service를 사용해보자.
# ros2 service call <service_name> <service_type> <arguments>
ros2 service call /clear std_srvs/srv/Empty
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"
ROS2_Humble Documentation : https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools.html