이번 포스팅에서는 ROS2의 노드와, 노드의 데이터 통신 그리고 노드 관련 명령어에 대해서 알아볼 것이다.
💡 노드
노드(node)는 최소 단위의 실행 가능한 프로세스를 가리키는 용어로, ROS에서 최소한의 실행 단위로 기능하게 된다. 각 노드의 역할을 목적에 맞추어 세분화 시켜 각 노드들 간의 의존성을 줄이고, 독립성을 높여 재사용성을 강화하게 된다.
💡 메시지 통신
ROS 시스템에서는 수많은 노드들이 작동하므로, 노드 사이의 데이터 입출력이 피룡하다. 여기서 주고 받는 데이터를 메시지(Message)라고 하며, 메시지를 주고받은 통신 방식을 메시지 통신(Message Communication)이라고 한다.
💡 메시지
정수형, 실수형, 문자열과 같은 데이터 형태이며, 그 외에 간단한 자료구조 혹은 배열을 사용할 수 있다. 메시지를 주고 받는 방식에 따라서 토픽(topic), 서비스(service), 액션(action)으로 구분이 가능하다.
$ ros2 run <pkg_name> <node_name>
// 하나의 노드를 실행 가능함
$ ros2 run <pkg_name> <node_name> __node:=<new_name>
// 이런 식이면 동일한 노드를 서로 다른 이름으로 실행이 가능함
// 혹은 namespace를 변경하면 된다.
$ ros2 launch <pkg_name> <launch_file_name>
// 복수의 노드를 다양한 설정을 통해서 실행 가능
이 후 노드 사이의 관계는
$ rqt_graph
명령어를 통해서 시각화 가능하다.
$ ros2 node list
현재 ROS2 환경에서 실행 중인 모든 노드가 출력된다.
$ ros2 node info <node_name>
노드명을 통해서 노드의 퍼블리셔, 서브스크라이버, 서비스, 액션, 파라미터 정보를 출력할 수 있는 명령어이다.