# ROS2 Humble 개요: 기존 ROS2 버전과의 차이점 정리

#### 성능(Performance) 관련 주요 변화

ROS2 Humble에서는 통신 지연(latency)과 처리량(throughput)을 개선하기 위해 RMW 계층에서 일부 최적화를 진행하였다. 예를 들어, 다음과 같은 특징들이 추가되거나 개선되었다.

* **빠른 RTPS 구현체 개선** 기존 ROS2 버전에서 사용하던 Fast-RTPS(FastDDS) 구현체가 내부적으로 메모리 풀 관리 방식을 개선하여, 노드 간 다량의 토픽을 송수신할 때 발생하던 메모리 할당/해제 부담이 줄어들었다.
* **Cyclone DDS 최적화** Cyclone DDS에서도 $\mathrm{QoS}$ 정책 처리 시 발생하는 불필요한 상호 참조가 제거되어, 노드 간 통신 시 지연이 한층 낮아졌다.

이러한 변경으로 인해 특정 상황에서 전송 지연 시간을 10% 이상 절감할 수 있음을 공식 문서에서 언급한다. 그러나 모든 시스템에서 동일한 개선 폭을 보장하지는 않으며, 하드웨어나 네트워크 환경에 따라 달라진다.

#### 빌드 도구(Colcon) 및 의존성 관리 개선

* **Colcon 플러그인 확장** 기존 ROS2에서는 colcon을 통해 빌드를 수행할 때, 별도의 플러그인을 통해서만 빌드 파이프라인 자동화 기능을 활용할 수 있었다. Humble에서는 이러한 플러그인 구조를 다소 간소화하여 별도의 설정 없이도 빌드 및 테스트 과정을 좀 더 유연하게 설정할 수 있다.
* **의존성 관리 자동화** ROS2 Humble부터 CMakeLists.txt에서 패키지 의존성을 정의할 때, colcon이 이를 더 세밀하게 해석하여 중복되는 빌드 의존성을 자동으로 병합한다. 이를 통해 시스템 전체 빌드 시간이 줄어드는 효과가 있다.

개발자 입장에서는 기존 ROS2 버전에서 사용자 정의 스크립트를 써서 처리하던 과정 중 일부를 Humble에서 기본으로 제공함으로써, 빠르게 개발 환경을 구성할 수 있게 되었다.

#### QoS 설정의 유연성 증대

ROS2 Humble에서는 노드 레벨뿐 아니라 시스템 레벨에서 QoS를 일괄 설정할 수 있는 옵션이 추가되었다. 예를 들어, 매번 노드마다 QoS를 세밀하게 조정할 필요 없이 공통 설정 파일을 통해 다음과 같은 항목들을 일괄 지정할 수 있다.

* 히스토리(History) 버퍼 크기
* 신뢰성(Reliability) 모드
* 내구성(Durability) 모드

이를 통해 대규모 분산 환경에서 QoS 설정의 복잡도를 완화하고, 특정 오류 상황에서의 메시지 전달 안정성을 좀 더 쉽게 확보할 수 있다.

#### 보안(Security) 기능 강화

ROS2는 이전 버전부터 DDS 보안 스펙(DDS-Security)을 기반으로 인증서 관리와 데이터 암호화를 지원해 왔다. 하지만 Humble 버전에서는 다음과 같은 변화가 있었다.

* **노드 간 인증서 교환 방식 개선** 기존 ROS2 버전에서 SROS2 패키지를 이용해 생성·배포하던 인증서 체계를 좀 더 표준화하여, 노드를 추가하거나 제거할 때 필요한 인증서 교환 과정을 단순화하였다. 예를 들어, 인증서 생성 과정에서 요구되는 인자를 자동으로 채우거나, 배포 자동화를 위한 스크립트 기능이 향상되었다.
* **DDS-Security 플러그인 인터페이스 간소화** DDS 보안 플러그인을 교체하거나 업데이트할 때, 기존에는 내부 API 변경에 민감하여 노드를 재빌드해야 하는 경우가 많았다. 이제 Humble에서는 DDS-Implementation별 보안 플러그인의 인터페이스가 좀 더 일치화되어, 교체 시 발생하는 호환성 문제가 크게 줄어들었다.
* **정책(Policy) 세분화** 메시지 레벨보다는 주로 노드 또는 네임스페이스(namespace) 단위로 권한이 부여되던 기존 방식에서 나아가, 토픽 단위의 접근 제어 정책 설정이 좀 더 세밀해졌다. 이를 통해 특정 민감 데이터의 구독 권한을 제한하거나, 발행 가능 토픽을 엄격히 관리할 수 있다.

