1261.66 행동 제어를 위한 추상화 계층
1. 추상화의 개념과 역할
추상화(abstraction)는 시스템의 복잡성을 관리하기 위해 세부사항을 은닉하고 본질적인 특성만을 노출하는 설계 기법이다. 행동 제어 시스템에서 추상화 계층(abstraction layer)은 상위 행동 로직이 하위 하드웨어 및 미들웨어의 구체적 구현에 직접 의존하지 않도록 중간 인터페이스를 제공한다(Dijkstra, 1968).
행동 제어를 위한 추상화 계층의 주요 목적은 다음과 같다.
- 복잡도 관리: 하드웨어, 통신, 알고리즘 등의 세부사항을 계층별로 분리하여 각 계층의 복잡도를 통제한다.
- 이식성 확보: 추상화된 인터페이스를 통해 행동 로직을 특정 하드웨어나 미들웨어에 독립적으로 유지한다.
- 변경 격리: 하위 계층의 변경이 상위 계층에 전파되는 것을 방지하여, 시스템의 유지보수성을 향상시킨다.
- 테스트 촉진: 추상화된 인터페이스를 모의 객체(mock object)로 대체하여, 행동 로직의 독립적 테스트를 가능하게 한다.
2. 행동 제어 추상화의 계층 구조
행동 제어 시스템의 추상화는 일반적으로 다음과 같은 다층 구조로 설계된다.
2.1 하드웨어 추상화 계층(HAL)
하드웨어 추상화 계층(Hardware Abstraction Layer, HAL)은 센서와 액추에이터의 물리적 특성을 은닉하고, 표준화된 데이터 인터페이스를 제공한다. HAL의 역할은 다음과 같다.
- 센서 추상화: 다양한 센서(라이다, 카메라, IMU 등)의 고유한 통신 프로토콜과 데이터 형식을 통일된 메시지 타입으로 변환한다.
- 액추에이터 추상화: 모터 드라이버, 서보, 유압 액추에이터 등의 제어 인터페이스 차이를 은닉하여, 상위 계층이 속도(velocity) 또는 위치(position) 명령만으로 액추에이터를 구동할 수 있도록 한다.
- 단위 변환: 하드웨어 고유의 원시 단위(raw unit)를 SI 단위계의 물리적 단위로 변환한다.
ROS2에서는 ros2_control 프레임워크가 HAL의 체계적 구현을 지원한다. hardware_interface 패키지는 SystemInterface, SensorInterface, ActuatorInterface의 추상 기반 클래스를 정의하며, 각 하드웨어에 대한 구체적 구현은 이 인터페이스를 구현하는 플러그인으로 제공된다.
2.2 기능 추상화 계층
기능 추상화 계층(Functional Abstraction Layer)은 로봇의 기본 기능(이동, 인식, 조작)을 추상화하는 계층이다. 이 계층은 하드웨어 추상화 계층 위에 위치하며, 행동 제어 계층에 기본 기능 단위의 인터페이스를 제공한다.
기능 추상화의 대표적 예시는 다음과 같다.
| 추상 기능 | 인터페이스 | 구체 구현 예시 |
|---|---|---|
| 이동(Navigation) | NavigateTo(pose) | 차동 구동, 옴니 구동, 다리 보행 |
| 인식(Perception) | DetectObjects() | YOLO 기반, PointNet 기반 |
| 조작(Manipulation) | GraspObject(target) | 흡착 그리퍼, 핑거 그리퍼 |
| 위치 추정(Localization) | GetCurrentPose() | AMCL, EKF, Visual SLAM |
이 계층의 설계에서 핵심은 인터페이스가 구현 방식이 아닌 기능적 목적을 표현하도록 정의하는 것이다.
2.3 행동 추상화 계층
행동 추상화 계층(Behavior Abstraction Layer)은 기능 추상화 계층 위에 위치하며, 로봇의 행동을 의미론적으로 추상화한다. 이 계층에서는 “문을 통과한다”, “물건을 집어 옮긴다”, “장애물을 우회한다” 등의 고수준 행동이 정의된다.
행동 추상화에서 각 행동은 다음의 공통 인터페이스를 준수한다.
- 초기화(Initialize): 행동 실행을 위한 전제 조건을 점검하고 내부 상태를 초기화한다.
- 실행(Execute): 행동의 주 로직을 수행하며, 주기적으로 호출되거나 이벤트 기반으로 구동된다.
- 상태 보고(Report Status): 실행 중, 성공, 실패, 취소 등의 상태를 반환한다.
- 종료(Terminate): 행동 실행을 종료하고 자원을 정리한다.
행동 트리의 BT::TreeNode 인터페이스와 유한 상태 머신의 상태(state) 인터페이스가 이 계층의 구체적 구현 사례이다.
2.4 임무 추상화 계층
임무 추상화 계층(Mission Abstraction Layer)은 최상위 계층으로, 고수준의 임무 목표를 행동 시퀀스 또는 행동 트리로 분해하는 기능을 제공한다. 사용자 또는 임무 관리 시스템이 “지점 A에서 물건을 수거하여 지점 B로 배달하라“와 같은 임무를 지시하면, 이 계층이 필요한 행동의 순서와 조건을 결정한다.
3. 추상화 계층의 설계 원칙
3.1 의존성 규칙
클린 아키텍처(Clean Architecture)에서 제시된 의존성 규칙(Dependency Rule)은 의존성의 방향이 항상 상위 계층(외부)에서 하위 계층(내부)으로만 향해야 한다는 원칙이다(Martin, 2017). 행동 제어 시스템에 이를 적용하면, 행동 추상화 계층은 기능 추상화 계층에 의존할 수 있으나, 기능 추상화 계층이 행동 추상화 계층에 의존해서는 안 된다.
3.2 단일 책임 원칙
각 추상화 계층은 하나의 명확한 책임만을 담당하여야 한다. HAL은 하드웨어 은닉만을, 기능 추상화 계층은 기능 단위의 인터페이스 제공만을, 행동 추상화 계층은 행동의 조율과 제어만을 담당한다.
3.3 인터페이스 분리 원칙
인터페이스 분리 원칙(Interface Segregation Principle, ISP)에 의해, 각 계층의 인터페이스는 사용자가 필요로 하지 않는 메서드에 대한 의존을 강제하지 않아야 한다(Martin, 2003). 행동 컴포넌트가 위치 추정 기능만 필요로 한다면, 전체 센서 시스템에 대한 인터페이스가 아닌 위치 추정에 특화된 인터페이스에만 의존하도록 설계한다.
4. ROS2에서의 추상화 계층 구현
4.1 ros2_control 추상화 체계
ROS2의 ros2_control 프레임워크는 하드웨어 추상화와 제어기 추상화를 체계적으로 구현한다. 이 프레임워크의 추상화 구조는 다음과 같다.
- 하드웨어 인터페이스:
hardware_interface::SystemInterface를 구현하여 로봇 하드웨어와의 통신을 추상화한다. - 제어기 인터페이스:
controller_interface::ControllerInterface를 구현하여 제어 알고리즘을 추상화한다. - 리소스 관리자:
ResourceManager가 하드웨어 리소스의 접근을 관리하고, 제어기와 하드웨어 간의 데이터 교환을 중재한다.
이 구조를 통해 하드웨어 구현과 제어 알고리즘 구현이 완전히 분리되며, 각각을 독립적으로 교체할 수 있다.
4.2 행동 서버 추상화
Nav2의 행동 서버(behavior server)는 행동 추상화의 실용적 구현 사례이다. nav2_core::Behavior 추상 기반 클래스가 행동의 공통 인터페이스를 정의하며, 구체적 행동(스핀, 후진, 대기 등)은 이 인터페이스를 구현하는 플러그인으로 제공된다.
이 추상화를 통해 행동 서버의 프레임워크 코드를 변경하지 않고도 새로운 행동을 추가하거나 기존 행동을 교체할 수 있다.
5. 추상화의 비용과 절충
추상화 계층의 도입은 시스템의 유연성을 향상시키나, 다음과 같은 비용을 수반한다.
| 비용 요소 | 설명 |
|---|---|
| 성능 오버헤드 | 계층 간 함수 호출, 가상 함수 디스패치, 데이터 변환 등에 의한 지연 증가 |
| 복잡도 증가 | 추상 인터페이스, 구체 구현, 팩토리 등의 추가적 코드 발생 |
| 디버깅 난이도 | 계층을 통과하는 제어 흐름의 추적이 어려워짐 |
| 학습 곡선 | 추상화 체계의 이해에 추가적 학습 비용 발생 |
따라서 추상화의 수준은 시스템의 요구사항에 따라 적절히 조절하여야 한다. 단일 로봇, 단일 하드웨어, 고정된 응용에서는 과도한 추상화를 회피하고, 다품종 로봇, 다중 플랫폼, 다양한 응용을 지원하는 시스템에서는 체계적인 추상화를 적용하는 것이 합리적이다.
6. 참고 문헌
- Dijkstra, E. W. (1968). “The Structure of the ‘THE’-Multiprogramming System.” Communications of the ACM, 11(5), 341–346.
- Martin, R. C. (2003). Agile Software Development: Principles, Patterns, and Practices. Prentice Hall.
- Martin, R. C. (2017). Clean Architecture: A Craftsman’s Guide to Software Structure and Design. Prentice Hall.