1. 이론
1.1ROS2란?
로봇 소프트웨어는 왜 어려운가
모바일 로봇 하나만 움직이려 해도 다음이 동시에 필요합니다.
- 바퀴 모터 제어
- 센서(LiDAR, 카메라, IMU) 데이터 읽기
- 자기 위치 추정, 경로 계획
- 사용자 명령 수신, 상태 표시
이 기능을 하나의 거대한 프로그램으로 만들면 수정이 어렵고 센서나 모터가 바뀔 때마다 전체를 다시 손봐야 합니다. 로봇마다 같은 기능을 매번 처음부터 만들게 되는 문제도 있습니다.
ROS2의 접근: 작은 프로그램을 연결한다
ROS(Robot Operating System) 2는 이름과 달리 윈도우나 리눅스 같은 운영체제가 아니라, 로봇 소프트웨어를 만들기 위한 미들웨어 + 도구 + 라이브러리 모음입니다. 기능을 노드라는 작은 프로그램으로 나누고 노드끼리 메시지를 주고받게 합니다.
둥근 상자 = 노드 · 사각형 = 토픽 · 화살표 = 데이터 방향
- 노드(Node): 하나의 역할을 하는 실행 프로그램 (예: LiDAR 읽기, 모터 제어)
- 토픽(Topic): 노드끼리 메시지를 주고받는 통로. 통로마다 이름이 붙어 있음 (예:
/scan,/cmd_vel) - 메시지(Message): 토픽으로 오가는 데이터의 형식 (예: 속도 명령, 센서 값)
실제 로봇에서는 이렇게 노드가 나뉩니다. 아래는 카메라, 모터, 센서가 달린 로봇의 노드 구성 예입니다. 카메라 노드와 변환 노드가 하나의 미션 노드로 데이터를 모으고, 미션 노드가 QR 인식, 정지선 인식, 물체 인식, 라인 추종 같은 기능 노드를 부릅니다.
각 사각형이 노드 하나이고 선은 데이터가 오가는 길입니다. 센서 노드나 기능 노드를 바꿔 끼워도 미션 노드는 그대로 두고 쓸 수 있다는 것이 위에서 말한 장점입니다.
ROS2가 제공하는 것
| 구분 | 내용 |
|---|---|
| 통신 | 노드 간 메시지 전달 (토픽, 서비스, 액션) |
| 도구 | ros2 명령어, RViz2(시각화), rosbag2(데이터 기록·재생) |
| 라이브러리 | 좌표 변환(TF2), 내비게이션(Nav2), SLAM 등 |
| 생태계 | 전 세계 개발자가 공유하는 패키지 |
| 언어 | 주로 C++, Python (이 교육은 Python 사용) |
ROS1과 ROS2
| 항목 | ROS1 | ROS2 |
|---|---|---|
| 중앙 서버 | roscore(마스터) 필수 | 불필요 (노드끼리 자동 발견) |
| 통신 기반 | 자체 방식 | DDS (산업 표준 통신 규약) |
| 실시간·신뢰성 | 제한적 | QoS 설정으로 제어 가능 |
| 지원 OS | 사실상 Ubuntu | Linux, Windows, macOS |
| 상태 | 유지보수 종료 (Noetic이 마지막) | 현재 표준 |
한눈에 정리
- ROS2는 로봇 소프트웨어를 작은 노드로 나누고 메시지로 연결하는 프레임워크다.
- 노드는 토픽이라는 이름 붙은 통로로 데이터를 주고받는다.
- 중앙 서버 없이 DDS를 통해 노드들이 서로를 자동으로 찾는다.
- 같은 인터페이스(토픽)를 쓰면 시뮬레이션과 실기기를 바꿔 끼울 수 있다.
확인 문제
Q1. ROS2는 운영체제인가요?
아니요. 운영체제 위에서 동작하는 로봇용 미들웨어·도구·라이브러리 모음입니다.
Q2. 장애물 회피 노드는 어떤 통로로 모터 제어 노드에 속도 명령을 보내나요?
토픽입니다. 위 그림에서는 /cmd_vel 토픽을 사용합니다.
Q3. ROS1과 달리 ROS2에서 필요 없어진 것은?
중앙 마스터(roscore)입니다. ROS2는 DDS 기반으로 노드가 서로를 자동으로 발견합니다.
다음 장
다음은 토픽입니다. 이번에는 개념을 읽는 데서 그치지 않고 코드를 직접 고쳐 실행해 봅니다.