Ubuntu ROS 실습(12)

zeusqoi·2일 전

개인공부

목록 보기
31/42

ROS 2에서는 노드 간 데이터를 주고받기 위해 Topic, Service, Action, parameter 등의 통신 방식을 사용한다.

이때 통신 과정에서 어떤 형태의 데이터를 주고받을 것인지 정의하는 것이 ROS Interface(인터페이스)다.

ROS 2에서는 주로 다음과 같은 인터페이스를 사용한다.

  • msg : Topic에서 사용
  • srv : Service에서 사용
  • action : Action에서 사용

1. ROS 인터페이스란?

ROS 인터페이스는 노드 간 통신에 사용되는 데이터의 구조와 형태를 정의한 것이다.

정수(integer), 부동 소수점(float), Boolean과 같은 기본 자료형을 사용할 수 있으며, 하나의 메시지 안에 다른 메시지를 포함하거나 배열 형태의 데이터도 사용할 수 있다.

예를 들어 geometry_msgs/msg/Twist에서는 Vector3 형태의 데이터를 linear, angular라는 이름으로 포함하고 있다.

Vector3 linear
Vector3 angular

그리고 Vector3는 다시 다음과 같이 x, y, z 값을 가진다.

float64 x
float64 y
float64 z

즉, 인터페이스는 단순한 하나의 데이터뿐만 아니라 여러 데이터를 하나의 구조로 묶어서 전달할 수도 있다.


2. Message Interface (msg)

msg 인터페이스는 Topic에서 사용하는 데이터 형식이다.

파일 확장자는 다음과 같다.

*.msg

우리가 앞서 TurtleSim 실습에서 사용했던 /turtle1/cmd_vel Topic이 대표적인 예이다.

/turtle1/cmd_vel

이 Topic은 다음과 같은 인터페이스를 사용한다.

geometry_msgs/msg/Twist

Twist는 다음과 같이 구성되어 있다.

Vector3 linear
Vector3 angular

linear는 선속도, angular는 각속도에 대한 정보를 나타내며 각각 x, y, z 값을 포함한다.

따라서 앞에서 실습했던 다음 명령어에서도 Twist 인터페이스를 사용한 것이다.

ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist ...

3. Service Interface (srv)

srv 인터페이스는 Service에서 사용하는 데이터 형식이다.

파일 확장자는 다음과 같다.

*.srv

Service는 Topic과 달리 요청(Request)을 보내고 응답(Response)을 받는 구조로 동작한다.

예를 들어 TurtleSim의 /spawn 서비스에서는 다음과 같은 Spawn.srv 인터페이스를 사용한다.

float32 x
float32 y
float32 theta
string name
---
string name

여기서 ---는 Request와 Response를 구분하는 구분자이다.

Request
 ├─ x
 ├─ y
 ├─ theta
 └─ name
       ↓
      Service
       ↓
Response
 └─ name

인터페이스의 실제 구조는 다음 명령어로 확인할 수 있다.

ros2 interface show turtlesim/srv/Spawn.srv

4. Action Interface (action)

action 인터페이스는 Action에서 사용하는 데이터 형식이다.

파일 확장자는 다음과 같다.

*.action

Action은 하나의 작업을 요청하고 결과를 기다리는 것뿐만 아니라, 작업이 수행되는 동안 Feedback을 전달할 수 있는 구조를 가진다.

기본적인 구조는 다음과 같다.

Goal
---
Result
---
Feedback

즉,

  • Goal: 수행할 작업의 목표
  • Result: 작업이 완료된 후의 결과
  • Feedback: 작업 수행 중 전달되는 진행 상황

으로 구성된다.


5. msg / srv / action 비교

구분TopicServiceAction
인터페이스msgsrvaction
확장자.msg.srv.action
데이터 구조DataRequest / ResponseGoal / Result / Feedback
특징지속적인 데이터 전달요청에 대한 응답장시간 작업 및 진행 상황 전달

정리하면 msg, srv, action은 각각 Topic, Service, Action에서 사용되는 데이터 구조를 정의한다.

특히 --- 구분자를 기준으로 보면 차이를 쉽게 이해할 수 있다.

msg
Data

srv
Request
---
Response

action
Goal
---
Result
---
Feedback

6. 인터페이스 확인 명령어

ROS 2에서는 ros2 interface show 명령어를 이용하여 특정 인터페이스의 구조를 확인할 수 있다.

예를 들어:

ros2 interface show geometry_msgs/msg/Twist

또는:

ros2 interface show turtlesim/srv/Spawn

와 같이 사용할 수 있다.

이를 통해 실제로 어떤 자료형과 필드가 인터페이스에 정의되어 있는지 확인할 수 있다.


마무리

ROS 2의 인터페이스는 노드 간 통신에서 주고받는 데이터의 구조를 정의하는 역할을 한다.

Topic
  ↓
msg
  ↓
Data

Service
  ↓
srv
  ↓
Request → Response

Action
  ↓
action
  ↓
Goal → Result + Feedback

앞서 실습한 TurtleSim의 /turtle1/cmd_vel 역시 geometry_msgs/msg/Twist라는 인터페이스를 사용한다.

따라서 ROS 2에서 Topic, Service, Action을 이해하기 위해서는 각각 어떤 인터페이스를 사용하고, 그 인터페이스가 어떤 데이터 구조를 가지고 있는지 함께 이해하는 것이 중요하다.

0개의 댓글