로봇 미들웨어 구조 설계
📌 개요
- 미들웨어(Middleware) = 여러 회사의 센서·여러 언어로 짠 모듈·여러 대의 컴퓨터 등 이질적인 조각들을 하나의 로봇으로 묶어 주는 접착제
- ROS가 사실상 표준이 되며 로봇 개발의 생산성을 바꿔 놓음 → 시험도 이 배경 위에서 출제
- 핵심 출제 포인트: 미들웨어의 정의(OS와 응용 사이), 토픽·서비스·액션 3종 통신 패턴의 구분, 발행-구독의 장점, ROS 1과 ROS 2의 차이(마스터 유무·DDS·QoS), OPRoS·RT-Middleware 등 미들웨어의 국적·특징 매칭
📖 핵심 개념
미들웨어란 — OS와 응용 사이의 계층
미들웨어는 운영체제와 응용 프로그램 사이에서 분산 환경의 공통 서비스 — 통신, 이름 찾기, 데이터 관리 — 를 제공하는 소프트웨어 계층이다 (OS 자체는 로봇 소프트웨어 운영체제).
로봇에 미들웨어가 필요한 이유:
- 이기종 통합: 제조사·인터페이스가 제각각인 하드웨어와 모듈을 표준 방식으로 연결
- 분산 통신: 여러 프로세스·여러 컴퓨터에 흩어진 모듈 간 메시지 교환을 대신 처리
- 재사용: 위치인식·경로계획 같은 검증된 모듈을 표준 인터페이스로 가져다 쓴다 — 바퀴의 재발명 방지
로봇 미들웨어의 핵심 기능
- 통신 추상화: 소켓 프로그래밍 없이 메시지 발행·구독만으로 노드 간 통신
- 하드웨어 추상화: 센서 데이터·속도 명령 등의 표준 메시지 형식 — 어떤 LiDAR든 같은 형식으로 발행하면 위층은 동일하게 동작
- 컴포넌트(노드) 관리: 노드의 생성·발견·라이프사이클 관리 (→ 미들웨어 프로세스 관리)
- 이름 서비스·디스커버리: "속도 명령은 어디로 보내나"를 이름(토픽명)으로 해결
- 개발 도구: 시각화(RViz), 데이터 기록·재생(rosbag), 시뮬레이터 연동, 빌드·패키지 관리
통신 패턴 3종 세트 — 토픽, 서비스, 액션 (단골 출제)
| 구분 | 토픽 (Topic) | 서비스 (Service) | 액션 (Action) |
|---|---|---|---|
| 패턴 | 발행-구독 (Pub-Sub) | 요청-응답 | 목표-피드백-결과 |
| 방향 | 다대다, 단방향 스트림 | 1:1 양방향 | 1:1 + 진행 피드백 |
| 동기성 | 비동기 | 동기(응답 대기) | 비동기 + 취소 가능 |
| 용도 | 센서값, 속도 명령 등 연속 데이터 | 즉답 가능한 질의·설정 | 오래 걸리는 작업 (예: "A지점까지 이동") |
- 발행-구독의 장점: 발행자와 구독자가 서로의 존재를 몰라도 된다(낮은 결합) — 구독자를 추가해도 발행자는 코드 변경이 없고, 다대다 연결·확장이 쉽다
- 액션이 따로 있는 이유: 내비게이션 이동처럼 수십 초 걸리는 작업은 서비스(응답까지 블록)로는 부적합 — 진행 상황 피드백과 중간 취소가 필요하기 때문
대표 로봇 미들웨어
| 미들웨어 | 개발 주체 | 특징 |
|---|---|---|
| ROS 1 | 오픈소스 (미국 Willow Garage 시작) | 마스터(roscore) 가 이름 등록·발견을 중개. 도구·패키지 생태계로 사실상 표준이 되었으나 실시간·보안 취약, 개발 종료 |
| ROS 2 | 오픈소스 | DDS 기반 — 마스터 없는 분산 디스커버리, QoS 설정, 실시간·임베디드(micro-ROS)·보안 강화, 멀티플랫폼 |
| OPRoS | 한국 | 컴포넌트 기반 로봇 SW 플랫폼 (Open Platform for Robotic Services) |
| RT-Middleware (RTM) | 일본 AIST | RT-컴포넌트 모델, OMG RTC 국제 표준화 |
| OROCOS | 유럽 오픈소스 | 실시간 제어에 특화된 프레임워크 (제어 루프·기구학 라이브러리) |
ROS 1 → ROS 2: 무엇이 왜 바뀌었나
- 마스터 제거: ROS 1은 roscore가 죽으면 새 연결이 불가능한 단일 실패점이었다. ROS 2는 DDS의 분산 디스커버리로 노드들이 서로를 직접 찾는다
- DDS(Data Distribution Service) 채택: OMG 표준의 데이터 중심 발행-구독 미들웨어를 통신 기반으로 사용
- QoS(Quality of Service) 정책: 통신 품질을 계약처럼 설정 — 신뢰성(reliable: 재전송 보장 / best-effort: 최신 우선), 이력(history: 몇 개를 보관할지), 데드라인 등. 센서 스트림은 best-effort, 명령은 reliable처럼 데이터 성격에 맞게 고른다
- 실시간 지원 강화, MCU용 micro-ROS, 보안(암호화·인증) 내장, Windows 등 멀티플랫폼
미들웨어 구조 설계 시 고려사항
- 실시간성: 미들웨어 통신은 지연 변동이 있으므로, 하드 실시간 제어 루프는 미들웨어를 경유시키지 않고 하위 제어기(펌웨어)에 둔다 (→ 로봇 액추에이터 펌웨어 구조)
- 확장성: 노드·센서 추가 시 구조 변경이 없어야 한다 (발행-구독의 강점)
- 이식성·상호운용성: 표준 메시지·표준 인터페이스 준수
- 자원 제약: 임베디드 보드에서는 경량 구성(micro-ROS 등) 검토
- 단일 실패점 제거와 노드 감시·재시작 체계
📊 다이어그램 · 수식
미들웨어의 위치와 발행-구독 구조
flowchart TD
subgraph STACK["소프트웨어 스택"]
APP["응용: 작업 로직"] --> MW["미들웨어: 통신·발견·도구"] --> OS["OS (Linux 등)"] --> HW["하드웨어"]
end
subgraph PUBSUB["발행-구독 (토픽) 통신"]
L["LiDAR 노드
(발행자)"] -- "/scan 토픽" --> T(("토픽
/scan"))
T --> N1["위치인식 노드
(구독자)"]
T --> N2["충돌회피 노드
(구독자)"]
T --> N3["기록 노드
(구독자)"]
end(발행자는 구독자가 몇 명인지, 누구인지 모른다 — 결합도가 낮아 구독자 추가가 자유롭다)
통신 패턴 선택 기준
flowchart TD
Q["보내려는 데이터의 성격은?"] --> A{"연속 스트림인가?"}
A -- "예 (센서값·속도 명령)" --> TOPIC["토픽 (발행-구독)"]
A -- "아니오" --> B{"즉시 답이 오는가?"}
B -- "예 (설정·질의)" --> SRV["서비스 (요청-응답)"]
B -- "아니오 (수 초~분 소요,
피드백·취소 필요)" --> ACT["액션 (목표-피드백-결과)"]🎯 핵심 요약 · 암기 포인트
발행-구독 패턴의 장점은?::발행자와 구독자가 서로를 몰라도 되어 결합도가 낮고, 다대다 연결과 노드 추가·확장이 쉽다 ROS 1과 ROS 2의 가장 큰 구조적 차이는?::ROS 1은 마스터(roscore)가 이름 등록·발견을 중개(단일 실패점), ROS 2는 DDS 기반 분산 디스커버리로 마스터가 없다 DDS란?::OMG 표준의 데이터 중심 발행-구독 미들웨어 — ROS 2의 통신 기반이며 QoS 정책을 제공 QoS 정책의 대표 예 2가지는?::신뢰성(reliable/best-effort), 이력(history 보관 개수) — 데이터 성격에 맞게 통신 품질을 설정 OPRoS와 RT-Middleware는 각각 어디의 미들웨어인가?::OPRoS는 한국의 컴포넌트 기반 플랫폼, RT-Middleware는 일본 AIST 주도(OMG RTC 표준) 하드 실시간 제어 루프를 미들웨어에 두지 않는 이유는?::미들웨어 통신은 지연 변동(지터)이 있어 데드라인 보장이 어려우므로 하위 제어기 펌웨어에 둔다
✏️ 예상문제
1. 미들웨어(Middleware)에 대한 설명으로 옳은 것은?
① 하드웨어를 직접 제어하는 커널의 일부다 ② 운영체제와 응용 프로그램 사이에서 통신 등 공통 서비스를 제공하는 계층이다 ③ 응용 프로그램의 사용자 인터페이스를 담당한다 ④ 운영체제를 대체하는 소프트웨어다
정답 및 해설
정답: ② 미들웨어는 이름 그대로 "중간(middle)" 계층이다. OS의 기능(스케줄링·메모리)을 대체하지 않고 그 위에서, 응용들이 공통으로 필요로 하는 분산 통신·발견·데이터 관리를 제공한다.
2. "충전 스테이션까지 이동하라"처럼 수십 초가 걸리고, 진행 상황을 보고받다가 필요하면 중간에 취소해야 하는 명령에 가장 적합한 ROS 통신 패턴은?
① 토픽 (발행-구독) ② 서비스 (요청-응답) ③ 파라미터 ④ 액션 (목표-피드백-결과)
정답 및 해설
정답: ④ 액션은 장시간 작업을 위해 목표(goal) 전송 → 주기적 피드백 → 최종 결과의 구조를 갖고 취소(cancel)도 지원한다. 서비스는 응답이 올 때까지 기다리는 동기 호출이라 긴 작업에 부적합하고, 토픽은 응답·완료 개념이 없다.
3. 발행-구독(Publish-Subscribe) 통신 패턴에 대한 설명으로 옳지 않은 것은?
① 구독자는 발행자의 네트워크 주소를 직접 알아야 통신할 수 있다 ② 하나의 토픽을 여러 노드가 동시에 구독할 수 있다 ③ 발행자 코드를 바꾸지 않고 구독자를 추가할 수 있다 ④ 센서 데이터처럼 연속적으로 발생하는 스트림에 적합하다
정답 및 해설
정답: ① 발행-구독의 핵심이 바로 "서로를 몰라도 된다"이다. 발행자는 토픽 이름으로 발행할 뿐이고, 연결은 미들웨어(디스커버리)가 맺어 준다. 이 낮은 결합도 덕분에 ②③처럼 다대다 연결과 확장이 자유롭다.
4. ROS 2가 ROS 1과 달라진 점으로 옳은 것은?
① 마스터(roscore)의 역할이 더 강화되었다 ② 통신 품질을 설정할 수 없게 단순화되었다 ③ DDS를 채택하여 마스터 없이 노드들이 서로를 발견한다 ④ 리눅스에서만 동작하도록 제한되었다
정답 및 해설
정답: ③ ROS 2는 OMG 표준 DDS를 통신 기반으로 채택해 분산 디스커버리를 얻었고, 단일 실패점이던 마스터가 사라졌다. 또한 QoS 설정(②의 반대), 멀티플랫폼(④의 반대), 실시간·보안 강화가 이루어졌다.
5. 로봇 미들웨어에 대한 설명으로 옳지 않은 것은?
① ROS 2 — DDS 기반의 마스터 없는 분산 디스커버리 구조다 ② RT-Middleware — RT-컴포넌트 모델을 사용하며 OMG RTC로 표준화되었다 ③ OROCOS — 실시간 제어에 특화된 유럽의 오픈소스 프레임워크다 ④ OPRoS — 일본 AIST가 주도하여 개발한 컴포넌트 플랫폼이다
정답 및 해설
정답: ④ OPRoS(Open Platform for Robotic Services)는 한국에서 개발된 컴포넌트 기반 로봇 SW 플랫폼이다. 일본 AIST가 주도한 것은 RT-Middleware다. 미들웨어의 국적·특징 매칭은 단골 출제 유형이다.
🔗 관련 노트
- 로봇 소프트웨어 구조 설계 — 미들웨어가 실현하는 상위 구조 원칙
- 로봇 소프트웨어 운영체제 — 미들웨어가 올라서는 기반
- 로봇 구성 요소 간 통신 프로토콜 — DDS·토픽 아래의 실제 통신
- 미들웨어 프로세스 관리 — 노드(프로세스)의 기동·감시
- 로봇 소프트웨어 프레임워크 — 프레임워크 관점의 상세
- _MOC 로봇소프트웨어구조설계