Note : 이 튜토리얼은 이전의 understanding ROS topics 튜토리얼을 학습했다 가정한 후 작성된 튜토리얼이다.
이 튜토리얼에 관련된 문제 및 질문은 answers.ros.org에서 확인하라. 질문 작성 시, 이 튜토리얼 페이지에 대한 링크, OS & ROS 버전 및 적절한 태그를 추가할 것.
Understanding ROS Services and Parameters
- Description : 이 튜토리얼은 ROS의 서비스(service) 및 파라미터(parameter)에 대해 소개하고, 커맨드라인 툴인 rosservice와 rosparam의 사용법에 대해 알아볼 것이다.
- 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를 사용해보자.
'취미 > ROS' 카테고리의 다른 글
[ROS] Ubuntu 20.04 LTS에 ROS Noetic 설치하기 #2 (0) | 2022.11.07 |
---|---|
[ROS] Ubuntu 20.04 LTS에 ROS Noetic 설치하기 #1 (0) | 2022.10.27 |
[ROS 튜토리얼] 1.1.6 ROS의 토픽(topic)에 대한 이해 (0) | 2021.05.30 |
[ROS 튜토리얼] 1.1.5 ROS의 노드(node)에 대한 이해 (0) | 2021.03.31 |
[ROS 튜토리얼] 1.1.4 ROS 패키지 빌드하기 (0) | 2021.03.24 |