반응형

1. ROS Services

서비스는 노드 사이 통신을 위한 또다른 방법이다. 서비스는 노드들에게 Request를 보내고 Response를 받게 된다.

앞에서 다룬 Topic과의 차이는 아래 그림을 통해 쉽게 이해할 수 있다.

Topic은 데이터가 지속적으로 전달되어지는 데이터 스트림에 적합한 비동기식 통신 방법인 반면, 서비스는 대기/응답(Request/Response) 방식의 통신으로 동기식 통신 방법을 의미한다.

 

 

2. Using rosservice

rosservice는 ROS의 client/service 프레임워크의 일부로 많은 명령어들이 존재한다.

* setup

$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key

 

 

2.1 rosservice list

 

list는 현재 가동중인 노드의 활성화된 서비스에 대한 정보를 출력하는 것으로, roscore만 실행한 후 이를 진행해보면

위의 결과를 확인할 수 있고 setup과정의 모든 노드를 실행하고 list를 확인하여 보면

위의 결과를 확인할 수 있다.

 

즉, turtlesim 노드는 9개의 서비스(reset, kill, clear, spawn, turtle1/set_pen, ... , turtlesim/get_logger_level)를 나타내고

turtle_teleop_key 노드는 2개의 서비스(teleop_turtle/get_loggers, teleop_turtle/set_logger_level)를 나타내며

rosout 노드에서 2개의 서비스를 나타내는 것을 확인할 수 있다.

 

 

2.2 rosservice type

 

turtlesim 의 clear 서비스의 타입을 살펴보자.

서비스가 empty로  표시되는데 이는 서비스가 호출될 때 전달된 인자가 없다는 것을 의미한다.

(Request할때 어떠한 데이터를 전송하지도 않고 Response할때 어떠한 데이터도 받지 않는다.)

그럼 이제 clear service를 rosservice call 을 이용하여 호출하여 보자.

 

 

2.3 rosservice call

 

위의 내용은 turtlesim_node의 clear 서비스를 실행시키는 것으로 거북이가 움직인 경로(background)를 초기화한다.

 

service가 전달인자를 갖는 경우를 살펴보기 위해 spwan service를 살펴보자.

 

spwan 서비스는 새로운 거북이를 주어진 방향과 위치로 생성한다(name 부분은 선택사항이다).

위의 명령어를 실행하면 새로 생성된 거북이의 이름을 return하고 아래와 같이 한마리가 추가된다.

내요은 /spawn 서비스를 호출하는데 x값에 해당하는 값에 2, y값에 해당하는 값에도 2, theta값에 0.2값을 넣어준 것이다.

마지막의 ""는 turtlesim의 이름을 지정하는 부분으로 공백으로 사용하여 임의의 값을 얻어오고자 함이다.

 

 

 

3. Using rosparam

ROS에서의 파라미터는 전역변수(Global variable)와 같은 역할을 한다.

rosparam은 사용자가 ROS 파라미터 서비스의 데이터를 저장하거나 조종하는 것을 허용하며 integer, float, boolean, dictionary, list 타입의 데이터를 저장할 수 있고 YAML 마크업언어 문법을 사용한다.

*YAML은 "또 다른 마크업 언어(Yet Another Markup Language)" 이며 사람이 쉽게 읽을 수 있는 데이터 직렬화 양식으로 가벼운 마크업 언어로 사용하고 있다(최근에는 XML, JSON이 데이터 직렬화에 주로 쓰인다).

 

$ rosparam

위의 명령어를 통해 옵션들을 확인해볼 수 있다.

 

3.1 rosparam list

rosparam list를 통해 현재 노드들에서 활성화된 파라미터들을 확인할 수 있고 turtlesim 노드에서 배경색에 대한 3가지의

parameters가 존재함을 확인할 수 있다.

그럼 rosparam set을 이용하여 파라미터를 수정하여보자.

 

 

3.2 rosparam set and rosparam get

현재 배경의 RGB값을 확인하여보면 위와 같다.

Parameter Server의 모든 내용을 확인하고자 하면 다음과 같이 진행한다.

 

그럼 set을 통해 값을 변경해보자.

 

3.3 rosparam dump and rosparam load

 

rosparam을 이용하여 정보들을 저장하여 추후에 다시 불러올 수 있도록 해보자.

아래 명령어를 통해 모든 parameters를 params.yaml로 저장한다.

또한 저장된 yaml파일을 새로운 namespace에 저장하여 사용할 수 있다.

반응형

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

Using rosed to edit files in ROS  (0) 2021.01.05
Using rqt_console and roslaunch  (0) 2021.01.05
Understanding ROS Topics  (0) 2021.01.04
Understanding ROS Nodes  (0) 2021.01.03
Building a ROS Package  (0) 2020.12.31

+ Recent posts