Note: This tutorial assumes that you have completed the previous tutorials: understanding ROS topics. |
Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
ROS Service와 Parameter 이해하기
Description: 이 예제는 ROS service와 parameter를 소개할뿐만 아니라 rosservice와 rosparam 명령어 도구를 소개합니다.Tutorial Level: BEGINNER
Next Tutorial: Using rqt_console and roslaunch
Contents
이전 예제에 이어서 'turtlesim_node'가 켜져있는 상태라고 가정합니다. 그럼 turtlesim이 어떤 service를 제공하는지 알아봅시다.
ROS Services
서비스는 다른 노드와 통신하는 또 다른 방법입니다. 서비스를 통해 다른노드에 요청을 보내고 응답을 받을 수 있습니다.
Using rosservice
rosservice can easily attach to ROS's client/service framework with services. rosservice has many commands that can be used on services, as shown below:
사용법:
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
rosservice list
$ rosservice list
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 and /rosout/set_logger_level).
/clear /kill /reset /rosout/get_loggers /rosout/set_logger_level /spawn /teleop_turtle/get_loggers /teleop_turtle/set_logger_level /turtle1/set_pen /turtle1/teleport_absolute /turtle1/teleport_relative /turtlesim/get_loggers /turtlesim/set_logger_level
Let's look more closely at the clear service using rosservice type: 그럼 clear service를 rosservice type를 통해 좀 더 깊게 살펴봅시다.
rosservice type
Usage:
rosservice type [service]
clear service가 어떤 type인지 알아봅시다.
$ rosservice type /clear
std_srvs/Empty
이 service의 타입은 empty입니다. 이는 서비스가 호출 될 때 아무 전달인자가 없다는 것을 의미합니다. (요청을 할 때 아무 데이터를 주지 않고, 응답을 받을때 아무 데이터를 받지 않습니다). 그럼 이제 clear service를 rosservice call를 이용해 호출해 봅시다.
rosservice call
사용법:
rosservice call [service] [args]
여기서 이 service는 type이 empty이기 때문에 어떠한 전달인자 없이 호출합니다.
$ rosservice call /clear
우리가 예상한대로, 이 service는 turtlesim_node의 배경을 지웁니다.
service가 전달인자를 가지는 경우를 살펴보기위해 spwan service를 살펴 봅시다.
$ rosservice type /spawn | rossrv show
float32 x float32 y float32 theta string name --- string name
이 서비스는 새로운 거북이를 주어진 방향과 위치로 생성합니다. 거북이의 name field는 선택사항입니다. 새로운 거북이에게 이름을 주지 않으면, turtlesim node가 자동으로 이름을 생성합니다.
$ rosservice call /spawn 2 2 0.2 ""
이 spawn service 호출은 새로 생성된 거북이의 이름이 반환합니다.
name: turtle2
이제 turtlesim은 아래와 같이 보일 것입니다.
Using rosparam
rosparam은 ROS의 Parameter Server에 데이터를 저장하고 조작할 수 있게 해줍니다. ROS parameter 서버는 integer, float, boolean, ditionary, list 타입의 데이터를 저장할 수 있습니다. rosparam YAML 마크업언어를 문법으로 사용합니다. 간단한 경우에는 YAML는 가독성이 좋습니다. 1은 integer, 1.0은 float, one은 string, true는 boolean, [1, 2, 3]은 integer list, {a: b, c: d}는 dictionary. rosparam은 아래와 같이 parameter에 사용될 수 있는 많은 명령어를 가집니다.
Usage:
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
그럼 이제 어떤 parameter들이 현재 parameter 서버에 올라가있는지 살펴 봅시다.
rosparam list
$ rosparam list
turtlesim 노드가 배경색에 대한 3가지 parameter가 parameter 서버에 올라가 있는것을 확인할 수 있습니다.
/background_b /background_g /background_r /rosdistro /roslaunch/uris/host_57aea0986fef__34309 /rosversion /run_id
rosparam set을 이용해 parameter를 변경해 봅시다.
rosparam set and rosparam get
Usage:
rosparam set [param_name] rosparam get [param_name]
배경색의 red channel을 한번 변경해 봅시다.
$ rosparam set /background_r 150
parameter 값이 변경되었습니다. 이제 parameter 값 변경을 적용하기 위해 clear service를 호출해야 합니다.
$ rosservice call /clear
이제 turtlesim은 이렇게 보일 것입니다.
이제 parameter 서버의 parameter 값을 확인해 봅시다. 배경색의 green channel 값을 확인해봅시다.
$ rosparam get /background_g
86
또한, rosparam get / 명령을 통해 Parameter Server의 모든 내용을 확인할 수 있습니다.
$ rosparam get /
background_b: 255 background_g: 86 background_r: 150 roslaunch: uris: {'aqy:51932': 'http://aqy:51932/'} run_id: e07ea71e-98df-11de-8875-001b21201aa8
또한 rosparam을 이용하여 이 파일을 저장하고 추후에 다시 불러올수도 있습니다.
rosparam dump and rosparam load
Usage:
rosparam dump [file_name] [namespace] rosparam load [file_name] [namespace]
모든 parameter를 params.yaml로 저장합니다.
$ rosparam dump params.yaml
또한, 이 yaml 파일을 새로운 namespace에 저장 할 수도 있습니다. e.g. copy
$ rosparam load params.yaml copy $ rosparam get /copy/background_b
255
이제 당신은 ROS service와 parameter가 어떻게 동작하는지 이해하였습니다. rqt_console과 roslaunch를 배워봅시다. try using rqt_console and roslaunch