로봇 소프트웨어 구조 설계
📌 개요
- 구조 설계 = 코드 작성 전 "전체를 어떤 덩어리로 나누고 어떻게 연결할 것인가"를 정하는 것 → 개발 속도·시험 용이성·유지보수 비용을 좌우
- 로봇 고유의 구조 논쟁: "감지하고, 생각하고, 움직인다"를 어떻게 배치할 것인가
- 핵심 출제 포인트: 좋은 구조의 원칙(높은 응집·낮은 결합), 계층형 구조의 장점, 숙고형·반응형·혼합형 제어 구조 3대 패러다임(Sense-Plan-Act, 포섭 구조, 3계층)
📖 핵심 개념
구조(아키텍처) 설계란
- 구조(아키텍처) 설계 = 시스템을 모듈(부품)로 분할하고 모듈 사이의 관계와 인터페이스를 정의하는 상위 수준 설계
- 비유: 집의 방 배치·배관 설계에 해당 — 벽지 색(세부 구현)보다 훨씬 바꾸기 어려우니 먼저, 신중하게 정함
- SW 아키텍처의 일반론·분류는 로봇 소프트웨어 아키텍처 분류에서 다루고, 이 노트는 미들웨어 관점의 구조 원칙과 로봇 제어 구조를 다룸
좋은 구조의 원칙
- 모듈화(Modularity): 전체를 독립적인 기능 단위로 분할 — 분할 정복
- 높은 응집도, 낮은 결합도: 한 모듈은 한 가지 일에 집중하고(응집), 모듈끼리는 최소한으로만 의존한다(결합) — 상세 등급은 모듈화 프로그래밍
- 추상화와 정보 은닉: 내부 구현은 감추고 인터페이스만 공개 — 변경의 여파를 모듈 안에 가둔다
- 관심사의 분리(Separation of Concerns): 인지·계획·제어·UI처럼 서로 다른 걱정거리를 서로 다른 모듈에
- 표준 인터페이스: 모듈 교체·재사용이 가능하도록 연결 규격을 표준화
계층형 구조 (Layered Architecture)
- 로봇 소프트웨어의 기본 골격 = 계층
- 아래로 갈수록 하드웨어에, 위로 갈수록 작업 논리에 가까움
- 하드웨어 — 센서·모터
- 드라이버 / HAL — 하드웨어 접근을 함수로 추상화 (→ 펌웨어의 HAL과 같은 아이디어)
- OS / 미들웨어 — 자원 관리, 노드 간 통신
- 기능 모듈 — 인지, 위치인식, 경로계획, 모션 제어
- 응용 / UI — 작업 시나리오, 사용자 인터페이스
- 원칙: "위층은 아래층의 인터페이스만 사용한다"
- LiDAR 기종을 바꿔도 드라이버만 교체하면 위층이 그대로 동작 → 이식성과 교체 용이성이 계층화의 최대 이점
로봇 제어 구조의 3대 패러다임 (시험 단골)
로봇이 "감지(Sense) → 판단(Plan) → 행동(Act)"을 어떻게 조직하느냐에 대한 세 가지 접근이다.
① 숙고형 (Deliberative) — Sense-Plan-Act (SPA)
- 센서로 세계 모델(지도 등)을 만들고 → 최적 계획을 세운 뒤 → 실행하는 직렬 구조
- 장점: 전역적으로 최적의 계획 가능 (경로계획 등 복잡한 판단)
- 단점: 계획에 시간이 걸려 반응이 느리다 — 계획 중에 환경이 바뀌면 무용지물
② 반응형 (Reactive) — 행동 기반
- 세계 모델 없이 센서 입력을 행동에 직결하는 규칙들의 집합 ("장애물 감지 → 회피")
- 대표: 포섭 구조(Subsumption Architecture) — Brooks 제안. 행동(behavior)을 "장애물 회피 < 배회 < 목표 추적"처럼 계층으로 쌓고, 상위 행동이 필요할 때 하위 행동의 출력을 억제(subsume)·대체한다
- 장점: 매우 빠른 반응, 단순·강인
- 단점: 세계 모델이 없어 장기적·최적 계획 불가
③ 혼합형 (Hybrid) — 현대의 표준
숙고형의 머리와 반응형의 반사신경을 결합한 3계층(Three-layer) 구조:
| 계층 | 역할 | 시간 규모 |
|---|---|---|
| 숙고층(Deliberative) | 지도 기반 전역 계획, 작업 계획 | 초~분 |
| 실행층(Executive/Sequencer) | 계획을 행동 단위로 분해·중재, 상태 관리 | 수백 ms |
| 반응층(Reactive) | 센서 직결 실시간 행동 — 회피·정지 | ms |
전역 계획(숙고) + 지역 계획·회피(반응)의 협력 구조가 바로 이 패러다임의 실제 사례다.
데이터 흐름과 분산 구조
-
기능 관점에서 로봇 SW = 센서 → 인지 → 판단(계획) → 제어 → 구동 파이프라인
-
현대 미들웨어(ROS 등)는 각 단계를 독립 프로세스(노드)로 분산시키고 메시지로 연결
-
장점: 노드별 병렬 개발·개별 재시작 가능(부분 장애 격리), 언어 혼용(C++/Python), 여러 컴퓨터로의 분산 배치
-
주의: 통신 지연·오버헤드가 생기고, 이름 서버 같은 단일 실패점(Single Point of Failure) 이 생기지 않도록 설계해야 한다 (→ 로봇 미들웨어 구조 설계)
구조 설계의 표현과 문서화
- 설계는 그림과 문서로 공유되어야 함 — 블록 다이어그램(모듈과 연결), 데이터 흐름도(무엇이 어디로 흐르나), UML 다이어그램(→ 객체지향 소프트웨어 설계), 인터페이스 정의서(메시지·API 규격)
- "그림 없는 아키텍처는 없는 아키텍처"라는 말처럼, 표현은 설계의 일부
📊 다이어그램 · 수식
제어 구조 3대 패러다임 비교
flowchart TD
subgraph D["① 숙고형 (SPA)"]
S1["Sense"] --> P1["Plan
(세계 모델·최적 계획)"] --> A1["Act"]
end
subgraph R["② 반응형 (포섭 구조)"]
S2["Sense"] --> B3["행동3: 목표 추적"]
S2 --> B2["행동2: 배회"]
S2 --> B1["행동1: 장애물 회피"]
B3 -. "상위가 하위를 억제" .-> B2 -.-> B1
B1 --> A2["Act"]
end
subgraph H["③ 혼합형 (3계층)"]
DL["숙고층: 전역 계획"] --> EX["실행층: 분해·중재"] --> RL["반응층: 실시간 행동"] --> A3["Act"]
end로봇 소프트웨어 계층 구조와 데이터 흐름
flowchart LR
SEN["센서"] --> PER["인지
(위치인식·물체 인식)"] --> DEC["판단
(경로·작업 계획)"] --> CTR["제어
(모션 제어)"] --> ACT["구동
(모터)"]
MW["미들웨어: 각 단계를 노드로 분리하고 메시지로 연결"] -.-> PER & DEC & CTR🎯 핵심 요약 · 암기 포인트
✏️ 예상문제
1. 센서로 세계 모델을 구축하고 최적 계획을 수립한 후 실행하는 순차 구조로, 최적의 판단이 가능하지만 환경 변화에 대한 반응이 느린 로봇 제어 구조는?
① 숙고형(Deliberative) 구조 ② 반응형(Reactive) 구조 ③ 포섭(Subsumption) 구조 ④ 이벤트 구동 구조
정답 및 해설
정답: ① Sense-Plan-Act로 대표되는 숙고형 구조의 설명이다. 계획 수립에 시간이 걸리는 동안 환경이 바뀌면 계획이 무효가 되는 것이 약점이며, 이를 보완하려고 반응형과 결합한 혼합형이 등장했다.
2. 포섭 구조(Subsumption Architecture)에 대한 설명으로 옳은 것은?
① 정밀한 세계 모델을 만들어 전역 최적 계획을 수립한다 ② 행동을 계층으로 쌓고 상위 행동이 하위 행동을 억제·대체한다 ③ 모든 판단을 클라우드 서버에서 수행한다 ④ 반드시 지도가 있어야 동작한다
정답 및 해설
정답: ② 포섭 구조는 Brooks가 제안한 행동 기반(반응형) 구조로, "장애물 회피" 같은 기본 행동 위에 "목표 추적" 같은 상위 행동을 쌓고 필요할 때 상위가 하위 출력을 포섭(subsume)한다. 세계 모델·지도 없이 동작하는 것이 특징이므로 ①④는 반대다.
3. 혼합형(Hybrid) 3계층 구조에서 실행층(Executive) 의 역할로 가장 적절한 것은?
① 지도 기반의 전역 경로계획을 수행한다 ② 센서 입력에 ms 단위로 직결 반응한다 ③ 숙고층의 계획을 행동 단위로 분해하고 반응층을 중재한다 ④ 모터 전류 루프를 직접 실행한다
정답 및 해설
정답: ③ 실행층은 숙고층(계획)과 반응층(실시간 행동) 사이의 다리다. 계획을 실행 가능한 행동 시퀀스로 분해하고, 진행 상태를 관리하며, 두 층의 시간 규모 차이를 중재한다. ①은 숙고층, ②는 반응층의 역할이다.
4. 계층형 소프트웨어 구조에 대한 설명으로 옳지 않은 것은?
① 위 계층은 아래 계층의 인터페이스만 사용하는 것이 원칙이다 ② 하드웨어가 바뀌면 드라이버 계층만 교체하면 된다 ③ 관심사를 계층별로 분리해 유지보수성이 좋아진다 ④ 성능을 위해 응용 계층이 하드웨어 레지스터를 직접 조작하는 것이 권장된다
정답 및 해설
정답: ④ 계층을 건너뛴 직접 접근은 이식성과 정보 은닉을 깨뜨리는 안티패턴이다. 특별한 성능 요구가 있어도 인터페이스를 통해 해결하는 것이 원칙이며, 계층 건너뛰기를 허용하면 하드웨어 교체 시 응용 계층까지 수정해야 하는 상황이 된다.
5. 모듈 구조 설계의 방향으로 옳은 것은?
① 응집도는 높이고 결합도는 낮춘다 ② 응집도는 낮추고 결합도는 높인다 ③ 응집도와 결합도를 모두 높인다 ④ 응집도와 결합도는 품질과 무관하다
정답 및 해설
정답: ① 한 모듈은 한 가지 일에 집중하고(높은 응집), 모듈 사이 의존은 최소화한다(낮은 결합)가 모듈 설계의 대원칙이다. 응집도·결합도의 세부 등급은 모듈화 프로그래밍에서 다룬다.
🔗 관련 노트
- 로봇 미들웨어 구조 설계 — 이 구조를 실현하는 미들웨어
- 모듈화 프로그래밍 — 응집도·결합도의 상세 등급
- 로봇 소프트웨어 아키텍처 분류 — 아키텍처 스타일의 일반론
- 로봇 액추에이터 펌웨어 구조 — 펌웨어 쪽의 계층 구조(HAL)
- _MOC 로봇소프트웨어구조설계