ROS2 : Node : 개념
Node(노드)의 정의
ROS2(로봇 운영체제 2)는 분산된 로봇 시스템을 구축하기 위한 미들웨어로, 그 핵심 구성 요소 중 하나가 바로 Node(노드)이다. Node는 독립적으로 실행되는 프로세스로, ROS2 네트워크 내에서 서로 통신하며 특정 작업을 수행한다. 각 Node는 특정 기능이나 역할을 담당하며, 로봇 시스템에서 다양한 센서 데이터 수집, 제어 명령 처리, 알고리즘 실행 등을 담당한다.
Node의 특성
Node는 ROS2에서 가장 기본적이면서도 중요한 구성 요소로서, 다음과 같은 주요 특성을 가진다.
독립적 실행: Node는 각기 별도의 프로세스로 실행되며, 다른 Node와 독립적으로 동작한다. 이는 시스템의 모듈성을 높여주며, 특정 Node에 문제가 발생해도 전체 시스템의 안정성을 보장할 수 있게 한다.
통신 가능성: Node는 토픽(Topic), 서비스(Service), 액션(Action)과 같은 ROS2의 통신 메커니즘을 통해 다른 Node와 정보를 주고받는다. 이를 통해 서로 다른 Node가 협력하여 복잡한 작업을 수행할 수 있다.
이름(Name)과 네임스페이스(Namespace): 각 Node는 고유한 이름을 가지며, 네임스페이스를 통해 Node의 이름 충돌을 피하고 시스템을 계층적으로 관리할 수 있다.
Node의 생명주기(Lifecycle)
ROS2에서는 Node의 상태를 관리하기 위해 Node 생명주기(Lifecycle)라는 개념을 도입했다. 이는 Node의 상태 전이와 관련된 이벤트를 명확하게 정의하고 관리할 수 있게 해준다. Node 생명주기는 다음과 같은 상태들로 구성된다.
Unconfigured: Node가 초기화되었으나, 아직 구성되지 않은 상태이다. 이 상태에서는 Node가 활성화되지 않으며, 외부와의 통신도 제한된다.
Inactive: Node가 구성은 되었지만, 활성화되지 않은 상태이다. 이 상태에서는 Node가 데이터 처리나 외부와의 통신을 수행하지 않는다. 그러나, 필요한 경우 활성화될 준비가 되어 있다.
Active: Node가 활성화된 상태로, 실제로 데이터 처리를 수행하며 외부와의 통신이 가능하다. 대부분의 기능적 작업이 이 상태에서 이루어진다.
Finalized: Node가 완전히 종료된 상태로, 더 이상 어떤 작업도 수행하지 않는다. Node가 비활성화되거나 종료될 때 이 상태로 전환된다.
Node의 구성 요소
ROS2 Node는 다양한 구성 요소로 이루어져 있으며, 각 구성 요소는 특정 기능을 수행한다.
Node 핸들(Node Handle): Node가 ROS2 네트워크에 접근하고, 토픽이나 서비스에 연결하는 데 사용되는 기본 객체이다. 이를 통해 Node는 자신이 필요한 자원에 접근하고, 다른 Node와 통신할 수 있다.
콜백 함수(Callback Function): Node가 특정 이벤트(예: 토픽 메시지 수신, 타이머 이벤트 발생)를 처리하기 위해 정의한 함수이다. 이 함수는 이벤트 발생 시 자동으로 호출되며, Node가 실시간으로 반응할 수 있게 한다.
스레드와 실행기(Executor): Node는 내부적으로 여러 개의 스레드를 사용할 수 있으며, 이들 스레드를 효율적으로 관리하기 위해 실행기라는 개념을 도입했다. 실행기는 Node 내에서 발생하는 다양한 콜백을 관리하고, 적절한 시점에 실행되도록 조정한다.
Node 간 통신
Node는 ROS2 네트워크에서 다양한 방식으로 다른 Node와 통신할 수 있으며, 이러한 통신은 시스템의 유연성을 높이고, 복잡한 작업을 분산 처리할 수 있게 해준다.
토픽(Topic): 토픽은 메시지 스트리밍을 위한 일대다(one-to-many) 통신 방식이다. Node는 특정 토픽을 발행(Publish)하거나 구독(Subscribe)함으로써 데이터를 교환할 수 있다. 이는 센서 데이터나 상태 정보를 다른 Node와 실시간으로 공유할 때 주로 사용된다.
서비스(Service): 서비스는 요청-응답(request-response) 패턴의 통신 방식으로, 하나의 Node가 요청을 보내면 다른 Node가 응답을 반환한다. 이는 특정 작업을 동기적으로 처리할 때 유용하다.
액션(Action): 액션은 긴 시간이 소요되는 작업을 비동기적으로 처리하기 위한 통신 방식이다. 요청 Node는 작업의 진행 상황을 주기적으로 확인할 수 있으며, 작업 완료 시 결과를 받을 수 있다. 이는 로봇 팔의 위치 제어와 같은 연속적이고 복잡한 작업에 적합하다.
Node의 확장성과 모듈성
ROS2의 Node는 독립적이고 모듈화된 방식으로 설계되었기 때문에, 시스템의 확장성과 유지 보수성을 크게 향상시킨다. 새로운 기능을 추가하려면 단순히 새로운 Node를 추가하면 되며, 기존 Node의 수정 없이도 시스템의 기능을 확장할 수 있다. 또한, 개별 Node의 오류가 전체 시스템에 영향을 미치지 않도록 설계되었기 때문에, 시스템의 안정성을 높일 수 있다.
관련 자료:
Last updated