ROS2를 다뤄보기 전에 ROS 개요와 기본 구조에 대해 알아보고자 한다.
1. 🤖 ROS2 란?
정의 및 역사
ROS(Robot Operating System)는 로봇 소프트웨어를 개발, 관리, 배포하기 위한 도구와 라이브러리를 제공하는 개방형 프레임워크이다. 2007년 스탠포드 인공지능 연구소에서 시작되어 Willow Garage에서 발전되었으며, 현재는 로봇 개발의 표준 플랫폼으로 자리 잡았다.
ROS1 vs ROS2: 왜 ROS2 인가?
ROS 아키텍처를 보면 알 수 있다.

2017년에 출시된 ROS2는 기존 ROS1의 한계를 극복하고 현대 로봇 시스템의 요구사항을 반영하였다.
- 분산 처리 및 실시간 운영: 멀티 로봇 시스템 및 실시간 제어 성능 강화
- ROS1에서는 모든 노드가 통신하기 위해 반드시 Master(roscore)를 거쳐야 했으나,
ROS2는 Master 없이 독립적인 구동이 가능하다.
- DDS(Data Distribution Service) 도입: 산업 표준 통신 방식을 채택하여 보안 및 안정성 확보
- 노드들이 서로의 존재를 스스로 발견하고 직접 데이터를 주고받는 분산 구조
- 멀티 플랫폼 지원: Linux 외에도 Windows, macOS 등 다양한 환경 지원
- 실시간 운영(Real-time)이 가능: 엄격한 시간 제약이 있는 환경에서도 안정적인 로봇 제어 지원.
2. 📦 ROS2의 핵심: 패키지 기반 모듈화
로봇 개발은 기구 설계, 임베디드, 비전, 시뮬레이션 등 다양한 분야의 작업이 동시에 수행되어야 하는 복잡한 영역이다. ROS2는 이러한 복잡한 작업들을 패키지 단위로 모듈화하여 관리함으로써 개발의 효율성을 극대화한다.
패키지(Package)와 워크스페이스(Workspace)
-
패키지(Package): ROS2 소프트웨어의 최소 빌드 단위이다. 하나의 패키지 안에는 특정 기능을 수행하는 코드(C++ 또는 Python), 라이브러리, 의존성 정보가 담긴 설정 파일(package.xml, CMakeLists.txt 등)이 포함된다.
-
워크스페이스(Workspace): 여러 패키지들을 한데 모아두고 colcon 빌드 시스템을 통해 독립적으로 개발하고 빌드하는 작업 공간이다.
-
모듈화의 장점: 카메라 센서 제어 패키지, 자율 주행 알고리즘 패키지 등 기능별로 분리하여 개발하면 다른 로봇이나 프로젝트에서도 해당 패키지를 쉽게 가져다 재사용(Reusability)할 수 있다.
3. 📡 ROS2의 기본 통신 구조 (그래프 아키텍처)
ROS2는 각자의 역할을 가진 독립적인 노드(Node) 들이 서로 데이터를 주고받는 네트워크 그래프 형태로 동작한다.
- 노드 (Node)
- ROS2에서 실행되는 최소 단위의 프로세스이다. 예를 들어 '라이다(LiDAR) 센서 값을 읽는 노드', '바퀴 모터를 제어하는 노드' 등으로 역할을 잘게 쪼개어 구성한다.
- 토픽 (Topic)
- 단방향 비동기 통신 방식이다. 센서 데이터처럼 지속적으로 스트리밍되어야 하는 데이터에 적합하다.
- Publisher(발행자) 가 데이터를 특정 토픽 이름으로 계속 보내면, Subscriber(구독자) 가 그 토픽을 구독하여 데이터를 받아 처리한다.
- 서비스 (Service)
- 양방향 동기 통신 방식이다.
- Client(클라이언트) 가 특정 작업을 요청(Request)하면, Server(서버) 가 해당 작업을 처리한 후 응답(Response)을 반환한다. (예: 로봇 팔에 물건을 집으라는 단발성 명령)
- 액션 (Action)
- 작업 완료까지 시간이 오래 걸리는 경우에 사용하는 비동기 양방향 통신이다.
- 목표(Goal)를 전달하면, 작업 도중 중간 진행 상황(Feedback)을 지속적으로 받을 수 있고, 완료 시 최종 결과(Result)를 반환받는다. (예: 목적지까지 자율주행 이동 명령)