ROS 2 — 뭐고, 왜 필요한가
로봇 소프트웨어를 만들 때 마주치는 진짜 문제부터 시작해서, ROS 2가 어떻게 그 문제의 답이 됐는지 한 글로 정리한다.
ROS 2를 배우려고 인터넷을 뒤지면 “노드와 토픽으로 메시지를 주고받는 미들웨어” 같은 한 줄 설명을 만난다. 틀린 말은 아닌데, 처음 보는 사람한테는 “뭐가 미들웨어고 왜 필요한지” 부터 안 와닿는다.
이 글은 그 한 줄 뒤로 한 발 가서, “왜 ROS 2 같은 게 만들어졌나” 부터 풀어쓴다. 이게 잡히면 그다음 글들이 쉽다.
1. 로봇 소프트웨어가 안 쉬운 이유
로봇 한 대를 생각해보자 — 예를 들어 자율주행 로봇.
- 카메라가 앞을 보고 영상을 찍는다 (앞에 사람이 있나, 신호등이 빨간색인가)
- 라이다(LiDAR) — 레이저로 거리를 재는 센서 — 가 주변 장애물까지의 거리를 잰다
- GPS가 “지금 내가 어느 좌표에 있는지” 를 알려준다
- 알고리즘이 그 정보들을 모아서 “왼쪽으로 30도 꺾고 시속 5km로 가라” 같은 판단을 내린다
- 모터가 그 명령에 따라 바퀴를 돌린다
여기서 문제. 이 다섯 부품이 각자 다른 회사가 만든, 각자 다른 프로그램이라는 거다. 카메라 드라이버는 C++로, 알고리즘은 Python으로, 모터 제어는 임베디드 C로 짜였을 수 있다. 게다가:
- 다섯 개가 동시에 돌아가야 한다 (한 줄로 순서대로 X)
- 서로 데이터를 주고받아야 한다 (영상 → 알고리즘 → 모터)
- 하나가 죽어도 나머지가 살아 있어야 한다
- 새 부품을 추가하기 쉬워야 한다
이걸 맨손으로 짜면 끔찍해진다. 부품 추가할 때마다 다른 부품 코드도 다 바꿔야 하고, 디버깅하면 어디서 끊겼는지도 안 보이고, 동기화 문제로 미쳐버린다.
그림으로 보면 더 선명하다.
참고 — “ROS 메시지 버스”는 프로세스가 아니다
위 그림에서는 가운데 막대로 그렸지만, 진짜로 거기에 자리잡은 단일 프로세스가 있는 건 아니다. 실제로는 각 부품 안에 들어가 있는 통신 코드들의 집합으로 봐야 정확하다. 그래서 “버스를 죽인다”는 시나리오 자체가 성립이 안 된다 — 죽일 대상이 따로 없으니까. (왜 이게 중요한지는 §4에서 ROS 1과 비교하면서 다시 짚는다.)
2. ROS는 이 문제를 푸는 약속 + 도구 모음
여기서 ROS (Robot Operating System) 가 등장한다. 이름은 “로봇 운영체제”지만 실제로 운영체제(Windows·Linux 같은)는 아니다. 정확히는 이렇게 정의된다.
ROS는 로봇 부품들끼리 메시지를 주고받게 해주는 표준 약속 + 그 약속을 따르는 도구 모음이다.
세 가지를 한 묶음으로 제공한다.
- 통신 약속 — “이런 형식으로 메시지를 주고받자” 는 표준 (메시지 모델 — 노드, 토픽, 서비스 등의 개념)
- 소프트웨어 라이브러리 — 그 약속을 따르는 코드를 쉽게 짤 수 있게 해주는 C++·Python 라이브러리
- 도구들 — 시스템 상태 보기, 메시지 흐름 보기, 노드 한 번에 띄우기, 통신 녹화·재생 같은 명령줄·시각화 도구
자율주행 로봇 예시로 돌아가면 — ROS를 쓰면 카메라 부품·알고리즘 부품·모터 부품이 모두 같은 약속을 따라서 메시지를 주고받는다. 각자 다른 언어로 짜여도 상관없다. 부품 하나를 빼고 다른 회사 제품으로 바꿔도 약속만 같으면 시스템이 그대로 굴러간다.
3. ROS가 아닌 것들
오해 풀기.
- ROS는 운영체제가 아니다 — Ubuntu 같은 OS 위에 깔리는 라이브러리 + 도구 모음. OS는 따로 있어야 한다
- ROS는 프로그래밍 언어가 아니다 — 코드는 C++이나 Python으로 짠다. ROS는 그 코드들이 서로 말 통하게 해주는 표준
- ROS는 로봇 자체가 아니다 — 로봇 하드웨어를 만들거나 파는 게 아니다. 로봇 소프트웨어를 다루는 도구 모음
그림으로 보면 ROS는 이 자리에 산다.
한 줄로: ROS는 “로봇 소프트웨어 개발자들의 공용어 + 공용 도구” 다.
4. ROS 1 vs ROS 2 — 왜 또 2가 나왔나
ROS 1(2007년부터 있었음)으로도 많은 로봇이 만들어졌지만, 시간이 지나면서 한계가 보였다.
- 자동차·드론처럼 실시간이 진짜로 중요한 영역에서는 ROS 1의 통신이 너무 느슨했다
- 중앙 관리자(
roscore)가 죽으면 전체가 죽는 구조가 산업용으로는 위험했다 - 윈도우·임베디드 환경 지원이 부족했다 (리눅스 강제)
- 보안이 사실상 없었다
그래서 2017년경에 ROS 2가 나왔다. 한 줄 차이는 이거.
ROS 2는 산업 표준 통신(DDS) 을 빌려와서, 중앙 관리자 없이 분산된 방식으로 로봇 부품들을 연결한다.
그림으로는 이런 차이다.
지금 단계에서는 “ROS 1보다 더 산업적이고, 더 안정적이고, 더 빠르게 만든 후속판” 정도로 알아두면 충분하다.
(이하 ROS라고만 적으면 ROS 2를 가리킨다.)
한 줄로 박아둘 것
- ROS는 로봇 부품들끼리 메시지를 주고받게 해주는 표준 약속 + 라이브러리 + 도구 모음
- 운영체제가 아니다. Ubuntu 같은 OS 위에 깔린다
- 프로그래밍 언어가 아니다. C++·Python으로 코드를 짜고, ROS는 그 코드들이 말 통하게 해준다
- ROS 2는 ROS 1의 더 산업적·안정적·빠른 후속판. 산업 표준 통신(DDS)을 빌려왔고, 중앙 관리자가 없다