ROS의 노드 간의 데이터를 주고 받을 때에는 토픽, 서비스, 액션을 사용한다. 이 때 사용되는 데이터의 형태를 인터페이스라고 한다. 토픽, 서비스, 액션은 각각 msg, srv, action interface를 사용한다.
메세지 인터페이스 (msg)
/turtle1/cmd_vel 토픽은 geometry_msgs/msgs/Twist 형태이다.
기하학 관련 메시지를 모아둔 geometry_msgs 패키지의 msgs 분류의 Twist 데이터 형태라는 것이다.
Twist 데이터 형태를 자세히 보면 Vector3 linear과 Vector3 angular 2가지로 이루어져 있다. 이는 메시지 안에 메시지를 품고 있는 것으로 Vector3 형태에 linear 이라는 이름의 메시지와 Vector3 형태에 angular 이라는 이름의 메시지, 즉 2개의 메시지가 있다는 것이며 Vector3는 다시 float64 형태에 x, y, z 값이 존재한다.
즉, geometry_msgs/msgs/Twist 메시지 형태는 float64 자료형의 linear.x, linear.y, linear.z, angular.x, angular.y, angular.z 라는 이름의 메시지입니다.
따라서 병진속도 3가지, 회전속도 3가지를 표현하게 됩니다.
$ ros2 interface show geometry_msgs/msg/Twist
Bash
복사
위 명령어를 통해 메세지 인터페이스를 살펴 볼 수 있다.
Vector3 linear
Vector3 angular
Bash
복사
이 Vector3에 대해서 조금 더 상세히 살펴보면,
$ ros2 interface show geometry_msgs/msg/Vector3
Bash
복사
float64 x
float64 y
float64 z
Bash
복사
ROS2 interface는 show 이외에도 여러 명령어가 존재한다.
•
list : 현재 개발 환경의 모든 msg, src, action 메세지를 보여준다
•
package : msg, srv, action 인터페이스를 담고 있는 패키지의 목록을 보여준다.
•
proto : 특정 인터페이스 형태를 입력하면 그 인터페이스의 기본 형태를 표시해준다.
서비스 인터페이스 (srv)
$ ros2 interface show turtlesim/srv/Spawn.srv
Bash
복사
위 명령어를 통해 서비스 인터페이스를 확인 할 수 있다.
float32 x
float32 y
float32 theta
string name
---
string name
Bash
복사
/spawn 서비스를 사용할 때 신규 거북이를 생성하기 위해 x,y,theta로 위치와 자세를 지정하고, name에 신규 거북이의 이름을 지정하였다. 그 뒤 거북이가 추가 되면서 추가된 거북이의 이름을 반환받는다.
액션 인터페이스 (action)
$ ros2 interface show turtlesim/action/RotateAbsolute.action
Bash
복사
위 명령어를 통해 해당 액션 인터페이스를 확인 할 수 있다.
float32 theta
---
float32 delta
---
float32 remaining
Bash
복사
`turtlesim/action/RotateAbsolute.action`은 float32 형태의 theta, delta, remaining 라는 세개의 데이터가 있음을 알 수 있다. `---` 이라는 구분자를 사용하여 액션 목표(goal)), 액션 결과(result), 액션 피드백(feedback)으로 나누어 사용하게 된다. 즉 theta는 액션 목표, delta는 액션 결과, remaining는 액션 피드백에 해당된다.