# ROS2 Humble 지원 플랫폼 및 호환성

#### 지원 운영체제 (OS) 개요

ROS2 Humble은 여러 운영체제에서 동작 가능하도록 설계되었으며, 공식적으로 다음과 같은 운영체제를 지원한다.

* Ubuntu 22.04 (Jammy Jellyfish)
* Windows 10/11 (Visual Studio 2019 이상)
* MacOS (Homebrew 기반 빌드)
* RHEL 8 (기업용 리눅스)

여기서 **Ubuntu 22.04**가 가장 우선적으로 권장되는 배포판이며, ROS2 커뮤니티의 적극적인 지원을 받는다. RHEL 8은 기업 환경 중심으로 대규모 시스템에 채택하기 좋고, Windows 10/11은 데스크톱 환경이나 특정 산업용 시스템에서 활용하기도 한다. MacOS는 개발 편의를 위해 지원되고 있으나, 패키지나 의존성 관리는 Homebrew를 통해 수동으로 수행해야 할 때가 많다.

다만, 공식적으로 “지원”된다는 것은 ROS2 빌드와 기능 테스트가 주로 해당 운영체제에서 이루어지며, 배포와 보안 패치 등이 우선 제공된다는 의미다. 그 외의 리눅스 배포판(예: Debian, Fedora 등)에서도 ROS2 Humble 사용이 가능하지만, 일부 패키지 호환성 문제 또는 필수 의존성 부족 등의 이슈가 있을 수 있다.

#### 아키텍처 호환성

ROS2 Humble은 대표적으로 **x86\_64** 및 **ARM64**(aarch64) 아키텍처를 공식 지원한다. 다음과 같은 사례를 들 수 있다.

* **x86\_64**: 일반적인 데스크톱 및 서버 환경에 가장 널리 쓰이는 아키텍처로, Ubuntu 22.04 데스크톱/서버 에디션, Windows 10/11, RHEL 8 등과 조합해 사용된다.
* **ARM64 (aarch64)**: Nvidia Jetson 시리즈나 Raspberry Pi 4 (64비트 OS)와 같은 임베디드·로보틱스 플랫폼에서 활발히 활용되며, 실시간 프로토타이핑과 저전력/소형 기기에서의 활용성을 높인다.

특정 하드웨어 환경(예: ARMHF, PowerPC 등)에서도 ROS2 Humble을 빌드할 수는 있지만, 공식적으로는 Tier 3 수준의 지원으로, 핵심 개발팀 차원의 정기적인 테스트나 패키지 배포가 보장되지 않는다.

#### Tier 분류

ROS2에서 플랫폼과 아키텍처는 지원 정도에 따라 다음과 같은 Tier로 분류된다.

* **Tier 1**: 정기 빌드와 테스트가 이루어지며, 공식 바이너리 패키지가 제공됨. 이슈 발생 시 우선적으로 해결이 시도된다.
* **Tier 2**: 소스 빌드와 간헐적 테스트가 이루어지지만, 공식 바이너리 패키지는 제공되지 않을 수 있음. 커뮤니티 기여에 따라 지원 수준이 달라진다.
* **Tier 3**: 빌드 성공 여부 및 동작을 어느 정도 확인할 수는 있지만, 정기 테스트나 지원이 보장되지 않는다.

ROS2 Humble 기준으로, Ubuntu 22.04의 x86\_64 환경은 Tier 1에 속하며, Windows 10/11 x86\_64 환경, RHEL 8 x86\_64 환경, MacOS x86\_64 환경 역시 Tier 1 혹은 Tier 2 정도로 간주된다. ARM64(예: Nvidia Jetson) 플랫폼은 주로 Tier 2로 분류되며, 일부 디바이스는 제조사와 커뮤니티 지원 수준에 따라 실제 사용 체감이 달라진다.

#### 빌드 도구 및 컴파일러 호환성

