본문으로 건너뛰기

ROS Package와 Node

ROS에서 프로그래밍을 하기 위해서는 먼저 패키지를 생성한 뒤, 노드 단위로 기능을 만들어나갑니다.

패키지(Package)​

ROS 2에서 패키지(Package)는 코드, 문서, 리소스(코드 동작에 필요한 데이터 등) 등을 포함한 하나의 묶음입니다. ROS 2 코드를 작성할 때는 가장 먼저 패키지를 생성해야 합니다. ROS 2는 C++과 파이썬을 공식적으로 지원하기에 각 언어로 구성된 패키지를 생성할 수 있습니다.

C++ 로고

Python 로고

ROS 2에서는 패키지 단위로 코드를 작성하고 빌드합니다. 따라서, 코드 작성에 사용된 언어에 맞는 빌드 유형으로 패키지를 생성해야 합니다. ROS 2에서는 빌드 시스템으로 ament를 사용합니다. 빌드 시스템은 단일 패키지에 대해 실행할 수 있는 파일을 생성하는 역할을 합니다.

C++ 패키지는 CMake 기반의 ament_cmake를 사용해 빌드합니다. 패키지 내에 CMakeLists.txt 파일로 빌드와 관련된 자세한 사항을 지정할 수 있습니다. 파이썬 패키지는 setuptools 기반의 ament_python을 사용해 빌드합니다. 패키지 내에 setup.py 파일로 빌드와 관련된 자세한 사항을 지정할 수 있습니다.

최종적으로는 colcon이라는 빌드 도구를 사용해 각 패키지에 맞는 빌드 시스템으로 빌드를 진행하게 됩니다.

노드(Node)​

패키지 예시

패키지에서 소스코드는 기능별로 분리하여 노드(Node) 단위로 작성합니다. 특정 모듈을 사용하기 위한 드라이버 노드, 데이터를 시각화하기 위한 노드, 데이터를 가공하는 노드 등 다양한 노드를 만들 수 있습니다. 노드는 패키지의 구성요소 중 하나로 실질적인 동작은 노드에 구현하게 됩니다. 노드는 반드시 패키지에 속해야 하며, 다르게 표현하면 패키지는 여러 노드의 집합으로 표현할 수 있습니다.

예를 들어, LiDAR를 사용하기 위한 패키지를 간단하게 구성한다면 다음과 같이 구성할 수 있습니다.

라이다 패키지 예시

  • LiDAR 패키지
    • LiDAR 드라이버 노드: 컴퓨터와 연결된 LiDAR로부터 데이터를 취득하는 노드입니다.
    • LiDAR 데이터 시각화 노드: LiDAR 센서의 데이터를 한눈에 볼 수 있도록 시각화하는 노드입니다.