통신 프로토콜 변화: DDS와 RTPS 기반
ROS1에서는 자체 개발한 ROS_MASTER_URI
를 통해 노드 간 통신을 관리했지만, ROS2는 데이터 분산 서비스(DDS)와 실시간 퍼블리싱 구독(RTPS) 프로토콜을 표준으로 채택하였다. 이를 통해 ROS2는 기본적으로 분산 아키텍처를 제공하여 더욱 안정적이고 유연한 네트워크 통신을 가능하게 한다. ROS2에서의 DDS는 퍼블리셔와 서브스크라이버 간의 연결을 직접 처리하며, ROS_MASTER_URI
와 같은 중앙 관리 서버가 필요하지 않는다.
네이티브 멀티스레딩 지원
ROS1은 멀티스레딩 처리를 위한 별도의 설정이 필요하며, 멀티스레딩 성능이 제한적이다. 반면에 ROS2는 처음부터 멀티스레딩을 지원하도록 설계되었다. ROS2는 각 노드의 콜백 그룹을 통해 여러 개의 실행자를 활용하여 병렬 처리를 가능하게 한다. 실행자(executor)를 사용하면 각 노드가 다양한 콜백 함수를 별도로 처리할 수 있으며, 이를 통해 병렬 처리가 가능하다.
실시간 처리 지원
ROS1에서는 실시간 시스템을 구현하기 위한 지원이 제한적이었다. 그러나 ROS2는 실시간 시스템을 염두에 두고 개발되었다. ROS2는 우선순위 스케줄링 및 메모리 관리 등 실시간 기능을 향상시키기 위한 메커니즘을 제공한다. 실시간 시스템에서 중요한 요소 중 하나는 지연 시간(latency)을 줄이는 것이며, ROS2는 이를 위해 실시간 안전 큐와 메모리 할당을 제공한다.
크로스 플랫폼 지원
ROS1은 주로 Ubuntu에서만 실행 가능했지만, ROS2는 Windows, macOS, Linux 등 다양한 운영 체제를 공식적으로 지원한다. 이로 인해 더욱 폭넓은 개발 환경에서 ROS2를 활용할 수 있게 되었으며, 산업용 및 상업용 로봇 개발에 더욱 적합하게 되었다. 크로스 플랫폼 지원을 위한 빌드 시스템은 각 플랫폼에 맞는 CMake 파일을 사용하여 유연성을 보장한다.
노드 생명주기(Lifecycle)
ROS1에서는 노드가 시작되면 일반적으로 종료될 때까지 활성 상태로 유지되며, 명시적인 상태 관리를 지원하지 않았다. 반면에 ROS2는 노드의 생명주기(Lifecycle)를 관리하는 기능을 제공한다. 이를 통해 노드는 활성화, 비활성화 등의 상태를 가질 수 있으며, 특정 상태에 따라 노드의 동작을 제어할 수 있다.
ROS2의 QoS(품질 서비스) 정책
ROS1에서는 토픽 간의 통신 품질에 대해 세밀하게 제어할 수 있는 기능이 없었다. 그러나 ROS2에서는 DDS를 사용함으로써 QoS(품질 서비스) 정책을 통해 통신의 신뢰성, 지연 시간, 지속성 등을 세부적으로 설정할 수 있다. QoS 정책은 주로 퍼블리셔와 서브스크라이버 사이의 메시지 송수신 방식을 결정하며, 이를 통해 다양한 네트워크 환경에서 통신 성능을 최적화할 수 있다.
빌드 시스템의 변화
ROS1은 catkin
이라는 빌드 시스템을 사용했으나, ROS2는 colcon
이라는 새로운 빌드 도구로 전환되었다. colcon
은 멀티패키지 빌드 환경을 제공하며, ROS2는 여러 패키지를 병렬로 빌드할 수 있는 기능을 갖추고 있다. 이는 특히 대규모 프로젝트에서 빌드 시간을 크게 단축시킨다.
보안 기능의 향상
ROS1에서는 기본적으로 보안 기능을 제공하지 않았으며, 보안 통신을 구현하기 위해서는 별도의 네트워크 설정 및 보안 도구가 필요하였다. 반면에 ROS2는 보안성을 강화하여 SROS2라는 보안 확장 기능을 제공한다. SROS2는 DDS의 보안 표준을 기반으로 하여 노드 간 통신을 암호화하고, 인증서를 통한 인증 절차를 지원한다. 이를 통해 민감한 데이터를 처리하거나 보안이 중요한 환경에서 ROS2를 안전하게 사용할 수 있다.
파라미터 서버 및 동적 파라미터
ROS1에서도 파라미터 서버를 제공하였지만, ROS2는 더욱 강화된 파라미터 관리 기능을 제공한다. 특히, ROS2의 파라미터 서버는 각 노드가 개별적으로 파라미터를 관리하며, 동적으로 파라미터를 변경할 수 있는 기능을 지원한다. 이를 통해 실시간으로 노드의 동작을 변경하거나 파라미터를 조정할 수 있어, 시스템의 유연성이 크게 향상되었다.
분산 시스템 지원
ROS2는 ROS1과 달리 본질적으로 분산 시스템을 지원한다. ROS1에서는 모든 노드가 ROS_MASTER_URI
라는 중앙 노드를 통해 통신을 중계받아야 했기 때문에, 분산 환경에서 사용하기에 어려움이 있었다. 그러나 ROS2에서는 노드들이 DDS 프로토콜을 사용하여 직접 통신하므로, 중앙 집중식 네트워크 구성을 필요로 하지 않으며, 대규모 분산 시스템에서 더욱 효율적으로 동작할 수 있다.
Node-to-Node 통신 방식의 변화
ROS1에서는 노드 간의 통신이 주로 메시지 패싱을 통해 이루어졌으며, 이러한 통신 방식은 매우 단순한 구조였다. 그러나 ROS2에서는 보다 복잡하고 유연한 통신 구조를 지원하며, 노드 간의 데이터 전송 방식이 DDS 프로토콜을 기반으로 한다. 이는 퍼블리셔와 서브스크라이버 간의 통신뿐만 아니라 서비스와 액션을 통해 비동기 통신 및 상태 관리가 용이하도록 설계되었다.
액션(Action) 기반 비동기 작업 지원
ROS1에서는 퍼블리셔-서브스크라이버 패턴이나 서비스 호출 방식으로 노드 간 통신을 했지만, 비동기 작업에 대한 지원은 제한적이었다. ROS2에서는 액션(Action)이라는 새로운 개념을 도입하여 비동기 작업을 쉽게 처리할 수 있다. 액션은 퍼블리셔와 서브스크라이버보다 복잡한 상호작용을 지원하며, 액션 서버와 클라이언트를 통해 긴 시간 동안 진행되는 작업의 상태를 모니터링하고 제어할 수 있다.
런타임 구성 관리
ROS1에서는 런타임 중에 파라미터나 설정을 동적으로 변경하는 기능이 제한적이었다. 반면에 ROS2는 동적 파라미터 설정 및 구성 변경을 보다 쉽게 관리할 수 있다. 파라미터 서버를 통해 노드 간의 파라미터 공유와 설정을 실시간으로 변경할 수 있으며, 이를 통해 실행 중인 노드의 동작을 즉시 제어할 수 있다.