ROS2 Humble은 내부적으로 C++14 이상을 사용하도록 설계되었으나, 실질적으로 주요 패키지와 툴체인이 **C++17**을 많이 활용한다. Linux(Ubuntu, RHEL) 환경에서는 **GCC 9 이상**(Ubuntu 22.04 기본 GCC 버전은 11)을 사용하는 것을 권장한다. Windows에서는 **Visual Studio 2019** 이상에서 제공되는 C++ 컴파일러(Visual C++ 14.2 계열)를 통해 빌드가 가능하며, MacOS에서는 **Clang** 계열 컴파일러를 활용한다.

**주요 의존 패키지 버전**

* **CMake**: 최소 3.10 이상(ROS2 내부에서는 3.16 이상을 권장)
* **Python**: ROS2 Humble은 Python 3.10 (Ubuntu 22.04 기본 버전)과 호환되도록 빌드된다.
* **Colcon**: ROS2 빌드 툴로 사용되며, Python 기반으로 동작한다.
* **VC++ Toolset** (Windows 한정): MSBuild와 통합하여 프로젝트 솔루션(.sln) 및 빌드가 진행된다.

일부 패키지나 예제에서 C++17 표준 라이브러리 기능(예: std::optional, std::variant 등)을 사용하는 경우가 있으므로, 가능한 최신 컴파일러로 빌드하는 것이 좋다. 또한, 여러 RMW(Robot Middleware) 구현체와 DDS(Domain Participant) 라이브러리 등도 각 플랫폼/컴파일러 버전에 맞춰 설치 및 빌드되어야 한다.

#### 실시간(Real-Time) OS 지원

ROS2 Humble은 실시간 애플리케이션에 대한 요구 사항을 염두에 두고 개발되었으며, **RT Linux**, **PREEMPT\_RT 패치**, **QNX** 등과 같은 실시간 운영체제(또는 실시간 커널 패치) 위에서 동작시킬 수 있다. 다만, 이러한 환경은 대부분 **Tier 3** 수준으로 간주되어, 빌드와 기본 동작이 어느 정도 확인되었을 뿐 정식 패키지나 정기 지원은 제공되지 않는다.

* **RT Linux (우분투 커널 패치)**: Ubuntu 22.04를 기반으로 PREEMPT\_RT 패치를 적용해 실시간성을 확보한 후 ROS2 Humble을 사용할 수 있다. 적절한 실시간 스케줄링 및 고급 튜닝이 필요하며, 주기적 스레드와 타이머, 콜백 스핀 등을 신중히 설계해야 한다.
* **QNX**: 일부 DDS 구현체(e.g., RTI Connext DDS)와 함께 사용되어 실시간 로보틱스 시스템에 적용할 수 있다. QNX 환경에서 ROS2를 구성하기 위해선 별도의 소스 빌드와 QNX Toolchain 설정이 필요하다.

이러한 실시간 OS 환경은 높은 신뢰성과 예측 가능한 응답 시간(Deterministic Response)을 요구하는 산업 또는 안전 분야에서 주로 활용된다. 하지만 ROS2 Humble 공식 바이너리는 실시간 OS용으로 사전에 빌드된 형태가 제공되지 않으므로, 사용자 혹은 해당 분야 기업의 추가 작업과 테스트가 필수적이다.

#### 임베디드 환경 및 micro-ROS

ROS2 Humble은 x86\_64, ARM64 등 데스크톱/서버급 아키텍처뿐 아니라, 보다 제한적인 임베디드 기기에서도 사용할 수 있다. 이를 위해 **micro-ROS**라는 확장 프로젝트가 존재하는데, FreeRTOS, Zephyr 등 초소형 실시간 OS 위에서 동작하는 ROS2 통신 스택의 서브셋을 제공한다.

* **micro-ROS**: 기존 ROS2와 호환되는 RMW(Robot Middleware) 계층을 최소화·경량화하여 마이크로컨트롤러(MCU) 급 시스템에서도 퍼블리셔, 서브스크라이버, 타이머 등의 ROS2 API를 사용할 수 있게 한다.
* **FreeRTOS, Zephyr**: micro-ROS가 주로 공식적으로 지원하는 임베디드 RTOS로, STM32 시리즈나 ESP32와 같은 임베디드 칩에서 구동 가능하다.
* **Transport 계층**: DDS(UDP/TCP) 대신 시리얼(Serial) 통신, CAN, 6LoWPAN 등의 제한된 링크 레이어를 사용하는 경우가 있으며, 이를 위해 micro-ROS Build System이 확장되어 있다.