#### Launch 시스템 개선

ROS2 Humble의 `launch` 기능은 시스템 전체 구성을 코드로 정의하여 실행할 수 있게 해주는 핵심 요소 중 하나이며, 다음과 같은 차이가 있다.

* **조건부(conditional) 실행 로직 고도화** 기존에는 노드 실행 여부를 환경 변수나 파라미터에 따라 간단한 분기문(if문) 정도로만 제어할 수 있었다. 이제는 노드를 여러 개 그룹핑하고, 그룹 단위로 조건을 부여할 수 있으며, launch 파일에서 동적으로 다른 launch 파일을 불러오는 기능이 개선되었다.
* **파이썬 기반 DSL 확장** 파이썬 코드를 통해 launch 파일을 작성하는 방식이 보편화되면서, Humble에서는 DSL(Domain-Specific Language) 형태의 문법을 좀 더 풍부하게 지원한다. 예를 들어, 특정 노드가 종료되는 시점에 후속 노드를 기동하거나, 일련의 노드들이 모두 준비가 되었을 때만 다음 단계를 실행하도록 하는 로직을 간단히 추가할 수 있다.
* **로깅 및 디버깅 기능 보강** 런치 시점에 노드들이 어떤 순서로 실행되고, 어떤 이유로 종료·재시작되는지를 추적하기 위한 로그가 대폭 강화되었다. 과거에는 노드 실행 중 에러 원인을 찾으려면 개별 노드의 로그를 모두 확인해야 했으나, 이제는 launch 로그를 통해 전체 흐름을 일관성 있게 파악할 수 있다.

#### rclcpp와 rclpy 기능 확장

C++와 Python 기반의 ROS 클라이언트 라이브러리(rclcpp, rclpy)는 여전히 적극적으로 개선되고 있으며, Humble에서도 다음과 같은 부분에서 큰 변화가 있었다.

* **단일 노드에서의 콜백 그룹(CallBack Group) 동작 개선** 기존에는 콜백 그룹을 이용해 콜백들의 스레드 분산 처리나 실행 순서를 어느 정도 제어할 수 있었으나, 복잡한 시나리오에서는 기대대로 동작하지 않는 경우가 종종 있었다. Humble에서는 콜백 그룹 간 스케줄링 로직을 재작성하여, 여러 콜백이 동시 처리되는 상황에서 자원 경합을 줄이도록 최적화하였다.
* **Timer 기반 이벤트 관리 고도화** 주기적으로 실행하는 타이머 콜백(timer callback)이 동시에 여러 개 동작할 때, 시스템 부하가 높아져 콜백이 밀리는 문제가 있었다. 이제는 노드 내부에서 타이머 콜백의 최대 동시 실행 개수, 타이머 간 우선순위 설정 등을 일부 제어할 수 있는 API가 추가되었다.
* **Python 코루틴(Coroutine) 지원 개선** Python에서 async/await 기반 코드를 rclpy와 결합해 사용하고 싶어하는 요구가 있었는데, Humble에서는 이벤트 루프와 rclpy 사이의 스케줄링 충돌을 완화하는 개선이 이루어졌다. 이를 통해 ROS2 토픽/서비스 처리와 일반적인 asyncio 기반 로직을 병행하는 데 있어서 안정성이 향상되었다.

#### TF2 및 메시지 변환 유연성 개선

ROS2에서 좌표계 변환을 책임지는 TF2 라이브러리는 Humble에서 다음과 같은 변경점을 포함한다.

