ROS2 Humble의 주요 변경 사항
RMW 계층 구조와 DDS 관련 성능 개선
ROS2 Humble은 기존 ROS2 분기들보다 더 정교한 DDS 구현체 및 RMW 계층 최적화를 통해 다양한 시나리오에서 성능을 높이고자 한다. DDS 벤더별로 제공되던 기능이 제대로 호환되지 않던 문제를 해결하기 위해 RMW 계층에서 더 세밀한 QoS 설정이 가능하도록 설계되었으며, 내부적으로 중요 통신 경로를 간소화했다. 이러한 개선 사항 때문에 주어진 노드 간 메시지 교환 시 레이턴시가 줄어들고, 대역폭도 효율적으로 활용된다. ROS2 Galactic 이하 버전에서 Cyclone DDS, Fast DDS, Connext DDS 등을 활용할 때 발생하던 일부 비호환성 이슈나 성능 저하 문제는 ROS2 Humble에서 상당 부분 해소되었다. 사용자는 DDS 벤더의 선택에 제한을 크게 받지 않으면서도 보다 일관된 성능 특성을 기대할 수 있다.
DDS 계층 내부에서 리스트 구조를 최적화하여 노드 등록과 같은 내부 메타데이터 관리 기능이 개선되었다. 이로 인해 토픽을 다량 생성하거나 소멸할 때 지연이 누적되는 현상이 줄어들었다. 또한 RMW가 윗단에서 받은 메시지를 DDS 포맷으로 변환하는 과정이 단일화되어, 여러 타입서포트 옵션이 통합된 형태로 운영되도록 했다. 이를 통해 사용자가 사용자 정의 메시지 타입을 생성할 때 전보다 간단하게 빌드 과정을 구성할 수 있으며, DDS 레벨에서 요구하는 타입 인터페이스를 더 쉽게 맞출 수 있다.
QoS 정책 확장과 기본 설정 변경
ROS2 Humble에서는 신뢰성, 기간, 히스토리 설정 등에서 새로운 파라미터가 도입되거나 기존 값이 변경되어 다양한 로보틱스 애플리케이션에서 보다 세밀한 네트워크 트래픽 제어가 가능해졌다. 예컨대 QoS 프로파일 중 Default 설정으로 작동하는 항목들이 기존 버전과 달라져, 바로 업그레이드한 사용자 입장에서는 QoS 문제 때문에 기존 애플리케이션이 동작 예측에서 벗어날 수 있다. 이를 방지하기 위해 새로운 QoS 프로파일들이 제공된다. 특정 QoS 프로파일이 동작 중임을 시스템 레벨에서 모니터링할 수 있는 기능이 추가되어, 네트워크 트래픽이나 지연 특성 측정을 자동화하기에 더욱 용이해졌다.
이런 QoS 정책은 토픽 단위에서만 아니라 서비스, 액션 클라이언트, 노드 레벨 등에까지 파급되어, ROS2 애플리케이션 전반에서 QoS 전략을 일관되게 적용할 수 있다. 더 나아가, DDS가 아니더라도 다양한 RMW 구현에서 QoS 프로파일을 최대한 유사하게 해석할 수 있도록 표준화가 추진되는 경향이 있다. ROS2 Humble은 이 표준화 경향에 발맞추어 QoS 인터페이스를 정비하고 문서화도 더 명확히 하여, 초급 사용자가 QoS를 무심코 잘못 설정하여 통신 장애를 일으키는 실수를 줄이려는 노력이 담겨 있다.
시큐리티 아키텍처 개선
ROS2 보안 계층은 DDS Security 기반으로 동작한다. ROS2 Humble은 DDS Security 플러그인과의 연동 부분에서 에러 처리 로직과 인증 로직을 강화했다. 기존에는 DDS 보안 인증서(Certificate) 발급이나 키 재분배 등에 관한 설정이 노드 단위로 구동 중에 반영되기 어려웠고, 보안 채널이 엉키면 노드 간 통신이 급작스레 끊어지는 일이 발생했다. ROS2 Humble에서는 보안 매니저가 노드 단위가 아닌 워크스페이스 단위로 통합 운영될 수 있도록 개선되었다. 이를 통해 다수의 노드가 서로 다른 권한 레벨을 필요로 할 때에도 신속하게 적절한 인증서와 키를 분배할 수 있다.
이와 같은 시큐리티 아키텍처 개선에는 DDS Security 프로파일이 더욱 세분화된 부분도 영향을 주었다. 예컨대 ROS2 Humble은 DDS 측에서 지원하는 Plug-and-Play 식의 정책 변경을 지원하도록 설계되어, 특정 노드 그룹만 접근할 수 있는 특정 토픽을 운영하는 상황에서 액세스 제어가 더 유연해졌다. 보안 정책 충돌 시 경고를 보내주는 기능도 포함되어, 배포 환경에서 운영자 입장에서 네트워크 감시가 한층 수월해졌다.
ROS2 CLI와 빌드 시스템 개선
ROS2 명령줄 인터페이스(CLI)는 기존 버전에서도 노드, 토픽, 서비스 등을 바로 확인할 수 있는 기능을 제공해왔으나, ROS2 Humble에서는 CLI 패키지가 더욱 확장되어 러닝 타임 설정을 동적으로 반영할 수 있는 명령이 추가되었다. 예를 들어, QoS 설정을 CLI에서 실시간으로 변경하여 노드 재시작 없이도 테스트를 진행하는 식의 활용이 가능해졌다. 이러한 CLI 확장에는 내부적으로 빌드 시스템 CMake, colcon 등의 설정이 바뀌면서 가능해진 면이 크다.
빌드 시스템 부분에서는 반복적인 콜백 함수를 간소화하는 매크로가 추가되고, 소스 코드 디렉토리 구조를 분석하는 플러그인이 확장되어 ROS2 패키지를 좀 더 직관적으로 정의할 수 있게 되었다. 또한 여타 툴체인(예: cross-compilation)과의 호환성을 높이기 위해 CMake 설정이 전반적으로 재정비되었는데, 이는 임베디드 디바이스나 커스텀 보드를 대상으로 배포할 때 빛을 발한다. 특히 colcon mixin 기능이 업데이트되어, 워크스페이스별 최적화 플래그나 링커 설정을 보다 단순화된 방식으로 설정 가능하게 된 점도 주목할 만하다.
TF2와 메시지 구조 업데이트
TF2는 로봇의 좌표계 변환을 관리하는 중요한 프레임워크로, Humble 버전에서는 위상(graph) 변경과 연관된 TF 트리 업데이트 방식을 최적화했다. 기존에는 수십 개 이상의 링크를 지닌 복잡한 로봇에 대해 TF 트리의 변환 관계를 잦은 빈도로 갱신하면 불필요한 오버헤드가 발생했는데, Humble에서는 변환 트리의 잔존성(persistence) 관리를 효율화해 급격한 변환 업데이트가 있을 때만 부분적으로 계산을 진행하도록 최적화했다.
메시지 구조 역시 다양한 패키지에서 새롭게 정의된 메시지가 추가되었고, 기존 메시지에 필드가 확장되거나 deprecation 예고가 이루어지는 변화가 있었다. 예컨대 일부 센서 관련 메시지 타입에서 사용하던 레거시 필드가 사라지고, 대신 더 명확한 필드명이 들어가는 식이다. 이것은 상위 호환성을 갖도록 설계되었지만, Humble 이전 버전 메시지를 그대로 활용하는 패키지와의 연동 시 주의가 필요하다. 표준 메시지(sensor_msgs, geometry_msgs, nav_msgs 등)가 수정될 때마다 TF2나 Rviz, MoveIt 등 핵심 패키지들에서 변동 사항이 반영되어야 하는데, Humble은 이를 이미 반영한 호환 버전을 제공한다.
노드 생명주기와 로깅 시스템 강화
ROS2 Humble은 노드 생명주기(Lifecycle Node) 기능에서 상태 전이(transition) 과정 중에 발생할 수 있는 에러 처리를 더욱 세밀하게 구분했다. 이로써 노드가 활성화되거나 비활성화되는 시점에 예기치 않은 이벤트가 발생해도 로스하는 메시지를 최소화하고, 자동으로 에러 복구 상태로 전이하도록 선택할 수 있다. 따라서 멀티노드 시스템에서 어느 한 노드가 오작동했을 때, 다른 노드가 이를 감지하고 대처하는 로직을 간단히 구성할 수 있다.
로깅 시스템도 개선되어, ROS2 실행 시점에 기록되는 노드별 로그를 더 정교하게 필터링 가능하다. 별도의 구성 파일 없이 CLI나 파라미터 서버 등을 통해 실시간 필터를 적용할 수 있는 구조가 도입되었으며, 이는 ROS2 기반 대규모 시스템에서 로그 처리량이 급증하는 것을 방지하고자 하는 의도가 있다. 텍스트 로그 외에도 프로파일러가 생성하는 이벤트를 DB나 CSV 파일 형태로 내보낼 수 있어, Isaac Sim 같은 시뮬레이션 환경에서 대량의 센서 데이터를 재현할 때 성능 이슈를 파악하기가 수월하다.
예시 노드 간의 상호 작용
mermaid 차트를 통해 단순화된 노드 간 통신 구조를 시각화해보면 아래와 같다.
ROS2 Humble에서 Sensor Node가 더 잦은 빈도로 데이터를 발행해도 RMW 계층이 성능을 보장해주도록 DDS 최적화가 강화되었고, Localization Node가 TF2를 활용해 위치 정보를 잦은 빈도로 업데이트하더라도 전체 네트워크의 부하를 감당할 수 있는 QoS 설정이 새롭게 제공된다. Navigation Node는 QoS 설정에 따라 메시지를 누락 없이 수신하거나 필요한 경우 과거의 일부 메시지를 히스토리로부터 다시 읽을 수 있다. Motor Driver Node 측에서는 보안 인증이 걸려 있는 상태에서만 커맨드를 받도록 설정할 수도 있는데, 이는 ROS2 Humble에서 확장된 DDS Security 정책과 관련이 있다.
ROS2 Humble의 주요 변경 사항
실시간 특성 강화와 Executor 개선
ROS2 Humble은 다양한 로봇 현장에서 점점 더 중요해지는 실시간(real-time) 요구 사항을 보다 충실히 지원하기 위해 Executor 및 콜백 처리 로직을 최적화했다. 기존 ROS2는 Multi-threaded Executor나 Single-threaded Executor를 지원하여 콜백 처리 시점을 유연하게 제어했는데, Humble에서는 Executor 내부의 스케줄링 전략을 개선하고 WaitSet 구성 방법을 간소화하여 고정 주기 혹은 짧은 주기를 요구하는 노드에도 보다 안정적인 응답 시간을 보장하도록 설계되었다.
Humble 버전의 Multi-threaded Executor는 콜백 간 우선순위를 분리하거나, 콜백 그룹을 더 세밀하게 제어할 수 있는 구조가 부분적으로 반영되었다. 특히 DDS QoS와 연계하여 Deadline QoS나 Latency Budget QoS 같은 실시간 지표를 만족시키도록 Executor가 동작할 수 있게끔 확장되었으며, 이 과정을 운영 체제 레벨의 실시간 커널 스케줄링과 연동하기에도 한결 편해졌다.
Composable Node 구조 확장
Composable Node는 서로 다른 기능을 독립적으로 실행하는 노드를 하나의 프로세스 안에 묶어, 자원 사용 효율을 높이고 노드 간 통신 지연을 줄이는 방식이다. Humble 이전에도 이미 ROS2에서 제공되던 기능이었으나, Humble은 Node 라이프사이클이나 보안 정책을 고려하여 컴포지션을 구성할 때 주의할 점을 명확히 문서화하고, 런타임 동적 로딩(dlopen) 과정에서 발생할 수 있는 오류에 대한 처리 로직을 정비했다.
이를 통해 시스템 통합 시 각 노드를 독립적으로 띄울 수도 있고, 필요하다면 동일한 프로세스에 묶어 성능을 높일 수도 있다. Isaac Sim 같은 시뮬레이션 환경에서 수십 개 노드를 관리할 때, 일부 노드는 반드시 독립 프로세스로 분리해야 하며 다른 노드는 그룹화하는 것이 이점이 큰 경우가 발생한다. Humble에서 제공되는 Composable Node 구조 확장 덕분에 이러한 구조적 결정을 시스템 개발자가 더욱 유연하게 내릴 수 있다.
rosbag2와 데이터 로깅 기능 고도화
rosbag2는 ROS2 환경에서 센서, 토픽 데이터를 기록하고 재생하는 핵심 도구다. ROS2 Humble에서는 다양한 압축 알고리즘을 병렬로 적용하거나, 보안 모듈과 연동해 기록 중인 데이터를 암호화하는 기능을 개선했다. 데이터 양이 폭증할 때에도 로깅 성능이 급격히 떨어지지 않도록 I/O 스레드가 동적으로 확장되며, 기록 중에 각 토픽별 필터링을 수행해 특정 토픽만 발행 빈도를 줄여 기록할 수도 있다.
데이터 재생 시에도 QoS 정보를 함께 기록해두어, 재생 과정에서 원본 노드가 사용하던 QoS를 최대한 충실히 재현하려는 노력이 더해졌다. 예컨대 Transient Local QoS나 Keep All 이 활성화된 토픽에 대해서, 재생 시에도 같은 QoS 정책을 적용해 간헐적으로 누락되는 메시지 없이 재연할 수 있다. Isaac Sim에서 대규모 센서 데이터를 rosbag2로 저장한 뒤, 오프라인에서 SLAM 알고리즘을 재검증하는 워크플로도 이러한 개선된 로깅 기능이 있어서 더 견고해졌다.
Parameter 서버와 동적 파라미터 적용
ROS2 Humble은 노드 파라미터를 런타임에 변경하고, 이 변경 이력을 다른 노드에서 즉시 인지할 수 있도록 파라미터 이벤트 브로드캐스팅 성능을 높였다. 기존에도 rclcpp에서 제공하던 OnSetParameterCallback이나 rclpy의 파라미터 업데이트 메서드가 있었으나, Humble에서는 파라미터 상태 변화를 더 세밀히 구분하여 노드가 필요한 이벤트만 골라받을 수 있게 했다.
예컨대 Isaac Sim과 연동된 로봇 제어 노드에서 PID 제어 계수를 파라미터로 관리하는 경우, 시뮬레이션 중간에도 PID 값을 수정해 테스트를 반복할 수 있다. 파라미터가 변경되면 Parameter Event 토픽을 통해 연결된 각 노드가 알림을 받을 수 있으며, 이를 기반으로 내부 상태를 재설정하는 로직을 구성하기 쉽다. 이렇게 파라미터 서버와 동적 파라미터 이벤트가 확장됨으로써 로봇 운영 중 즉각적인 환경 적응이 훨씬 수월해진다.
메시지 타입 적응과 타입 협상 기능
Humble에서는 일부 RMW 구현체에서 제공하는 타입 협상(Type Negotiation) 기능을 표준화하려는 시도가 이루어졌다. 이는 서로 다른 노드가 동일한 토픽을 사용할 때, 가능한 메시지 타입 중에서 적절한 형태를 자동으로 선택하여 전송할 수 있게끔 도와주는 기능이다. 예를 들어, RGB 이미지를 전송할 때 노드 A는 압축된 JPEG 메시지 타입을, 노드 B는 Raw 이미지 메시지 타입을 기대하고 있었다면, Humble 이전에는 두 노드를 강제로 동일 포맷 중 하나로 맞추거나 브리지 노드를 별도로 두어야 했다.
이제 ROS2 Humble에서는 일부 DDS 벤더의 고급 기능을 연계하여, 두 노드가 공유 가능한 최적합 메시지 포맷을 프로토콜 협상을 통해 동적으로 맞출 수 있다. 아직 표준화가 완전히 완료된 기능은 아니지만, 대규모 시뮬레이션 환경이나 네트워크 대역폭이 제한된 상황에서 유용하다. Isaac Sim에서 고화질 시뮬레이션 이미지를 전송해야 하는 노드와, 다수의 온보드 컴퓨팅 노드가 동시에 연결되는 상황에서도 최적의 타입으로 전송 가능해진다.
Python API와 C++ API 동시 발전
ROS2 Humble은 C++ API(rclcpp)와 Python API(rclpy)가 동등한 수준으로 발전하도록 양쪽 모두에서 다수의 업데이트가 있었다. 기존 ROS2 버전에서 Python API는 특정 기능이 누락되거나 사용이 까다로운 경우가 있었지만, Humble에서는 이 격차가 상당 부분 해소되었다. 예컨대 Action 서버나 Client를 Python에서 구현할 때 QoS 설정과 시큐리티 설정을 직관적으로 매개변수화할 수 있게 되었고, C++에서 쓰이던 콜백 그룹 관리나 Allocator 기반 메모리 최적화 전략도 Python 쪽으로 일부 이식되었다.
뿐만 아니라, C++에서 템플릿 메시지 타입을 다루는 과정이 단순화되어, 상위 레벨에서 메시지 이름이나 헤더를 동적으로 주입해도 빌드 오류가 덜 발생하도록 개선되었다. 결과적으로 Isaac Sim의 Python 기반 노드가 C++ 기반 노드와 혼용되어 있는 하이브리드 시스템에서도, 동일한 API 컨벤션을 활용해 일관성 있게 개발 가능한 구성이 갖춰졌다.
예시: 고급 QoS 프로파일 지정
아래 예시 Python 코드는 ROS2 Humble에서의 고급 QoS 프로파일을 사용하는 기본적인 노드 구조다.
TRANSIENT_LOCAL 설정으로 인해 노드가 구독을 시작했을 때 이전에 발행된 메시지도 최대한 제공받을 수 있으며, KEEP_ALL 정책은 메시지 히스토리를 가능한 한 모두 보존하겠다는 의미다. 단, 시스템 자원을 고려해 depth나 버퍼 크기를 적절히 조절해야 한다. 이러한 QoS 정책 설정이 ROS2 Humble에서는 더욱 유연해졌으며, DDS 벤더별 호환성과 퍼포먼스가 한층 강화되었다.
ROS2 Humble의 주요 변경 사항
Launch 시스템 확장과 동적 설정
ROS2 Humble은 로봇 애플리케이션 구동 시 구성요소별 초기화 절차를 관리하는 Launch 시스템을 한층 유연하게 개편했다. 기존에도 launch 파일을 통해 노드와 파라미터, 환경 변수를 정의할 수 있었으나, Humble에서는 파일을 구조화하고 조건부(conditional) 로직을 더 다양하게 포함할 수 있도록 Python Launch API가 강화되었다. 예컨대 특정 노드가 성공적으로 실행되지 않으면 다른 노드의 구동을 지연시키거나, 노드가 출력하는 특정 로그 메시지를 트리거로 삼아 파이프라인의 다음 단계를 실행하는 식으로 더욱 정교한 플로우 제어가 가능해졌다.
Launch 시스템은 명령줄이나 환경 변수에서 동적으로 인자를 전달받고, 이를 기반으로 노드간 파라미터를 다르게 설정할 수 있다. 이를테면 시뮬레이션 환경인지 실제 로봇인지에 따라 토픽 이름이나 QoS 설정을 자동으로 달리 구성하는 스크립트를 간단히 작성할 수 있다. Isaac Sim과 연동 시, 시뮬레이터 내 가상 센서를 통해 데이터를 수신하는 노드들과 실제 하드웨어 센서를 구동하는 노드가 공존할 때, Launch 시스템을 통해 선택적으로 노드 집합을 불러오는 시나리오가 대표적이다.
Testing 및 디버깅 툴 개선
ROS2 Humble은 통합 테스트(Integration Test), 단위 테스트(Unit Test), 시스템 테스트(System Test)를 체계적으로 수행할 수 있는 환경을 확충했다. 기존에는 노드별 GTest나 pytest 코드를 작성해 각자 테스트하던 경우가 많았지만, Humble에서는 launch_testing 패키지를 더욱 발전시켜 여러 노드를 동시에 띄우고 메시지 교환을 확인하며 테스트 결과를 자동화하는 사례가 많아졌다.
데이터 플로우를 시각적으로 확인하는 ros2 doctor나 ros2 node list, ros2 topic echo 등이 한층 고도화되어, 실행 중인 노드나 토픽 정보 외에도 QoS 프로파일, 시큐리티 설정 여부, TF 트리 구조 등을 요약해 표시할 수 있다. 또한 ros2 lifecycle 명령을 통해 Lifecycle Node 상태 전이를 디버깅하고 문제 발생 시점을 세밀하게 추적할 수 있다. Isaac Sim에 연동된 대규모 멀티노드 시스템에서도 병목 구간을 찾는 데 도움이 되며, 문제 발생 시 대응 시간을 크게 단축할 수 있다.
멀티 플랫폼 호환성과 Win/Mac 성능 향상
ROS2는 원래부터 크로스 플랫폼을 지향해왔으나, Humble에 이르러 Windows나 macOS에서의 최적화가 더 이루어졌다. CMake, colcon 빌드 체계가 Windows 환경의 Visual Studio와 연동되어 발생하던 경로 이슈, 경로 길이 제한 문제 등이 완화되었고, macOS 환경에서 Homebrew나 독립 파이썬 환경을 구성할 때 생기던 링커 경로 충돌 문제도 해결되었다.
WinRT(Windows Runtime)와의 일부 기능 통합이 실험적으로 이루어져, 차후에는 Windows 앱 형태로 ROS2 노드를 좀 더 손쉽게 배포할 수 있으리란 기대도 있다. macOS 환경에서는 Metal API를 활용한 하드웨어 가속 시뮬레이션이나 이미지 처리를 시도하는 경우가 늘어나고 있어, 이를 위한 rclcpp와 rclpy의 API 수준 최적화가 일부 진행되었다. 결과적으로 Isaac Sim과 함께 멀티 OS 개발을 시도하는 팀이 더욱 자유롭게 운영 환경을 구성할 수 있다.
네비게이션과 MoveIt 2 생태계 개선
ROS2의 대표적 고수준 패키지로는 Nav2(네비게이션)와 MoveIt 2(로봇 매니퓰레이션)가 손꼽힌다. Humble 릴리스에 맞춰 이들 패키지가 업그레이드되며, 네비게이션 스택은 비용지도(Costmap)를 다루는 방식과 행동 트리(Behavior Tree) 구성이 정교화되었다. Nav2에서 Planner, Controller, Recovery Node 등이 모듈화되어 필요에 따라 독립적 프로세스로 띄울 수도, 하나의 컴포저블 노드 안에 통합할 수도 있다.
MoveIt 2는 3D 센서로부터 포인트 클라우드를 받아 충돌 검출(Collision Detection)을 수행하고 경로를 계획(Planning)할 때, TF2 업데이트나 노드 간 통신이 지연되면 로봇 팔이 올바른 경로를 구하지 못하는 문제가 있었다. Humble에서는 이 부분의 성능이 개선되어, 실시간에 가까운 반응성을 기대할 수 있다. Isaac Sim에서 복잡한 환경 모델을 불러오고 그 안에서 MoveIt 2를 테스트하는 시나리오에서도 멀티 스레드 처리와 QoS 최적화가 적용된 덕분에 경로 생성 중간의 통신 지연이 크게 줄어들었다.
마이크로-ROS와 임베디드 디바이스 지원
마이크로-ROS(micro-ROS)는 리소스가 제한적인 임베디드 디바이스에서 ROS2 스택의 일부 기능을 활용할 수 있도록 만들어진 확장인데, Humble 릴리스에 맞춰 이를 통합하는 시도가 활발해졌다. 마이크로컨트롤러(예: STM32 시리즈)나 RTOS(Real-Time Operating System) 환경에서 마이크로-ROS를 구동할 때, DDS 대신 특화된 RMW 구현체가 동작한다. 이때 QoS 정책이나 시큐리티 정책을 제대로 유지하기 위해, ROS2 Core에서 일부 교정 로직을 추가했다.
덕분에 임베디드 노드와 데스크탑/서버 노드가 하나의 ROS2 네트워크에서 보다 매끄럽게 협동할 수 있게 되었고, 메시지 타입 변환과정에서 발생하던 지연도 단축되었다. Isaac Sim과 결합해 가상 임베디드 디바이스를 테스트하려는 경우에도, 마이크로-ROS의 인터페이스를 시뮬레이션 환경에서 그대로 재현하는 수준까지 가능해졌다.
QoS 오버라이드(Override) 시스템
ROS2 Humble은 QoS 설정을 코드에서만 지정하는 것이 아니라, 런타임에 시스템 혹은 노드별로 QoS를 덮어쓸 수 있는 Override 시스템을 제공한다. 예컨대 특정 노드가 Default QoS를 사용하도록 작성되어 있어도, 실제 시스템 배포 시에는 Launch 파일이나 환경 설정을 통해 신뢰성(reliability)이나 내구성(durability) 등을 다르게 설정할 수 있다.
이는 대규모 시스템에서 여러 노드가 서로 다른 버전의 코드를 공유할 때, QoS가 충돌하는 문제를 예방하는 용도로 유용하다. Isaac Sim에서 센서 노드 수십 개를 띄워놓고, 각각의 센서 노드는 빠른 신뢰성 모드를 적용하고 다른 일부 노드는 Best Effort 모드를 쓰고자 할 때도, QoS Override 시스템을 활용하면 코드 수정 없이 런처나 YAML 설정만으로 손쉽게 조절 가능하다.
노드 그래프 인트로스펙션(Node Graph Introspection)
ROS2 네트워크에 포함된 노드, 토픽, 서비스, 액션, TF 등의 관계를 런타임에 분석하고 시각화하는 도구가 Humble에서 확장되었다. rclcpp와 rclpy 레벨에서 토폴로지(Topology) 정보를 조회하기 위한 API가 개선되어, 클라이언트 코드에서 동적으로 노드나 토픽을 발견하고 연결 상태를 진단하기가 더 쉬워졌다.
Isaac Sim에서는 시뮬레이터 내에서 노드 관계를 쉽게 확인할 수 있게끔 별도의 플러그인을 개발할 수도 있는데, Humble의 확장된 introspection API를 통해 노드 관계도, 토픽 연결 상태, QoS mismatch 등을 한눈에 파악할 수 있다. 이런 동적 분석 기능은 로봇 테스트베드나 시뮬레이션 환경에서 자율주행, 협동로봇, 군집로봇 등을 테스트할 때 매우 유용하다.
간단한 상태 추정 수식 예시
ROS2에서 빈번히 다루는 상태 추정(Estimator) 노드 구조를 단순화해서 표현하면, 시점 t에서의 상태 벡터를 $\mathbf{x}_t$, 제어입력을 $\mathbf{u}_t$라 할 때 다음과 같은 동작 방정식을 쓴다.
xt+1=f(xt,ut)yt=g(xt)\begin{align} \mathbf{x}_{t+1} &= f(\mathbf{x}_t, \mathbf{u}_t) \mathbf{y}_t &= g(\mathbf{x}_t) \end{align}
여기서 $\mathbf{y}_t$는 관측 벡터이며, 센서 노드가 퍼블리시하는 정보를 토대로 상태 벡터를 추정하게 된다. ROS2 Humble에서 TF2와 QoS가 개선되면서, 이 추정 프로세스가 훨씬 안정적으로 동작할 수 있게 되었음을 반영한다. 높은 주파수의 센서 데이터나 동시다발적 이벤트가 발생해도 RMW 계층이 과부하에 빠지지 않도록 QoS나 Executor를 튜닝할 수 있기 때문이다.
ROS2 Humble의 주요 변경 사항
docker 및 컨테이너화 지원 강화
ROS2를 docker 컨테이너 안에서 실행하는 것은 각종 의존성 충돌을 방지하고 손쉽게 배포 환경을 재현하기 위해 흔히 사용되는 방식이다. ROS2 Humble에서는 docker 이미지를 더욱 간소화·최적화함과 동시에, 멀티 스테이지 빌드를 통한 용량 절감 기법이 공식 문서로 소개된다. 빌드 시 colcon, CMake, Python 환경 등을 컨테이너 내부에서 일관성 있게 사용하도록 베이스 이미지를 구성하고, ARM 아키텍처나 NVIDIA GPU가 포함된 시스템을 위한 변형 이미지도 쉽게 작성할 수 있도록 예시 스크립트들이 정비되었다.
컨테이너 환경에서 DDS 브로드캐스팅, 보안 인증서 관리, QoS 설정 등을 자동화하기 위해 여러 docker-compose 설정 예시가 제공되는데, 마스터리스 구조인 ROS2 특성상 같은 네트워크 브릿지 안에서 DDS 트래픽이 잘 흘러가도록 유니캐스트·멀티캐스트 포트를 열어두어야 한다. Humble에는 이러한 설정값을 launch 파일이나 RMW 구현체 설정과 연동하기가 한층 수월하게 정리되어 있다. Isaac Sim과 같은 대형 시뮬레이터를 도커 환경에서 실행할 때에도, 로컬 호스트와 GPU 자원을 공유하거나 VNC/SSH로 접속해 그래픽 시뮬레이션을 구동하는 사례가 많아지고 있어, 이러한 컨테이너 지원 강화가 더욱 중요해졌다.
sros2 기반의 보안 프로파일 자동 생성
ROS2 보안 계층을 구성할 때 sros2 패키지를 사용하면 DDS Security용 인증서, 키 등을 자동으로 생성 및 배포할 수 있다. ROS2 Humble에서는 sros2 툴체인이 개선되어, 노드별 권한(permissions)을 일괄적으로 발급하거나 특정 토픽만 읽기·쓰기 권한을 갖도록 제한하는 YAML 설정 파일을 좀 더 체계적으로 관리할 수 있다.
노드 그래프를 자동으로 분석해 접근해야 할 토픽, 서비스, 액션 목록을 추출한 뒤, 이를 기반으로 최소 권한 원칙(Principle of Least Privilege)에 부합하는 보안 파일들을 자동 생성하는 기능이 추가된 것도 특징이다. 이를 활용해 Isaac Sim 내 로봇들이 서로 다른 시큐리티 정책을 가질 수 있다. 예컨대 Lidar 데이터는 특정 측정 노드만 읽을 수 있도록 하거나, 중요한 제어 토픽은 관리자 계정에서만 발행 가능하게 설정해두는 식으로 구성이 가능하다.
Event-driven 통신과 Wait-set 개선
ROS2는 이벤트 기반 통신 모델을 지원하기 위해 Wait-set을 활용한다. Humble 버전에서는 Executor가 내부적으로 Wait-set 구현을 최적화하여, 토픽이 준비(ready)되거나 타이머가 만료된 시점에 빠르게 콜백을 호출하는 구조를 가질 수 있게 되었다. 기존에는 Wait-set 관련 콜백이 동시에 여러 개 발생하면 스레드 컨텍스트 스위칭이 잦아져 성능 저하가 생길 가능성이 있었으나, Humble에서는 이를 스레드풀(Executor에 의해 관리되는 스레드들)과 묶어 효율화했다.
ROS2 노드를 작성할 때 사용자 입장에서 Wait-set을 직접 다룰 일은 많지 않지만, 실시간 성능이 중요한 환경에서 필요한 경우 직접 Wait-set을 구성해 초미세한 단위로 이벤트를 처리하도록 설정할 수도 있다. 이때 QoS 프로파일에서 Deadline QoS와 결합하면, 특정 주기 내에 반드시 처리해야 하는 이벤트가 누락되지 않도록 보장할 수 있다. Isaac Sim에서는 고속 충돌 감지나 고주파 센서 데이터를 다루는 노드가 이런 기능을 적극 활용할 수 있다.
Cyclone DDS, Fast DDS 등 DDS 벤더 업데이트
ROS2 Humble은 주로 Cyclone DDS나 Fast DDS를 사용하는 사례가 많으며, Connext DDS, OpenSplice DDS도 여전히 지원된다. Cyclone DDS는 다양한 실시간 환경에 최적화되어 있고, Fast DDS는 대규모 메시지 전송 시 우수한 성능을 보이며, Connext DDS는 산업용으로 검증된 안정성이 강점이다. 이 중 Cyclone DDS와 Fast DDS가 Humble 릴리스에서 많은 업데이트를 받았다.
Cyclone DDS의 경우 Discovery 단계에서의 멀티캐스트 트래픽을 줄이기 위해 파라미터가 확장되었으며, RT OS나 임베디드 환경 지원을 위한 RT Priority 기능이 강화되었다. Fast DDS는 Shared Memory Transport 기능이 정비되어, 동일 머신에서 노드 간 대용량 데이터를 빠르게 교환할 수 있다. 이러한 벤더별 개선 사항은 대부분 RMW 계층을 통해 투명하게 반영되므로, 사용자는 필요에 따라 벤더를 선택하고 QoS 튜닝만 조금 다르게 진행하면 된다.
Callback 기반 vs. Nodelet(Composable Node) 기반 성능 비교
과거 ROS1 시절에는 노드렛(Nodelet)이라는 개념으로 여러 노드가 같은 프로세스 내에서 Zero-copy 공유 메모리를 통해 데이터를 주고받았다. ROS2에서는 Composable Node가 유사한 역할을 하지만, DDS QoS를 통해 노드 간 데이터를 주고받으므로 항상 Zero-copy가 성립하지는 않는다. Humble에서의 DDS Shared Memory Transport나 intra-process 통신 최적화를 통해 노드 간 메시지 교환 비용이 크게 줄었지만, 설계상 여전히 콜백 기반 통신과 Composable Node 기반 통신을 혼용할 수 있다.
Isaac Sim 같은 시뮬레이션 환경에서는 시뮬레이터가 퍼블리시하는 대용량 이미지 데이터나 포인트 클라우드를 여러 노드가 동시에 받아야 하는 경우가 잦다. 이때 Composable Node 구조를 취하면 프로세스 내에서 중간 복사 단계를 줄이기 유리하지만, 반대로 노드 간 보안 정책 분리를 엄격히 적용하거나 재시작·에러 격리 관점에서는 독립 프로세스의 이점이 크다. ROS2 Humble은 이런 상충되는 요구사항을 다양한 QoS·보안 설정과 함께 균형 잡아 적용할 수 있도록 옵션을 확장한다.
IDL과 유형 정의 체계 정비
ROS2에서 메시지 타입을 정의할 때 Interface Definition Language(IDL)를 활용하는데, Humble 버전에서는 IDL 인터페이스의 파서(Parser)와 코드를 자동 생성하는 로직이 정비되어 사용자 정의 메시지를 좀 더 자유롭게 작성할 수 있다. 특정 필드에 대한 디폴트값 지정이나 중첩 구조체를 선언할 때 발생하던 경고들이 줄어들었고, 다양한 언어 바인딩(C++/Python 등)이 안정적으로 이루어진다.
IDL 기반 코드 생성 과정이 RMW 계층에서 하나로 통합된 덕분에, Cyclone DDS나 Fast DDS 등 DDS 벤더별로 약간씩 달랐던 타입서포트 코드를 직접 수정해야 하는 부담도 완화되었다. Isaac Sim에서는 시뮬레이터 고유의 메시지 타입(예: 가상 센서, 충돌 정보, VR 환경 정보 등)을 정의하는 경우가 많은데, Humble에서 개선된 IDL 파이프라인을 통해 빠르고 안정적으로 메시지 패키지를 만들 수 있다.
profiling, tracing 도구의 성능 시각화
ROS2 Humble은 실시간 추적 및 트레이싱(Tracing) 기능을 강화하여, ros2_tracing 패키지 등을 활용해 노드 간 메시지 전달 지연, 콜백 처리 시간, 스레드 간 컨텍스트 스위칭 등을 세밀하게 분석할 수 있다. trace-callback, trace-publish, trace-subscribe 같은 추적 포인트들이 제공되어, 성능 병목 구간을 식별하기가 쉬워졌다.
이와 결합해 rclcpp, rclpy 레벨에서 프로파일 이벤트를 발생시키고, 이를 LTTng(Linux Trace Toolkit) 등으로 수집할 수 있다. Isaac Sim 환경에서 복잡한 물리 시뮬레이션과 로봇 소프트웨어가 동시 동작할 때, 어디서 레이턴시가 발생하는지 확인하기 위해 trace 결과를 그래프 형태로 시각화할 수 있는데, Humble에서 이 워크플로가 공식 문서로 제시될 만큼 표준화되었다. 실시간 운영체제와 결합할 때도 이 트레이싱 툴킷은 하드 실시간 조건을 만족하는지 검증하는 데 큰 도움을 준다.
Galactic에서 Humble로의 마이그레이션 고려
Galactic 이하 버전에서 Humble로 업그레이드할 때, QoS 기본 설정이나 메시지 타입, 빌드 시스템 설정이 변경되어 예상치 못한 동작을 일으키는 경우가 있다. 기존 코드가 QoS 프로파일을 명시적으로 지정하지 않고 Default QoS만 활용하던 상황에서 Humble의 Default QoS가 달라졌다면, 메시지 유실이나 데이터 동기화 문제를 겪을 수 있다. 이를 방지하려면 코드에서 QoS를 명시적으로 지정하거나, 환경 설정이나 Launch 파일에서 QoS Override 기능을 활용해야 한다.
또한 Humble에서 deprecation이 예고된 메시지 필드나 패키지 API가 있다면, 추후 릴리스에서 사라지기 전에 코드를 점검해두어야 안전하다. 마찬가지로 시큐리티 설정이나 rosbag2 압축 옵션이 변경되었을 때, 기존 스크립트나 yaml 파일이 호환되지 않는 이슈가 있으므로, 마이그레이션 가이드를 꼼꼼히 확인하는 것이 좋다. Isaac Sim과 같이 대규모 애플리케이션과 연결해두었던 경우, 시뮬레이터 플러그인 버전도 함께 맞춰야 하는 경우가 있으므로 일괄 업그레이드 절차를 계획적으로 진행해야 한다.
Rolling 릴리스와 Humble의 위치
ROS2는 Rolling이라는 지속적 업데이트 버전을 운영하고, 특정 시점에 안정화된 분기를 정식 릴리스(Foxy, Galactic, Humble 등)로 내놓는다. Humble은 LTS(Long-Term Support) 성격을 지니므로, 메인터넌스와 보안 패치가 상대적으로 오래 제공되며, 업계나 연구 기관에서 장기적으로 사용하기에 적합하다. Rolling에서 먼저 실험된 기능들이 Humble에 역으로 포함된 사례가 다수 있으며, 따라서 Humble은 최종 사용자 입장에서도 꽤나 안정적인 동시에 최신 기능을 폭넓게 수용한 장점을 지닌다.
다만 Rolling 버전과 Humble 버전 사이에는 API나 ABI가 소폭 달라질 수 있고, DDS 벤더나 RMW 구현체의 버전도 Rolling 쪽이 앞서가며 종종 호환되지 않는 문제가 있다. Isaac Sim을 비롯해 하위 버전에서 Rolling을 쓰는 다른 플러그인 생태계와의 연동 시, Humble 환경에서의 동작 상태를 사전에 테스트해야 한다.
Isaac Sim과의 통합
Isaac Sim은 물리 시뮬레이션과 AI 기반 로보틱스 기능을 제공하는 강력한 시뮬레이터다. ROS2 Humble과 Isaac Sim을 결합하면, 시뮬레이터 내 수많은 센서와 로봇 모델을 실제 로봇 소프트웨어와 유사한 방식으로 구동할 수 있다. Humble의 DDS 계층 최적화와 QoS 확장, 시큐리티 아키텍처 개선은 Isaac Sim처럼 대량의 센서 데이터를 다루는 환경에서 통신 안정성을 높이는 효과가 있다.
Isaac Sim 플러그인 쪽도 Humble 이후의 ROS2 버전과 동기화가 진행되어, TF2 트리나 Composable Node, Lifecycle Node 기능 등을 더 쉽게 연동할 수 있도록 제공된다. 따라서 다중 로봇 시뮬레이션이나 복잡한 협업 시나리오를 테스트할 때, Humble에서 확장된 QoS 정책이나 rosbag2 로깅 기능이 크게 유용하다. 시뮬레이터가 발행하는 대규모 토픽을 기록하거나, 네트워크 부하와 시뮬레이션 성능 간 균형을 조절하는 환경 구성도 한층 유연해졌다.
마지막 정리
ROS2 Humble은 DDS 계층 성능 개선, QoS 정책 확장, 시큐리티 강화, 빌드/테스트/디버깅 툴 전반의 고도화 등 로보틱스 현장의 요구 사항을 폭넓게 반영하고 있다. 이는 Isaac Sim과 같은 시뮬레이션 플랫폼과의 통합에서도 시너지 효과를 발휘하며, 실제 로봇 현장에서도 안정적인 장기 운영이 가능하도록 설계된 모습이 돋보인다.
Last updated