일반 ROS2 노드와 마찬가지로 micro-ROS 노드 역시 **Graph**(토픽, 서비스, 액션 등)에 참여할 수 있지만, 전체 기능이 아닌 최소한의 메시징 서비스만 제공되는 경우가 많다. 임베디드 환경은 메모리나 CPU 리소스가 매우 제한적이므로, **특수 파티션** 및 **RMW 최적화** 등을 적용해 빌드한다.

#### Docker 및 컨테이너 기반 호환성

ROS2 Humble은 개발 환경을 독립적으로 유지하고, 의존관계를 일관되게 관리하기 위해 **Docker**, **Podman**과 같은 컨테이너 환경에서 실행될 수 있다.

* **공식 Docker 이미지**: ROS2 Distributions마다 Docker Hub에 제공되는 이미지가 있으며, Humble용 이미지는 Ubuntu 22.04 기반으로 빌드된다.
* **멀티스테이지 빌드**: 컨테이너를 사용할 때, 빌드와 실행 환경을 분리하여 이미지 용량을 줄이는 기법으로, 로보틱스 CI/CD 파이프라인에서 자주 활용된다.
* **Compose 파일 구성**: 단일 로보틱스 시스템에서 여러 컨테이너(예: 센서 드라이버, 시뮬레이션, 네비게이션 등)를 구동하기 위해 Docker Compose나 Podman Compose를 사용할 수 있다.

컨테이너 기반으로 개발하면 호환성 문제가 상대적으로 줄어들며, 다른 운영체제나 호스트 환경에서도 동일한 로보틱스 스택을 재현하기 쉽다. 네트워크 설정이나 udev 권한 설정, GPU(Passthrough) 설정 등은 추가 작업이 필요할 수 있으니, 실제 로봇 하드웨어와 연동 시 유의해야 한다.

#### DDS 구현체 호환성

ROS2 Humble은 **DDS (Data Distribution Service)** 기반의 통신 계층을 사용하며, 이를 추상화한 RMW(Robot Middleware) 레이어를 통해 여러 DDS 구현체를 선택적으로 사용할 수 있다. 주요 DDS 구현체와 호환 상태는 다음과 같다.

* Fast DDS (eProsima)
  * 기본 패키지에 포함되어, 별도의 설치 없이 사용 가능
  * 높은 성능과 다양한 기능 제공
  * 대규모 커뮤니티에서 비교적 활발히 유지·보수
* Cyclone DDS (Eclipse Foundation)
  * 비교적 가벼운 DDS 구현체로, 임베디드 환경 등에서 자주 쓰임
  * 커뮤니티 지원이 점차 확대되고 있으며, ROS2 패키지 테스트에서 정식 고려됨
* RTI Connext DDS (Real-Time Innovations)
  * 산업·국방 등 특수 분야에서 자주 활용되는 엔터프라이즈급 DDS
  * 라이선스 이슈가 있어, 기본 설치 후에도 별도 설정이 필요할 수 있음
* OpenSplice DDS (ADLINK)
  * 초기부터 ROS2와 함께 사용되던 DDS 구현체
  * 현재 ROS2 공식 패키지에서 우선순위가 낮아졌으나, 일부 기존 시스템에서 계속 사용

ROS2에서 DDS 구현체를 교체하거나 함께 빌드하려면, 다음과 같은 단계를 고려해야 한다.

1. **RMW Layer**: `$colcon build` 수행 시, `rmw_fastrtps_cpp`, `rmw_cyclonedds_cpp`와 같이 구현체별 RMW 패키지 설치 및 빌드
2. **QoS 프로파일 확인**: DDS마다 QoS 설정 옵션이 다르므로, `reliability`, `durability`, `deadline`, `liveliness` 등 파라미터를 프로젝트 요구사항에 맞춰 재설정
3. **성능/호환성 테스트**: 노드 간 통신, 데이터 손실, 지연, 세션 복구 등의 시나리오를 실제 로보틱스 애플리케이션에 적용해 시험