* **Lazy subscription 지원** 많은 노드가 TF 트랜스폼 정보를 구독할 때, 항상 동일한 주기로 전송되는 TF 데이터를 모두가 받아서 처리하는 것은 리소스 낭비가 될 수 있다. Humble부터는 **지연 구독**(lazy subscription) 형태가 일부 지원되어, 필요한 시점에만 TF 데이터를 전송해 효율을 높일 수 있는 방법이 제시되었다.
* **정밀 시간 스탬프(Precise Timestamp) 개선** TF2 변환 기록을 조회할 때 시간 동기화 문제로 인해 발생하는 미세한 오차를 줄이기 위해, 메시지에 포함되는 시간 스탬프의 해상도를 높이는 옵션이 추가되었다. 예를 들어, 기존에 나노초 단위 처리가 일부 RMW에서 호환되지 않았으나, Humble에서는 호환성이 좀 더 확보되었다.
* **메시지 변환(geometry\_msgs ↔ custom\_msgs) 자동화** 기존에는 geometry\_msgs 같은 표준 메시지 타입과 커스텀 메시지 타입을 상호 변환할 때, 별도의 변환 함수를 일일이 작성해야 했다. 이제는 메시지 정의에 따라 기본적인 변환 패턴을 자동 생성하거나, 반자동으로 작성해주는 스크립트가 TF2 패키지 내에서 제공된다.

#### 시뮬레이션(Simulation) 및 가상 테스트 환경 강화

ROS2 Humble은 시뮬레이션 도구와의 연계를 한층 개선하여, 개발자가 실제 로봇에 배포하기 전에 가상 환경에서 신뢰도 높은 테스트를 수행할 수 있도록 지원한다.

* **Ignition Gazebo 지원 정비** 기존 ROS2 릴리스에서도 Ignition Gazebo와의 연동 패키지가 존재했지만, 버전 차이로 인해 호환성 문제가 빈번히 발생했다. Humble에서는 Ignition 측 최신 버전에 맞춰 관련 플러그인을 재작성하고, 토픽·서비스·액션 인터페이스를 표준화하여 호환성을 높였다.
* **시뮬레이터 간 메시지 교환 표준화** Webots, CoppeliaSim, Gazebo 등 여러 시뮬레이터를 병행해서 사용하는 프로젝트가 늘어남에 따라, 멀티 시뮬레이터 환경에서 동일한 ROS2 메시지를 주고받는 데 필요한 어댑터들이 추가되었다. Humble부터는 다중 시뮬레이터 환경에서 토픽 이름이 충돌하지 않도록 기본 네임스페이스 규칙이 강화되었다.
* **자동화된 테스트 워크플로우** 시뮬레이션 상에서의 연속 통합(CI) 및 자동 테스트 기능이 확장되었다. 예를 들어, CI 파이프라인에서 특정 노드와 센서 모델을 시뮬레이션 환경에 로드하여, 주행 테스트·경로 계획·충돌 감지 등의 시나리오를 자동으로 검증할 수 있는 설정이 표준으로 제공된다.

#### 플랫폼 지원(Windows, macOS, Embedded Linux) 개선

ROS2는 여러 운영체제를 대상으로 빌드 및 실행이 가능하도록 설계되었는데, Humble에서는 아래와 같은 사항이 달라졌다.

* **Windows용 빌드 스크립트 보강** 기존에는 Windows 환경에서 ROS2 빌드를 위해 별도의 Python 패키지 버전을 엄격히 맞춰야 했고, 일부 CMake 옵션이 누락된 경우 빌드가 실패하곤 했다. Humble에서는 colcon이 Windows 환경 설정을 자동으로 감지하여 적절한 컴파일러 옵션을 적용하도록 개선되었다.
* **macOS에서의 성능 향상** macOS에서의 Node 스레드 스케줄링 성능이 저하되는 이슈가 보고되었는데, Humble부터는 rclcpp 내부에서 운영체제별 스레드 우선순위를 좀 더 세밀하게 제어한다. 이를 통해 고주파 센서 데이터를 빠르게 처리해야 하는 노드에서의 지연이 완화되었다.
* **임베디드 리눅스(Embedded Linux) 지원 개선** 리소스가 제한적인 임베디드 보드에서 ROS2를 실행하려면 다양한 최적화가 필수였다. 이번 버전에서는 마이크로 로보틱스나 IoT 기기용 경량 런타임 구성을 공식 문서화하여, rclcpp나 rclpy를 최소 의존성 모드로 빌드할 수 있도록 가이드를 제공한다.

