[ROS 튜토리얼] 1.1.7 ROS 서비스(service)와 매개 변수(parameter)에 대한 이해

    Note : 튜토리얼은 이전의 understanding ROS topics 튜토리얼을 학습했다 가정한 작성된 튜토리얼이다.

    튜토리얼에 관련된 문제 질문은 answers.ros.org에서 확인하라. 질문 작성 , 튜토리얼 페이지에 대한 링크, OS & ROS 버전 적절한 태그를 추가할 .

     

    Understanding ROS Services and Parameters

    • Description : 이 튜토리얼은 ROS의 서비스(service) 및 파라미터(parameter)에 대해 소개하고, 커맨드라인 툴인 rosservicerosparam의 사용법에 대해 알아볼 것이다.
    • Tutorial Level : BEGINNER
    • Next Tutorial : Using rqt_console and roslaunch

     

    1. ROS Services

    노드간 서로 통신할 수 있는 또다른 방법에 '서비스(service)'가 있다. 노드는 서비스를 통해 '요청(request)'과 '응답(response)'을 주고 받을 수 있다.

     

    2. Using rosservice

    rosservice는 서비스를 통해 ROS의 client/service 프레임워크에 쉽게 연결할 수 있다. 다음과 같이 rosservice에는 서비스에서 사용 가능한 많은 명령어들이 존재한다.

    사용 방법:

    rosservice list         print information about active services
    rosservice call         call the service with the provided args
    rosservice type         print service type
    rosservice find         find services by service type
    rosservice uri          print service ROSRPC uri

    2.1 rosservice list

    rosservice list

    해당 명령어는 turtlesim 노드가 9개의 서비스를 제공중이라는 것을 알려준다.

    • reset
    • clear
    • spawn
    • kill
    • turtle1/set_pen
    • /turtle1/teleport_absolute
    • /turtle1/teleport_relative
    • turtlesim/get_loggers
    • turtlesim/set_logger_level

    또한 별도의 rosout 노드와 관련된 서비스 2개도 확인할 수 있다.

    • /rosout/get_loggers
    • /rosout/set_logger_level

    rosservice type 명령어를 사용해 clear 서비스를 자세히 살펴보겠다.

    2.2 rosservice type

    사용법:

    rosservice type [service]

    다음과 같이 입력해 clear 서비스의 타입을 알아볼 수 있다.

    rosservice type /clear

    Empty는 해당 서비스가 비어있다는 것이다. 이는 서비스가 호출될 때 인수 없이 호출되었음을 의미한다. 즉 요청할 때 데이터를 송신하지 않고, 응답을 수신할 때도 데이터를 수신하지 않는다는 뜻이다. 해당 서비스를 rosservice call 명령어를 사용해 호출해보자.

    2.3 rosservice call

    사용법:

    rosservice call [service] [args]

    호출해보고자 하는 clear 서비스의 타입이 Empty이기 때문에 인자 없이 호출해본다.

    rosservice call /clear

    예상했던대로 turtlesim_node의 배경에 그려진 이동선이 지워졌다.

    spawn 서비스에 대한 정보를 참조해 인수를 갖는 서비스를 살펴보자.

    rosservice type /spawn | rossrv show

    출력 결과를 보면 알 수 있듯, 이 서비스를 호출하면 지정된 위치와 방향에서 새로운 거북이를 추가할 수 있다. String 타입인 name 필드는 옵션 사항이므로 비우려면 ""를 입력한다.

    rosservice call /spawn 2 2 0.5 "Sam"

    서비스가 올바르게 호출되었다면, 인자로 전달한 거북이의 이름을 반환한다.

     

    3. rosparam

    rosparam 명령어를 사용하면 ROS Parameter Server에 데이터를 저장하고 조작할 수 있다. Parameter Server는 integer, float, boolean, dictionary, list 타입을 저장할 수 있다. rosparam 명령어는 YAML 마크업 언어를 문법으로 사용한다.

    일반적인 경우 YAML은 초심자에게도 그리 어렵워 보이지 않는다.

    • 1 : integer
    • 1.0 : float
    • one : string
    • true : boolean
    • [1, 2, 3] : list of integer
    • {a:b, c:d} : dictionary

    rosparam은 다음과 같이 매개변수로 사용할 수 있는 옵션이 많이 있다.

    사용법:

    rosparam set            set parameter
    rosparam get            get parameter
    rosparam load           load parameters from file
    rosparam dump           dump parameters to file
    rosparam delete         delete parameter
    rosparam list           list parameter names

    현재 param 서버에 어떤 매개변수가 있는지 확인해보자.

    3.1 rosparam list

    rosparam list

    위 명령어를 입력해보면 turtlesim 노드가 param server에 배경색으로 세 가지 파라미터를 가지고 있다는 것을 알 수 있다.

    rosparam set 명령어를 사용해 매개변수 값을 바꿔볼 것이다.

    3.2 rosparam set and rosparam get

    사용법:

    rosparam set [param_name]
    rosparam get [param_name]

    빨간색 배경값을 바꿔보자.

    rosparam set /turtlesim/background_r 150

    매개변수 값은 바뀌었으나, 해당 값으로 다시 배경을 그러야 하므로 clear 서비스를 호출한다.

    rosservice call /clear

    변경된 매개변수 값으로 다시 그린 turtlesim을 볼 수 있다.

    param server에 존재하는 다른 매개변수 값을 조회해볼 것이다.

    rosparam get /turtlesim/background_g

    rosparam get / 명령어를 입력해 전체 Parameter Server의 내용을 표시할 수도 있다.

    나중에 이를 다시 로드할 수 있도록 파일에 저장할 수 있다. 이것은 rosparam을 이용하면 쉽다.

    3.3 rosparam dump and rosparam load

    사용법:

    rosparam dump [file_name] [namespace]
    rosparam load [file_name] [namespace]

    다음을 입력해 모든 매개변수를 params.yaml 파일에 쓴다.

    rosparam dump params.yaml

    이러한 yaml 파일은 myTurtle과 같은 새 namespace로 로드할 수도 있다.

    rosparam load param.yaml myTurtle
    rosparam get /myTurtle/turtlesim/background_b

    이제 ROS service와 params가 동작하는 법을 이해했으니, rqt_condsole과 roslaunch를 사용해보자.

     

     

     

     

    댓글

    Designed by JB FACTORY