# ROS2 소개

***

#### ROS2란 무엇인가?

ROS2(Robot Operating System 2)는 로봇 개발을 위해 설계된 오픈 소스 소프트웨어 프레임워크이다. ROS2는 로봇의 여러 기능을 연결하고 관리하는 데 필요한 툴과 라이브러리를 제공한다. ROS2는 복잡한 로봇 시스템을 쉽게 개발하고 유지할 수 있도록 돕는 역할을 하며, 특히 다양한 종류의 하드웨어와 소프트웨어가 혼재하는 환경에서도 잘 작동하도록 설계되었다.

ROS2는 ROS1의 한계를 개선하기 위해 개발되었으며, 더 나은 성능과 유연성을 제공하도록 설계되었다. ROS1에 비해 ROS2는 더 높은 신뢰성과 보안을 제공하며, 여러 기기 간의 통신을 원활하게 지원한다.

#### ROS2의 주요 개념

ROS2를 이해하는 데 중요한 몇 가지 핵심 개념이 있다. 이는 노드(Node), 토픽(Topic), 서비스(Service), 액션(Action)으로, 이들 각각은 로봇 시스템 내에서 특정 역할을 수행한다.

**노드 (Node)**

노드는 ROS2에서 가장 기본적인 단위이다. 로봇의 각 기능은 별도의 노드로 구현된다. 예를 들어, 로봇의 카메라 제어는 하나의 노드로, 모터 제어는 또 다른 노드로 구현된다. 각 노드는 독립적으로 실행되며, 다른 노드들과 통신할 수 있다. 노드는 시스템의 구성 요소로서, 로봇의 다양한 작업을 수행하는 책임을 진다.

**토픽 (Topic)**

토픽은 노드 간에 데이터를 주고받기 위한 통신 경로이다. 예를 들어, 카메라 노드가 캡처한 이미지를 다른 노드에게 전달하려면, 이 이미지 데이터를 특정 토픽을 통해 전송한다. 토픽은 데이터를 비동기적으로 주고받을 수 있게 해주며, 여러 노드가 같은 토픽을 구독하거나 데이터를 게시할 수 있다.

토픽은 일종의 채널이라고 생각할 수 있다. 노드는 특정 토픽을 통해 데이터를 주고받음으로써, 시스템 내에서 정보 교환이 이루어진다. 이는 로봇의 센서 데이터, 상태 정보 등을 다른 노드와 공유할 때 사용된다.

**서비스 (Service)**

서비스는 특정 작업을 요청하고 응답을 받는 방식으로 동작한다. 예를 들어, 로봇의 특정 모듈이 다른 모듈에게 계산 작업을 요청하고 그 결과를 받을 수 있다. 서비스는 클라이언트-서버 모델로 작동하며, 한 노드가 요청을 보내면 다른 노드가 그 요청을 처리하고 응답한다.

서비스는 실시간 피드백이 필요하거나 즉각적인 응답이 중요한 작업에 유용하다. 예를 들어, 로봇 팔의 움직임을 제어하거나 특정 환경에서 데이터를 즉시 처리해야 하는 경우 서비스가 사용된다.

**액션 (Action)**

액션은 서비스와 유사하지만, 더 복잡하고 긴 시간이 걸리는 작업에 적합한다. 액션은 작업의 진행 상황을 피드백으로 제공하며, 작업이 완료되면 결과를 반환한다. 예를 들어, 로봇이 지정된 위치로 이동하는 작업은 시간이 걸리기 때문에, 이 과정에서 진행 상황을 계속 확인하고 싶을 때 액션이 사용된다.

액션은 노드 간 비동기적 통신을 지원하며, 중간 상태를 확인하거나 작업을 취소할 수 있는 기능도 포함하고 있다. 이는 로봇 시스템에서 유연하고 신속한 대응을 가능하게 한다.

#### ROS2의 기술적 특징

ROS2는 여러 기술적 특징을 통해 안정적이고 효율적인 로봇 시스템 개발을 지원한다. 여기에는 DDS(Data Distribution Service), QoS(Quality of Service) 설정, 네임스페이스(Namespace) 등이 포함된다.

**DDS (Data Distribution Service)**

DDS는 ROS2의 핵심 통신 프로토콜로, 노드 간 데이터를 안정적으로 주고받을 수 있도록 한다. DDS는 실시간 데이터 전송을 가능하게 하며, 네트워크 환경에 맞춰 데이터 전달 방식을 조정할 수 있다. 이를 통해 ROS2는 다양한 로봇 시스템에서 높은 유연성과 신뢰성을 제공한다.

**QoS (Quality of Service)**

QoS는 ROS2에서 데이터 전송 품질을 조정하는 설정이다. 예를 들어, 특정 데이터는 꼭 전달되어야 하는 반면, 다른 데이터는 일부 손실이 허용될 수 있다. QoS 설정을 통해 각 토픽이나 서비스가 필요로 하는 데이터 전송 방식을 정의할 수 있다. 이는 시스템의 성능을 최적화하고, 필요한 곳에 자원을 집중하게 한다.

**네임스페이스 (Namespace)**

네임스페이스는 ROS2에서 노드나 토픽, 서비스의 이름 충돌을 방지하고, 구조적으로 시스템을 관리하는 데 사용된다. 네임스페이스를 사용하면 로봇 시스템 내에서 명확한 계층 구조를 만들 수 있으며, 복잡한 시스템에서도 각 구성 요소의 이름을 체계적으로 관리할 수 있다.

***

관련 자료:

* Design and Architecture of ROS2, Open Robotics, 2023.
* Introduction to ROS2, ROS.org, 2022.
* Data Distribution Service (DDS) for Real-Time Systems, Object Management Group, 2021.