#### Lifecycle Node 개선

ROS2는 로봇 시스템에서 노드의 **생성 → 구성 → 활성화 → 비활성화 → 종료** 단계를 명확히 분리하여, 상태 천이(transition)에 대한 제어를 가능하게 하는 Lifecycle Node 개념을 제공한다. Humble에서는 다음과 같은 변화가 있었다.

* **상태 천이 콜백(Transition Callback)의 예외 처리 강화** 예를 들어, “configure” 상태로 진입할 때 콜백에서 예외가 발생하면, 이전 버전에서는 단순히 에러를 뱉고 노드를 중지하기만 했다. 이제는 예외가 발생한 시점에 대한 로그가 좀 더 상세하게 기록되고, 필요하다면 자동으로 “unconfigured” 상태로 복귀하도록 설정할 수 있다.
* **Lifecycle Manager 노드 호환성 개선** 여러 노드가 동시에 Lifecycle을 사용하는 대규모 시스템에서, 각각의 노드가 비정상 동작할 때 전체 시스템이 교착(deadlock) 상태에 빠지지 않도록, 라이프사이클 매니저(lifecycle manager) 로직이 개선되었다. Humble에서는 매니저 노드가 각 노드의 상태를 주기적으로 모니터링하고, 오작동 시 재구성(reconfigure)을 자동으로 시도할 수 있다.
* **상태 전이(transition) 시점에서의 파라미터 업데이트** 기존에는 상태 전환 직전에 파라미터를 업데이트하기 어려웠다. 이제는 노드가 “configuring” 단계에서 새로운 파라미터를 받아들여, 곧바로 “active” 상태로 전환될 때 적용할 수 있도록 하는 로직이 강화되었다.

#### Real-time 지원 향상

실시간성 요구사항이 있는 로봇 시스템을 위해, Humble 버전에서 RT 커널 및 DDS 설정이 개선되었다.

* **실시간 커널(RT Kernel)과의 호환성 강화** Ubuntu RT 커널이나 RT PREEMPT 패치를 적용한 Linux 환경에서 ROS2 실행 시, 특정 DDS 구현체가 호환성 이슈를 일으키는 사례가 있었다. Humble에서는 Fast DDS와 Cyclone DDS가 실시간 커널에서의 쓰레드 우선순위 할당 정책에 좀 더 유연하게 대응하도록 개선되었다.
* **ROS 2 Executor의 실시간 스케줄링** rclcpp Executor가 콜백을 스케줄링하는 과정을 RT-safe하게 운영하기 위해, 우선순위 역전(priority inversion) 문제를 방지하는 락(lock) 메커니즘이 개선되었다. 또한, Node 간 콜백 그룹 단위로 세부적인 스케줄링 우선순위를 부여할 수 있는 옵션이 실험적으로 추가되었다.
* **DDS Transport 계층 최적화** 대용량 메시지를 RT-safe하게 전송하기 위해 DDS Transport 계층에서 멀티 버퍼링(multi-buffering)을 지원한다. 이를 통해 발행자가 데이터를 쓰는 동안 구독자가 해당 버퍼를 읽어갈 수 있어, 대기 시간이 감소한다.

#### 오버레이 워크스페이스(Overlay Workspace) 구조 개선

ROS2 Humble은 개발자가 서로 다른 버전의 패키지를 동시에 다루거나, 특정 기능만 별도 빌드하여 테스트할 수 있도록 오버레이 워크스페이스 기능을 확장하였다.