#### RMW 계층 선택 시 주의사항

* **빌드 충돌**: Fast DDS, Cyclone DDS 등 여러 구현체를 동시에 설치한 환경에서 빌드 시, `$RMW_IMPLEMENTATION` 환경 변수나 `colcon` 인자에 따라 적절히 RMW를 선택해야 한다.
* **미세 조정**: DDS 레벨의 설정파일(예: `.xml` 구성)을 수정해 성능이나 네트워크 환경을 튜닝할 수 있다.
* **Security (DDS-Security)**: DDS 구현체마다 보안 기능(암호화, 인증 등) 활성화 방식이 다르므로, SROS2 보안 사용 시 구현체와 버전을 주의 깊게 맞춰야 한다.

#### 배포판 수명 주기(LTS)와 호환성

ROS2 Humble은 **LTS(Long-Term Support) 버전**으로, 다음과 같은 기간 동안 핵심 업데이트와 버그 수정이 제공된다.

* 일반적으로 LTS 배포판은 **5년 내외**로 지원되며, Ubuntu 22.04 LTS 수명 주기와 맞물려 ROS2 Humble에 대한 일부 중요 패치가 함께 제공된다.
* RHEL 8과 같은 기업용 리눅스에서는, 배포판 유지보수 정책에 따라 ROS2 Humble 관련 보안 패치나 의존성 업그레이드가 다르게 적용될 수 있다.

LTS 기간 동안은 API나 ABI가 큰 폭으로 바뀌지 않으므로, **장기간 운용**하는 로보틱스 시스템에 적합하다. 다만, 일부 신규 기능이나 개선 사항은 차기 배포판(예: ROS2 Iron, ROS2 Rolling)에서만 제공되는 경우가 있어, 호환성과 기능성 사이에서 적절히 선택해야 한다.

#### ROS2 빌드 팜(Buildfarm)과 호환

오픈소스 커뮤니티 내에서 운영되는 **ROS2 빌드 팜**은 여러 플랫폼에서 정기적으로 ROS2 패키지를 빌드하고 테스트한다. 이 빌드 팜 결과는 ROS2 Humble 호환성과 패키지 상태를 확인하는 중요한 지표다.

* **빌드 배지(Build Badge)**: ROS2 레포지토리마다 CI 상태(예: GitHub Actions, Jenkins)를 통해 빌드 성공 여부와 테스트 통과율을 알 수 있다.
* **동적 링크(Dependency Graph)**: 빌드 팜에서 각 패키지 간 의존 관계가 업데이트되므로, 배포판 버전에 따른 호환성 충돌 여부를 빠르게 확인 가능
* **커뮤니티 보고서**: 빌드 환경, GCC/Clang 버전, Python 버전에 따른 에러 리포트가 공유되므로, 개발자가 패치나 PR을 통해 문제를 신속히 해결할 수 있다.

#### 호환성 테스트 접근 방법

플랫폼 및 아키텍처별로, ROS2 Humble이 제대로 동작하는지 점검하려면 다음 접근을 활용한다.

1. **Colcon Test**: `$colcon test`와 `--packages-select` 옵션으로 특정 패키지에 대한 테스트를 수행하여, 유닛·통합 테스트 결과를 확인한다.
2. **ROS2 Launch 테스트**: 실제 노드와 토픽을 띄우고 상호 통신을 확인하는 E2E(End-to-End) 테스트를 진행한다. 필요에 따라 Gazebo나 RViz 통합 테스트를 수행할 수 있다.
3. **네트워킹/보안 테스트**: DDS QoS 설정 변경, 방화벽 설정, VLAN 분리 환경, VPN 등에서 통신 오류나 데이터 손실이 없는지 검증한다.
4. **SysPerf 측정**: CPU/메모리 사용량, 레이턴시, 처리량을 정량적으로 측정하기 위해 `perf`, `htop`, `ros2 topic bw` 등 커맨드를 활용한다.
