ROS2에서 노드 간에 주고받는 데이터의 구조를 정의
🚀 ROS 2 Interface 개요
ROS 2 Interface(인터페이스)는 ROS 2 노드 간의 데이터 교환을 정의하는 메시지 타입(Message Type)을 의미합니다.
ROS 2에서는 토픽(Topic), 서비스(Service), 액션(Action)을 통해 데이터를 주고받으며, 이러한 데이터의 형식을 정의하는 것이 Interface입니다.
Interface는 .msg, .srv, .action 확장자를 가진 텍스트 파일로 정의
- 메시지 (msg): Topic을 통한 단방향 통신에 사용
- 서비스 (srv): 요청-응답 모델의 양방향 통신에 사용
- 액션 (action): 장기 실행 작업을 위한 비동기 양방향 통신에 사용
🔹 ROS 2 Interface 종류
ROS 2에서 사용하는 인터페이스에는 3가지 종류가 있습니다.
인터페이스설명예제
📌 Message (메시지) |
토픽(Topic)에서 사용 |
std_msgs/msg/String |
📌 Service (서비스) |
요청/응답 구조 |
example_interfaces/srv/AddTwoInts |
📌 Action (액션) |
장기 실행 작업 |
action_tutorials_interfaces/action/Fibonacci |
🟢 1. 메시지(Message) - Topic에서 사용
토픽(Topic)은 데이터를 계속 송수신하는 구조입니다.
토픽을 통해 데이터를 보내려면 **메시지 타입(Message Type)**을 정의해야 합니다.
📌 예제: std_msgs/msg/String
👉 단순히 문자열 데이터를 전송하는 메시지 형식입니다.
📌 예제: geometry_msgs/msg/Twist
geometry_msgs/Vector3 linear
geometry_msgs/Vector3 angular
👉 로봇의 선속도(linear)와 각속도(angular)를 표현하는 메시지 형식입니다.
🟡 2. 서비스(Service) - 요청(Request) & 응답(Response)
서비스(Service)는 요청(Request)과 응답(Response) 구조로 작동하는 인터페이스입니다.
즉, 클라이언트(Client)가 요청을 보내면 서버(Server)가 응답을 반환하는 구조입니다.
📌 예제: example_interfaces/srv/AddTwoInts
int64 a
int64 b
---
int64 sum
- 요청(Request): int64 a, int64 b → 두 개의 정수를 입력
- 응답(Response): int64 sum → 두 수의 합을 반환
🔴 3. 액션(Action) - 장기 실행 작업
액션(Action)은 오랜 시간이 걸리는 작업을 수행할 때 사용되는 인터페이스입니다.
예를 들어, 로봇이 특정 위치까지 이동해야 하는 경우 진행 상황(Feedback)을 주면서 결과를 반환해야 합니다.
📌 예제: action_tutorials_interfaces/action/Fibonacci
int32 order
---
int32[] sequence
---
int32[] sequence
- 목표(Goal): int32 order (계산할 피보나치 수열의 길이)
- 피드백(Feedback): int32[] sequence (현재까지 계산된 수열)
- 결과(Result): int32[] sequence (최종 계산된 수열)
ROS 2 Interface 확인 방법
✅ 1. 사용 가능한 인터페이스 목록 확인
👉 현재 ROS 2에 설치된 모든 인터페이스 목록을 출력합니다.
✅ 2. 특정 인터페이스 상세 보기
ros2 interface show std_msgs/msg/String
👉 std_msgs/msg/String의 데이터 구조를 확인합니다.