* **colcon overlay 명령 강화** 기존에는 오버레이를 구성할 때, 여러 개의 src 디렉토리를 수동으로 링크하거나, `$AMENT_PREFIX_PATH`를 복잡하게 설정해야 했다. 이제는 colcon 명령어가 오버레이 워크스페이스를 자동으로 인식하고, 우선순위를 지정할 수 있는 옵션을 제공한다.
* **빌드 캐시(build cache) 공유** 오버레이 워크스페이스 간에 공통으로 사용되는 메시지 또는 라이브러리가 있을 경우, 중복 빌드를 방지하기 위해 캐시를 공유할 수 있는 구조가 지원된다. 이를 통해 빌드 시간이 크게 단축되며, CI 파이프라인에서 효율적으로 사용할 수 있다.
* **멀티 아키텍처 지원** x86, ARM 등 서로 다른 아키텍처를 위한 크로스 컴파일 환경을 오버레이 형태로 구성하여, 동일한 코드 베이스에서 여러 플랫폼용 바이너리를 쉽게 빌드할 수 있도록 개선되었다.

#### 메시지 기록 및 재생(rosbag2) 개선

ROS2에서 데이터를 기록하고 재생하기 위한 표준 도구인 rosbag2가 Humble에서 다음과 같이 업그레이드되었다.

* **다양한 스토리지 백엔드 지원** 기존 sqlite3 외에도, PostgreSQL이나 MongoDB 같은 데이터베이스를 백엔드로 사용하는 플러그인이 추가되었다. 이를 통해 대규모 데이터셋을 체계적으로 저장·조회할 수 있다.
* **온라인 압축 및 분할(Compression & Splitting) 기능** 기존에는 녹화 완료 후에 별도의 툴로 압축을 진행하거나, 일정 파일 크기가 넘어가면 수동으로 분할해야 했다. 이제는 rosbag2가 실시간으로 압축을 수행하고, 설정된 크기 혹은 시간 간격에 따라 자동으로 분할된 파일을 생성할 수 있다.
* **재생 시 메시지 필터링** 녹화된 bag 파일을 재생하는 과정에서, 특정 토픽만 재생하거나 메시지의 시간 범위를 제한할 수 있는 옵션이 강화되었다. 예를 들어, $\mathbf{t} \in \[10 \text{ s}, 20 \text{ s}]$ 범위 메시지만 재생하도록 설정하거나, 특정 문자열 패턴을 포함하는 토픽만 골라낼 수 있다.

#### Navigation2(Nav2) 스택 개선

ROS2 Humble에서는 이동 로봇을 위한 내비게이션 스택(Nav2)이 한층 강화되었다.

* **플러그인 구조 정비** Nav2의 Behavior Tree, Costmap, Planner 등 내부 컴포넌트가 플러그인 방식으로 구성되어 있는데, Humble에서는 해당 인터페이스가 조금 더 명확히 정의되었다. 이를 통해 사용자가 새로운 전역·지역 경로 계획 알고리즘을 작성하거나, 장애물 회피 로직을 교체하기가 쉬워졌다.
* **멀티 로봇 지원** 여러 대의 로봇이 동시에 같은 지도에서 내비게이션해야 하는 시나리오가 점차 늘어남에 따라, Nav2가 같은 토픽·서비스 이름을 공유했을 때 발생하던 충돌을 방지하는 네임스페이스(namespace) 관리 방식을 정식으로 제공한다. 또한, 멀티 로봇 경로 계획 시 충돌 방지를 위한 토픽 모니터링 기능이 일부 실험적으로 포함되었다.
* **추가 샘플 구성** Humble에서 배포되는 Nav2 예제 중에는 AMCL(Adaptive Monte Carlo Localization), SLAM, 새로운 맵 서버(map server) 구성법 등 좀 더 복합적인 사례가 포함되어, 초보자가 Nav2를 테스트해 보기가 한층 수월해졌다.

#### MoveIt 2(Manipulation) 개선

ROS2에서 로봇 팔(Manipulator) 제어를 위해 사용되는 MoveIt 2 역시 Humble 버전에 맞춰 업데이트되었다.

