[ROS2 입문] Day 1: ROS2란 무엇인가 - ROS1과 무엇이 달라졌나
[ROS2 입문] Day 1: ROS2란 무엇인가 - ROS1과 무엇이 달라졌나
서론: 왜 ROS2인가
ROS1은 2010년대 초반 로봇 연구 커뮤니티에서 사실상 표준이 됐다. 그러나 연구용으로 설계된 ROS1은 프로덕션 배포, 실시간성, 보안 측면에서 한계가 명확했다. ROS2는 이 한계를 정면으로 해결하기 위해 2017년부터 개발됐다.
1. ROS1의 한계
1
2
3
4
5
6
7
8
9
10
11
12
ROS1 구조:
roscore (마스터 노드) ← 단일 장애점
노드 A ──등록──→ roscore
노드 B ──등록──→ roscore
노드 A ↔ 노드 B (TCP 직접 통신)
문제:
- roscore가 죽으면 전체 시스템 마비
- 실시간 통신 보장 없음
- Python 2 기반 (현재 EOL)
- 보안 인증 없음
- Windows/임베디드 지원 불가
2. ROS2의 핵심 변경: DDS
ROS2는 roscore를 없앴다. 대신 산업 표준 미들웨어 DDS(Data Distribution Service)를 기반으로 한다.
1
2
3
4
5
6
7
8
9
10
ROS2 구조:
노드 A ──DDS──→ 노드 B (직접 발견, 직접 통신)
노드 C ──DDS──→ 노드 A
(중앙 마스터 없음)
DDS가 제공하는 것:
- 노드 자동 발견 (Discovery)
- QoS(Quality of Service) 정책
- 실시간성 보장 옵션
- 멀티 도메인 격리
DDS 구현체는 여러 가지다. 기본은 Fast DDS(eProsima), 대안으로 Cyclone DDS가 많이 쓰인다.
3. ROS1 vs ROS2 비교
| 항목 | ROS1 | ROS2 |
|---|---|---|
| 마스터 노드 | roscore 필수 | 없음 |
| 통신 미들웨어 | TCPROS / UDPROS | DDS |
| 실시간 지원 | 없음 | RTOS 지원 |
| Python | 2.x | 3.x |
| Windows 지원 | 불가 | 가능 |
| 보안 | 없음 | SROS2 (TLS/인증) |
| QoS | 없음 | Reliability, Durability, History 등 |
| 최신 LTS | Noetic (2025 EOL) | Humble, Iron, Jazzy |
4. ROS2 배포판
1
2
3
4
ROS2 주요 배포판 (LTS 기준):
Humble Hawksbill (2022, Ubuntu 22.04, LTS)
Iron Irwini (2023, Ubuntu 22.04)
Jazzy Jalisco (2024, Ubuntu 24.04, LTS) ← 현재 권장
새 프로젝트는 Jazzy 기준으로 시작하는 것이 좋다. Humble은 기존 프로젝트 유지에 쓰인다.
5. 설치
Ubuntu 24.04 + Jazzy 기준:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# locale 설정
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
# ROS2 apt 저장소 추가
sudo apt install software-properties-common curl
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
-o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \
http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" \
| sudo tee /etc/apt/sources.list.d/ros2.list
# 설치
sudo apt update
sudo apt install ros-jazzy-desktop # GUI 포함 전체 설치
sudo apt install ros-dev-tools # colcon, rosdep 등
# 환경 설정 (매 터미널마다 또는 .bashrc에 추가)
source /opt/ros/jazzy/setup.bash
6. 첫 번째 실행
설치 확인: talker-listener 예제.
1
2
3
4
5
6
7
# 터미널 1
source /opt/ros/jazzy/setup.bash
ros2 run demo_nodes_cpp talker
# 터미널 2
source /opt/ros/jazzy/setup.bash
ros2 run demo_nodes_py listener
talker가 “Hello World: N” 메시지를 퍼블리시하고, listener가 수신한다. DDS가 자동으로 두 노드를 발견한다.
7. Day 1 체크리스트
- ROS2와 ROS1의 핵심 차이(DDS, 마스터 제거)를 이해했다.
- 사용할 배포판(Jazzy 권장)을 결정하고 설치했다.
- talker-listener 예제로 노드 간 통신을 확인했다.
.bashrc에source /opt/ros/jazzy/setup.bash를 추가했다.
다음 글 예고
Day 2에서는 ROS2 통신 구조를 다룬다. 노드, 토픽, 서비스, 액션의 차이와 각각 어떤 상황에서 쓰는지 정리한다.
This post is licensed under CC BY 4.0 by the author.