로봇: ROS2 아키텍처 (Architecture)

ROS2의 아키텍처 개요

ROS2(로봇 운영 체제 2)는 복잡한 로봇 시스템을 구성하는 모듈들을 효과적으로 연결하고 관리하기 위한 소프트웨어 프레임워크이다. ROS2는 ROS1의 한계를 극복하고, 실시간성, 보안, 다중 로봇 지원 등의 요구사항을 충족하기 위해 새롭게 설계되었다. ROS2 아키텍처는 ROS1과는 달리 분산 시스템을 지원하는 동시에, 높은 확장성과 유연성을 제공하도록 설계되었다.

DDS 기반의 통신 계층

ROS2의 가장 핵심적인 변화 중 하나는 통신 계층에서 DDS(Data Distribution Service)를 사용한다는 점이다. DDS는 분산 시스템에서 고성능, 실시간 통신을 지원하는 미들웨어 표준으로, ROS2의 Node 간 통신을 지원하는 기반 기술이다. DDS를 통해 ROS2는 메시지 전달의 신뢰성, 실시간성, 다중 송신자-다중 수신자 패턴 등을 효과적으로 처리할 수 있다.

  • RTPS (Real-Time Publish-Subscribe Protocol): DDS의 하위 프로토콜로, ROS2에서 사용되는 메시지 교환의 실제 표준이다. RTPS는 Node 간의 실시간 데이터 교환을 보장하며, QoS(Quality of Service) 정책을 통해 데이터 전송의 신뢰성과 지연 시간 등을 세밀하게 조정할 수 있다.

  • QoS 정책: ROS2에서 QoS 설정을 통해 각 메시지의 우선순위, 지연 시간, 데이터 손실 허용 범위 등을 지정할 수 있다. 이는 ROS2를 실시간 애플리케이션에 적합하게 만들어주는 중요한 요소로 작용한다.

Node와 네임스페이스

ROS2 아키텍처에서 Node는 기본적인 실행 단위로, 로봇 시스템의 개별 기능을 담당하는 독립적인 프로세스이다. 각 Node는 특정 기능을 수행하며, 필요에 따라 다른 Node와 통신하여 데이터를 교환하거나 협력 작업을 수행한다.

  • Node: ROS2에서의 Node는 독립적인 프로세스로 실행되며, 여러 Node를 하나의 프로세스에서 실행할 수 있는 컴포넌트 Node(Component Node)도 지원한다. 이러한 컴포넌트 Node는 실행 중 동적으로 로드되거나 언로드될 수 있어 유연성을 제공한다.

  • 네임스페이스: ROS2는 네임스페이스를 통해 Node와 토픽의 이름 충돌을 피할 수 있도록 한다. 네임스페이스는 계층적 구조로 되어 있으며, 복잡한 로봇 시스템에서 논리적인 구성과 관리가 용이하다.

중간 레이어: RMW (ROS Middleware)

ROS2 아키텍처에서 RMW(ROS Middleware)는 DDS와 ROS2 상위 계층 간의 인터페이스 역할을 하는 중간 레이어이다. RMW를 통해 ROS2는 다양한 DDS 구현체를 지원할 수 있으며, 애플리케이션 개발자가 DDS의 복잡한 세부 사항을 알 필요 없이 ROS2 기능을 사용할 수 있도록 해준다.

  • 다양한 DDS 지원: RMW는 다양한 DDS 구현체(e.g., Fast DDS, Cyclone DDS, RTI Connext)와의 호환성을 제공하며, ROS2 사용자는 특정 DDS에 종속되지 않고 필요에 따라 구현체를 변경할 수 있다.

  • 플랫폼 독립성: RMW는 ROS2가 여러 운영 체제와 하드웨어 플랫폼에서 동작할 수 있도록 하는 핵심 요소이다. RMW는 DDS 구현체에 대한 추상화를 제공하여, ROS2가 윈도우, 리눅스, 맥OS 등 다양한 환경에서 일관된 동작을 보장할 수 있게 한다.

Executor와 실시간 지원

ROS2의 Executor는 Node와 콜백 함수의 실행을 관리하는 중요한 구성 요소이다. ROS1에서의 스핀 루프와 유사한 개념이지만, ROS2에서는 보다 복잡한 스케줄링과 실시간성을 지원한다.

  • Executor: Executor는 ROS2의 콜백 실행 모델을 관리하며, 다양한 스케줄링 전략을 지원한다. 단일 스레드와 다중 스레드 실행을 모두 지원하며, 필요에 따라 실행 중인 작업의 우선순위를 조정할 수 있다.

  • 실시간 지원: ROS2는 실시간 시스템을 위한 다양한 QoS 설정과 Executor를 통해 실시간성을 보장할 수 있도록 설계되었다. 이를 통해 제어 지연이 허용되지 않는 로봇 애플리케이션에서도 효과적으로 동작할 수 있다.

라이프사이클 관리와 Node 관리

ROS2는 시스템의 안정성과 복원력을 높이기 위해 Node의 상태와 생애주기를 관리하는 메커니즘을 도입했다. 이 라이프사이클 관리 기능은 Node의 상태 전환을 제어하고, 예기치 않은 오류 상황에서도 시스템이 복구될 수 있도록 돕는다.

  • 라이프사이클 Node: ROS2는 Node의 상태를 초기화(Inactive), 활성화(Active), 비활성화(Inactive), 종료(Finalized) 등으로 구분하며, 각 상태에서 수행할 수 있는 작업을 명확하게 정의한다. 이는 복잡한 로봇 시스템에서 Node의 상태를 보다 체계적으로 관리할 수 있도록 한다.

  • Node Manager: ROS2는 Node의 라이프사이클을 관리하는 도구로 Node Manager(노드 매니저)를 제공한다. 이를 통해 시스템 개발자는 각 Node의 상태를 쉽게 모니터링하고 제어할 수 있다.

보안 아키텍처

ROS2는 ROS1에 비해 향상된 보안 기능을 제공하며, 이는 로봇 시스템의 안전성과 데이터 보호를 위해 필수적이다. ROS2의 보안 아키텍처는 DDS의 보안 확장 기능을 기반으로 한다.

  • DDS 보안 확장: DDS 보안은 인증, 권한 부여, 암호화, 접근 제어 등 다양한 보안 기능을 제공하며, ROS2는 이러한 보안 확장을 통해 네트워크 상의 데이터와 Node 간의 통신을 보호한다.

  • 네임스페이스 기반 보안: ROS2에서는 네임스페이스를 활용하여 특정 Node 또는 데이터 토픽에 대해 보안 정책을 적용할 수 있다. 이를 통해 민감한 데이터나 Node에 대해 세밀한 접근 제어가 가능하다.


관련 자료:

  1. Design, architecture, and philosophy of ROS 2, ROS2 Design Documentation, Open Robotics, accessed August 15, 2024.

  2. DDS and ROS 2 middleware layer, eProsima, accessed August 15, 2024.

  3. Security in ROS 2: Principles and architecture, ROS 2 Security Working Group, accessed August 15, 2024.

Last updated