ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ROS2 Service 기초 사용법
    ROS/ROS2 2025. 1. 13. 19:07
    ROS2 version: jazzy

    1. Service

    Service는 Topic과 달리 Server와 Client로 구성이 되어 있다.

    Client가 Server로 데이터를 Request(요청)를 하면, Server가 Client로 Response(응답)를 하게 된다.

    Service의 통신

    즉, 데이터를 요청해야 데이터를 응답받을 수 있다.

    Service는 하나의 Server에서 여러 개의 Client를 가질 수 있지만, Service의 Server는 오직 하나이다.

    여러 개의 Client와 하나의 Server

    2. Service 실습

    이번에도 turtlesim으로 Service에 대해 살펴보자.

    Terminal 1

    ros2 run turtlesim turtlesim_node

    Terminal 2

    ros2 run turtlesim turtle_teleop_key

     

    2.1 service list

    ros2 service list

    ros2 service list 명령어를 사용하면, 다음의 목록을 볼 수 있다.

    service의 list

    여기서 parameters가 붙어있는 서비스는 파라미터와 관련되어 있고 모든 노드의 기본 기능으로 포함이 되어 있다.

    이는 추후 파라미터를 다룰 때 자세히 알아보도록 하자.

     

    2.2 service type

    Service는 Service의 요청 및 응답 데이터가 어떤 형태를 가졌는지 보여주는 명령어가 있다.

    Service는 Topic과 유사하지만, request와 response 두 유형을 가진다.

    ros2 service type <service_name>

     

    위의 ros2 service list에서 살펴본 몇 가지 service에 대해 type을 살펴보면, 다음과 같다.

    ros2 service type

    Topic과 마찬가지로 명령어의 뒤에 '-t'를 붙여서 type을 확인 할 수도 있다.

    ros2 service list -t

     

    2.3 service info

    ros2 service info <service_name>

    위의 명령어를 사용하여 특정 service의 info를 볼 수 있다.

     

    2.4 service find

    우리가 'ros2 service type'명령어로 service의 형태를 볼 수 있었지만, 특정 형태를 입력하면 해당 형태의 서비스를 사용하는 서비스 명을 확인하는 명령어도 존재한다.

    ros2 service find <type_name>

     

    우리가 찾은 /clear service의 type_name인 '/std_srvs/srv/Empty'를 사용하는 Service node들을 찾아보자.

    std_srvs/srv/Empty type을 사용중인 /clear, /reset service_node

    /clear, /reset Node가 std_srvs/srv/Empty의 type을 사용하는 것을 볼 수 있다.

     

    2.5 interface show

    우리가 Terminal에서 service call을 할 수 있지만, 우선 입력 값의 구조(인터페이스, interface)를 알아야 한다.

    ros2 interface show <type_name>

     

    /clear에 대한 interface를 확인해보면, 다음과 같다.

    /clear의 interface

    ---을 기준으로 위는 요청(Request), 아래는 응답(Response)이지만, 비어있는 타입은 데이터를 송수신 하지 않는다.

     

    이번에는 /spawn node에 대해 interface를 확인해보자.

    ros2에서 interface를 찾는 과정.

    ---을 기준으로 요청(Request), 응답(Response) interface를 확인할 수 있다.

     

    2.6 service call (중요)

    Service call은 실제 서비스 서버에게 서비스를 요청(Request)하는 것이다.

    서비스 요청은 다음과 같이 'ros2 service call' 명령어를 이용하여 <service_name>, <service_type>, <arguments>를 기술한다.

    우리가 위에서 interface 정보를 확인했으니 이를 service call에서 활용할 수 있다.

    ros2 service call <service_name> <service_type> <arguments>

     

    2.6.1 /clear

    우선 Turtlebot sim에서 이동 궤적을 지우는 service를 요청해보자.

    현재 다음과 같이 sim에 궤적이 그려져 있는데,

    ros2 service call /clear std_srvs/srv/Empty

     

    위의 메시지를 요청하면 다음과 같이 된다.

    결과:

    지워진 궤적

     

    2.6.2 /spawn

    ros2 service call /spawn turtlesim/srv/Spawn "{x: 5, y: 5, theta: 0.9, name: ''}"

    이번에는 spawn을 해보자.

    위의 명령어는  /spawn에 turtlesim/srv/Spawn type의 msg를 service call 하겠다는 의미이다.

     

    결과:

    x, y, theta의 부분에 생성된 turtle

     

    2.6.3 /kill

    ros2 service call /kill turtlesim/srv/Kill "name: 'turtle2'"

    이번에는 kill 명령어를 사용하여 생성한 turtle을 지워보자.

    결과:

     

    2.6.4 /reset

    ros2 service call /reset std_srvs/srv/Empty

    이번에는 reset 명령어를 사용하여 초기 단계로 돌아가보자.

     

    이처럼 service는 call하는 형식으로 다양하게 사용할 수 있다.

     

    2.7 service echo

    ros2 service echo <service_name | service_type> <arguments>

    service echo를 사용하여 service간의 데이터 송수신을 볼 수 있다.

    이번에는 다음의 예시를 사용해서 보자.

     

    Terminal 1

    ros2 launch demo_nodes_cpp introspect_services_launch.py

    주어진 데모 실행

     

    Terminal 2

    ros2 param set /introspection_service service_configure_introspection contents
    ros2 param set /introspection_client client_configure_introspection contents

    Client 및 Service 활성화

     

    Terminal 3

    ros2 service echo --flow-style /add_two_ints

    ros2 service echo

     

    결과:

     

    'ROS > ROS2' 카테고리의 다른 글

    ROS2 Topic 기초 사용법  (0) 2025.01.08
    ROS2 Node 기초 사용법  (0) 2025.01.07
    ROS2 유용한 명령어  (0) 2025.01.07
    ROS2 DDS (Data Distribution Service)  (0) 2025.01.06
    _ROS2_Robot Operating System2  (0) 2024.05.24
Designed by Tistory.