들어가며
최근 몇 년 간 AMR·다관절로봇이 떠오르며 ROS 경력 구인공고나, RTOS나 Micro-ROS에 포팅 수요가 많아진 걸 체감 중이다.
그만큼 임베디드 시스템에도 AI와 함께 모듈형 설계가 중요해지고 복잡성이 증가했기 때문일 것이다.
이번 글에서는 초보 개발자의 관점에서 ROS2의 강점과 특징에 대해 알아보자.
*ROS 기본 개념은 인터넷에 잘 나와있으니 다음 717lumos 님의 게시글로 대체한다..
[ROS] ROS 기본 개념
로봇 소프트웨어 플랫폼, ROS 소개, ROS 주요 개념 및 컨셉, 파일 시스템
velog.io
Embedded 개발자의 시선에서 본 ROS 주요 개념
Multi-Platform
ROS2(Robot Operating System)는 DDS 기반 미들웨어 위에 구축된 로봇 소프트웨어 프레임워크이다.
다양한 OS에서 동작할 수 있고, 계층별/언어별로 라이브러리를 제공하여 개발이 수월하다.
DDS Pub/Sub Message구조
DDS(Data Distribution Service)는 데이터를 주고받는 미들웨어 표준으로 ROS2는 DDS를 통신 미들웨어로 사용한다.
ROS2 노드 간 데이터는 Message 형태로 전송되는데, DDS Layer를 통해 Pub/Sub 구조로 통신한다.
이때 DDS추상 레이어(rmw)를 두어 벤더 독립성(Vendor Independence)을 유지하고, 시스템 복잡성을 낮춘다.
DDS의 QoS (Quality of Service)
ROS2를 AMR · 다관절 로봇에 적용하기 좋은 이유는 DDS에서 QoS를 제공하기 때문이다.
예를 들어 DDS 메시지를 구독한다고 할 때, 다음과 같은 QoS정책을 설정할 수 있다.
- Deadline: 메시지가 일정 주기(ex. 10㎳) 내에 도착해야 함
- Reliability: 누락된 메시지를 무시하고 진행 or 재전송 해
물론 실시간성(Deadline안에 센서 처리를 끝내고 publish까지의 과정)은 내부 칩이나 RTOS를 통해 따로 확보해야 하지만,
QoS정책 설정으로 아키텍처가 단순해지고 모듈별로 책임을 세분화할 수 있다.

ROS1 vs ROS2 차이점
가장 큰 차이는 위에서 언급한 통신 방식의 차이이다.
ROS1은 TCP/UDP 프로토콜을 사용했고 따라서 QoS 측면에서 한계가 있었다.
ROS2는 DDS를 사용해 QoS 설정 및 신뢰성을 확보함과 동시에 Pub/Sub 구조로 기존의 ROS Master노드가 불필요해졌다.
호환성
ROS1과 ROS2는 통신 방식이 달라 상호 호환되지 않는다. (ROS1 ≠ ROS2)
또한 ROS2 내부에서도 버전 간 완전한 호환성이 보장되지 않기 때문에 동일한 버전을 쓰는 것이 안전하다.
환경 의존성이 큰 ROS를 배포할 때는, Docker/Container를 활용해 배포하거나 패키지 매니저를 통해 배포하는 경우가 많다.
특히 DDS 구현방식과 QoS 설정에 따라 동작이 달라질 수 있다.
| 패키지 명 (출시일) | |
| ROS 2 (권장 버전) | Jazzy Jalisco (2024.05 - LTS) |
| Iron Irwini (2023.05) | |
| Humble Hawksbill (2022.05 - LTS) | |
| Galactic Geochelone (2021.05) | |
| Foxy Fitzroy (2020.06 - LTS) | |
| ROS 1 (Legacy) | Noetic Ninjemys (2020.05 - 마지막 ROS1) |
| Melodic Morenia (2018.05) |
*ROS2의 릴리즈는 연 1회 발표하며, LTS는 발표된 이후 5년간 지원한다.
*ROS 인터페이스 배포를 위해서는 ROS 배포판, QoS, 토픽 타입, 빌드 환경 등을 맞춰야 한다.
회고
ROS2를 살펴보며, 복잡한 센서 및 로봇 시스템에 적용할 경우 아키텍처를 단순화하고 개발 시간을 크게 단축할 수 있는 프레임워크라는 점을 확인할 수 있었다.
DDS 기반의 강력한 통신 구조를 바탕으로 모듈화와 확장성을 자연스럽게 확보할 수 있다는 점 역시 인상적이다.
다만, 실제로 유저 레벨까지 서비스를 제공하는 관점에서는 배포 방식이나 버전 관리, 실행 환경 구성 등에서 추가적으로 고려해야 할 요소들이 많고 운영 측면의 고민이 함께 필요한 분명한 장단점을 가지는 기술이라 느꼈다.
최근 PLC 프로젝트가 고도화되며 조직이 Robot Control Solution 팀으로 개편된 만큼,
향후 AMR이나 Motion 기능 개발을 진행하게 된다면 ROS를 이용해 작업하며 실무에 관한 글을 이어갈 수 있을 것 같다.
글을 작성하며 SW개발자의 관점에서 가장 궁금한 점은,
단순한 아키텍처 구조 속에서 DDS기반 데이터 통신이 실제 환경에서 어느 정도의 성능과 안정성이 나올지 궁금하다.
앞으로 이를 직접 검증해 보는 과정이 재밌는 과제가 될 것 같다.
직접 공부해서 다음 글로 정리해 보려고 합니다.
Linux실시간성에 관한 글: 2026.04.06 - [개발] - Linux PREEMPT_RT 실시간성(Jitter) 측정 및 성능 비교 - RTOS
Linux PREEMPT_RT 실시간성(Jitter) 측정 및 성능 비교 - RTOS
들어가며최근 SW PLC에서 관심 갖고 개발 중인 내용은 Linux PREEMPT_RT 커널을 이용해 실시간성을 보장하는 작업이다. SW PLC Runtime은 특정 Task를 매 주기마다 실행해야 한다.따라서 OS에서 프로세스의
prejudice.tistory.com
ROS공식 Documents: https://docs.ros.org/en/rolling/
ROS 2 Documentation — ROS 2 Documentation: Rolling documentation
© Copyright 2026, Open Robotics.
docs.ros.org
'개발' 카테고리의 다른 글
| 비개발자도 쓰는 AI Agent 만들기 - Copilot CLI와 바이브 코딩 (0) | 2026.05.25 |
|---|---|
| AI Agent 개념정리 - LLM · Worker-Agent 패턴 · Multi-Agent 패턴 (0) | 2026.05.11 |
| C++ Preemptive Task Scheduler 구현 및 성능 비교 (Windows · Linux · Linux PREEMPT_RT) (0) | 2026.04.18 |
| Linux PREEMPT_RT 실시간성(Jitter) 측정 및 성능 비교 - RTOS (0) | 2026.04.06 |
| Windows 한글 계정명에서 발생하는 CMake 빌드 에러 원인과 해결 방법 (0) | 2026.03.31 |