ROS 2 API

ROS 2는 내부적으로 여러 API들로 구성되어 동작합니다. APIApplication Programming Interface의 줄임말로, 응용프로그램에서 다른 프로그램 또는 기능들을 사용할 수 있도록 돕는 인터페이스입니다. 인터페이스는 서로 다른 두 개의 시스템 또는 장치 사이에서 정보나 신호를 주고받기 위한 매개체를 말합니다.

실생활에서 볼 수 있는 인터페이스의 간단한 예를 들자면, 음식점의 키오스크에서 음식 버튼을 누르면 음식이 장바구니에 추가되고 주문하기 버튼을 누르면 결제창으로 이동하게 됩니다. 이는 키오스크에 사용자와 상호작용하기 위한 인터페이스가 정의되어 있기 때문입니다.

대지 5.jpg

ROS 2는 각 기능과 언어에 맞는 인터페이스가 구현되어 있습니다. 덕분에, 일반적으로는 다른 프로그래밍 언어로 구현된 구조나 데이터 등을 가져와 사용할 수 없지만 ROS 2에서는 가능하게 됩니다.

Untitled

ROS 2는 위 이미지처럼 다양한 계층으로 구성되어 있습니다. 우리가 작성하게 될 코드는 User Application 계층에 속하게 됩니다. ROS 2에서는 다양한 프로그래밍 언어로 코드를 작성할 수 있는데요. 이는 프로그래밍 언어마다 구현된 Client 라이브러리가 ROS 2의 기능이 정의되어 있는 **rcl(ROS Client Library)**을 해당 언어에 맞게 변환해주기 때문입니다. 예를 들어, 파이썬으로 ROS 2 코드를 작성할 때 사용하는 rclpy 모듈, C++로 코드를 작성할 때 사용되는 rclcpp 라이브러리 등이 있습니다.

<aside> 💡 ROS 2의 구조와 디자인에 대해서 조금 더 자세히 알아보고 싶다면 아래의 링크에서 확인할 수 있습니다.

Design

</aside>

패키지(Package)

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

Untitled

Untitled

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

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

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

노드(Node)

대지 6.jpg

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