https://cafe.naver.com/openrt/24241
인터페이스는 메세지다.(정확히는, 메세지의 형태)
ROS 2에서는 4가지 종류의 인터페이스를 사용한다.
ROS 1과 ROS 2에서 모두 사용하는 msg(토픽), srv(서비스), action(액션)
그리고 ROS 2에서 새롭게 추가된 IDL(Interface Definition Language, 아직은 무엇인지 잘 모르겠다).
이 인터페이스는 3가지 정도 형태가 있는데, 그 3가지 모두 자료형과 비슷한 개념이다.
(1)단순 자료형
-float, int 등
(2)메시지 안의 메시지: 데이터 구조
-[자료형 메시지명] 의 구조
-Vector3 linear 등
(3)[]만 추가한 배열
-float [] arr 등
-우리가 아는 배열의 구조와 같은 듯하다. 자료형 [] 배열명
/turtle1/cmd/vel 토픽의 인터페이스를 살펴보자.
/turtle1/cmd/vel 토픽은 Twist형태고,
Twist형태는 Vector3형태고, Vector3 linear와 Vector3 angular로 나뉜다.
Vector3은 float64형태고, float64 x, float64 y, float64 z로 나뉜다.
이것이 메시지 안의 메시지인 데이터 구조 형태로,
합산하자면 총 6개의 개별 메시지가 있는 것이다.
(명칭이 정확한지는 모르겠으나 float64 linear.x, float64 linear.y, float64 linear.z, float64 angular.x, float64 angular.y, float64 angular.z 일 것이다.)
서비스 인터페이스, srv는 서비스에 특정으로 사용되는 인터페이스이다. msg의 확장이라고 하고, msg와 크게 다르지 않다.
예시로 spawn서비스에 쓰인 srv를 알아보자.
어떤 인터페이스를 알아보고자 하면 터미널에서 ros2 interface show 인터페이스
를 사용해 볼 수 있다.
$ ros2 interface show turtlesim/srv/Spawn.srv
spawn서비스에 쓰인 Spawn.srv인터페이스를 입력해 정보를 열람하면 다음과 같은 결과가 나온다.
float32 x와 같은 건 이전의 msg와 같다.
string name도 [자료형 메시지명]의 형태이다.
그런데 --- 이라는 구분자는 무엇일까?
서비스에서는 요청과 응답 srv를 구분하기 위해 ---를 사용한다.
위에 있는 x,y,theta, name은 요청을 보낼 때 사용하는 값,
아래 있는 name은 응답으로 보내는 값이다.