* **충돌 검사(Collision Checking) 모듈 고도화** MoveIt 2는 로봇 팔이 환경과 충돌하지 않도록 실시간으로 검사하는 기능을 제공하는데, Humble에서는 FCL(Flexible Collision Library)을 좀 더 효율적으로 사용하도록 수정되어, 메시 충돌 모델의 처리 성능이 향상되었다.
* **OMPL 및 지정 탐색 알고리즘 통합** Motion planning 라이브러리인 OMPL(Open Motion Planning Library)와의 연동 과정에서, 특정 계획 알고리즘을 커스터마이징하거나 추가 플러그인을 개발하기가 용이해졌다. 예컨대, RRT\* 변형 알고리즘이나 PRM 변형 알고리즘을 간단히 등록할 수 있다.
* **ROS2 Actions 기반 제어** 이전 버전에서는 MoveIt 2가 Topic/Service 방식으로 동작하던 부분이 많았으나, Humble 업데이트를 통해 Action 인터페이스를 좀 더 적극적으로 활용한다. 이를 통해 로봇 팔이 목표 자세를 이동하는 과정을 단계적으로 추적·취소하기가 간편해졌다.

#### Diagnostics 및 헬스 모니터링

시스템 상태를 모니터링하고 문제 발생 시 조기 경보를 하는 Diagnostics 패키지가 개선되었다.

* **동적 동작 진단(Dynamic Diagnostics)** 기존에는 하드코딩된 진단 항목 위주로 모니터링했다면, Humble부터는 런타임에 새로 추가된 센서나 노드에 대해 동적으로 진단 노드를 등록할 수 있는 인터페이스가 제공된다. 따라서 확장 모듈을 연결해도 별도의 재시작 없이 바로 진단 대상에 포함시킬 수 있다.
* **분산 모니터링 지원** 복수의 로봇 또는 장비가 서로 다른 컴퓨팅 리소스에서 동작하는 경우, 진단 정보를 한 곳에서 수집해 통합 분석하기가 어려웠다. Humble에서는 Diagnostics 토픽을 브리지 형태로 전달해, 중앙 모니터링 노드에서 여러 시스템의 상태를 수집·시각화할 수 있다.
* **오류 상태 정의 표준화** “Warning”, “Error”, “Stale” 등으로 단순하게 구분되던 진단 레벨이, 각 노드 혹은 센서 종류에 맞춰 세분화될 수 있도록 헬스 모니터링 규약이 문서화되었다. 이를 통해 운영자가 문제가 발생했을 때 원인을 좀 더 빠르게 추적할 수 있다.

#### Parameter 이벤트 및 동적 재설정

ROS2에서는 노드의 동작 환경을 설정하기 위해 파라미터(Parameters)를 사용한다. Humble에는 다음 변화가 있다.

* **파라미터 이벤트 간소화** 노드가 자신이 구독하고 있는 파라미터에 대한 변경 사항을 실시간으로 감지하고 반영하도록 하는 메커니즘이 단순화되었다. 파라미터 이벤트 토픽의 이름이나 구조가 개선되어, 개발자가 직접 콜백을 등록하기 용이해졌다.
* **동적 재설정(Dynamic Reconfigure)의 ROS2 버전 발전** ROS1에서 사용하던 Dynamic Reconfigure와 유사한 기능이 rclcpp, rclpy에 추가되었다. 이를 통해 런타임에 노드가 사용하는 파라미터를 변경하면, 즉시 이를 노드 내부 로직에 반영할 수 있게 된다.
* **CLI(Command Line Interface) 보강** 명령줄에서 파라미터를 조회·설정하는 명령어(`ros2 param`, `ros2 run --param` 등)가 확장되었다. 예를 들어, 여러 파라미터를 한 번에 설정하거나, 파라미터 파일에서 특정 섹션만 적용하는 기능이 공식적으로 추가되었다.

#### 플러그인 아키텍처(Pluginlib) 개선

ROS2에서 공통된 인터페이스를 정의하고, 이를 구현하는 플러그인을 동적으로 로드할 수 있도록 도와주는 pluginlib 역시 업데이트되었다.

* **로딩 속도 최적화** 플러그인을 로드할 때 발생하던 불필요한 파일 시스템 탐색 과정을 줄여, 실제 로봇 환경에서 성능이 향상되었다. 특히, 많은 수의 플러그인을 등록해두고 있는 대규모 프로젝트에서 부팅 시간을 절감할 수 있다.
* **버전 관리 호환성** 서로 다른 버전의 플러그인이 혼재되어도 충돌이 일어나지 않도록, pluginlib에서 라이브러리 로드 시 버전 정보를 체크하고 경고를 출력하는 기능이 추가되었다. 이는 추후 플러그인 버전을 업그레이드할 때 의도치 않은 장애를 예방해준다.
* **테스트 유틸리티 제공** 새로 작성한 플러그인이 올바르게 동작하는지 테스트하기 위한 헬퍼(Helper) 클래스와 매크로가 추가되었다. 이를 통해 플러그인 로딩, 초기화, 인스턴스화 과정을 단위 테스트로 자동화할 수 있다.

#### ROS1-ROS2 브리지(Bridge) 기능 개선

ROS1과 ROS2를 혼합 운용해야 하는 상황이 여전히 많은 현실을 고려해, ROS1-ROS2 브리지 패키지도 Humble에 맞추어 업데이트되었다.

* **토픽 타입 자동 매핑** 기존 브리지 시스템은 토픽 타입을 수동으로 매칭해줘야 하는 경우가 많았으나, Humble 버전의 브리지는 빌드 시점에 자동으로 ROS1 메시지와 ROS2 메시지 타입을 매핑하여, 수동 설정 과정을 줄여준다.
* **서비스/액션(Services/Actions) 통합 개선** 브리지에서 서비스나 액션의 요청과 응답 형태가 정확히 일치하지 않으면 호환이 안 되는 경우가 발생했다. 이제는 인터페이스 정의 파일(.srv, .action)의 구조적 비교를 통해 차이를 자동으로 식별하고, 경고 혹은 오류를 발생시킴으로써 문제를 사전에 파악할 수 있다.
* **멀티 노드 브리지 시나리오** 여러 개의 브리지 노드를 동시에 실행해, 각 노드가 특정 토픽 집합만 다루도록 구성할 수 있다. 이를 통해 복잡한 네트워크 환경에서 브리지 노드 간 충돌을 방지하고, 서로 다른 QoS 설정을 적용해 운영할 수 있게 되었다.

#### micro-ROS 통합

리소스가 극도로 제한된 임베디드 장치를 위해 마련된 micro-ROS는 ROS2 Humble과 호환성을 한층 높였다.

* **RTOS(Real-Time Operating System) 호환성 확대** FreeRTOS, Zephyr, NuttX 등 다양한 RTOS에서 micro-ROS 에이전트를 동작시킬 수 있는 샘플 프로젝트가 추가되었다. Humble과 함께 제공되는 문서에서는 micro-ROS 환경 구성법을 단계별로 안내하여, 임베디드 플랫폼도 쉽게 구축할 수 있도록 돕는다.
* **메모리 프로파일링 도구 연동** 기존에는 임베디드 환경에서 micro-ROS의 메모리 사용량을 측정하기가 어려웠다. 이제는 micro-ROS 런타임이 동작하는 RTOS 레벨에서 메모리 사용량을 프로파일링해, ROS2와 연동된 프로젝트의 자원 사용 현황을 시각화해주는 툴이 제공된다.
* **DDS-XRCE 고도화** micro-ROS는 DDS-XRCE(Extremely Resource Constrained Environments) 프로토콜 위에 구축되는데, Humble에서는 XRCE 에이전트가 연결 끊김이나 타임아웃 상황을 좀 더 빠르고 확실하게 처리할 수 있도록 개선되었다. 이에 따라 통신 오류를 조기 감지하고 재연결 시도를 자동화한다.

#### Node Composition 및 컴포저블 노드(Composable Nodes)

ROS2는 노드를 프로세스 단위로 구동할 수도 있지만, 단일 프로세스 내에서 여러 노드를 합성(Composition)하는 기능도 제공한다. Humble에는 아래와 같은 변화가 있다.

* **런타임 합성 시 재구성 가능** 기존에는 컴포저블 노드를 런타임 중에 새로 추가·삭제하기 위해서는 별도의 매니저 노드를 기동하는 과정이 다소 복잡했다. Humble에서는 컴포저블 노드 매니저가 개선되어, 이미 실행 중인 프로세스 내에 노드를 삽입하거나 제거하는 절차가 간소화되었다.
* **자원 사용량 모니터링** 여러 노드가 하나의 프로세스를 공유하면 CPU·메모리를 어느 노드가 얼마나 쓰는지 구분하기가 어려웠다. 이제는 각 컴포저블 노드를 rclcpp 레벨에서 식별할 수 있도록 내부 ID가 부여되어, 자원 사용량을 좀 더 세분화해서 추적할 수 있다.
* **교착(Deadlock) 발생 가능성 완화** 하나의 프로세스 안에서 콜백들이 상호 간에 잠금(lock)을 걸어 교착 상태가 발생하는 문제를 줄이기 위해, 콜백 그룹과 실행 스레드 풀의 동작 방식을 정교하게 설계할 수 있는 옵션이 제공된다. 예컨대, 특정 콜백 그룹은 별도의 스레드 풀에서만 처리하도록 지정할 수 있다.

#### 모니터링 및 인스트루멘테이션(Instrumentation)

개발자가 ROS2 시스템을 디버깅하거나, 성능 특성을 측정해 최적화하기 위한 인스트루멘테이션 기능이 크게 향상되었다.

* **Tracepoints 및 LTTng 연동** Kernel 레벨에서 추적할 수 있는 이벤트(Tracepoint)를 rclcpp, rclpy에 연동하여, 노드 실행 단계, 메시지 송수신, 콜백 실행 시점 등을 정밀하게 기록할 수 있다. 이를 LTTng(Linux Trace Toolkit next generation)과 결합하면, GUI에서 시스템 동작 흐름을 시각적으로 분석 가능하다.
* **Statistical Events** 단순히 이벤트 발생 시점을 기록하는 데 그치지 않고, 통계적 분석을 위한 평균 처리 지연, 콜백 실행 간격, 토픽별 메시지 처리율 등을 자동으로 집계해주는 기능이 추가되었다. 이를 통해 시스템 병목 지점을 쉽게 파악할 수 있다.
* **플러그인 기반 계측** rclcpp API 호출부에 계측 로직을 삽입하려면 직접 코드를 수정하던 과거 방식에서 벗어나, 플러그인 형태로 rclcpp API 진입점에 후킹(hooking)할 수 있는 구조가 제공된다. 이로 인해 ROS2 자체를 포크(fork)하지 않고도, 커스텀 계측 로직을 주입할 수 있다.

#### 컨테이너(Container) 및 DevOps 환경 통합

ROS2 Humble는 Docker 등 컨테이너 기술과 CI/CD 파이프라인에 친화적인 구성이 강화되었다.

* **공식 Docker 이미지 체계 개편** ROS2 Humble 용 Docker 이미지가 multi-stage 빌드를 활용해, 런타임 이미지를 간소화할 수 있도록 설계되었다. 또한, 다양한 베이스 이미지를 제공해, x86, ARM 등 아키텍처별 선택지를 넓혔다.
* **CI 파이프라인 통합** GitHub Actions, GitLab CI 등을 이용해 ROS2 프로젝트를 자동 빌드·테스트·배포하는 데 필요한 샘플 파이프라인 설정 파일이 공개되었다. Humble에서는 colcon 및 launch를 자동 실행해 시뮬레이션, 유닛 테스트, 통합 테스트를 순차적으로 수행하는 예시를 쉽게 참조할 수 있다.
* **Kubernetes 연동** 로보틱스 시스템을 Kubernetes 클러스터 상에서 운영하려는 시도가 늘어나면서, ROS2 노드를 Kubernetes Pod로 배포할 때 필요한 Helm 차트 예시나 네트워크 설정 가이드가 추가되었다. 이는 대규모 로보틱스 서비스(RaaS) 아키텍처를 구축하는 데 도움이 된다.
