Post

[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 비교

항목ROS1ROS2
마스터 노드roscore 필수없음
통신 미들웨어TCPROS / UDPROSDDS
실시간 지원없음RTOS 지원
Python2.x3.x
Windows 지원불가가능
보안없음SROS2 (TLS/인증)
QoS없음Reliability, Durability, History 등
최신 LTSNoetic (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 체크리스트

  1. ROS2와 ROS1의 핵심 차이(DDS, 마스터 제거)를 이해했다.
  2. 사용할 배포판(Jazzy 권장)을 결정하고 설치했다.
  3. talker-listener 예제로 노드 간 통신을 확인했다.
  4. .bashrcsource /opt/ros/jazzy/setup.bash를 추가했다.

다음 글 예고

Day 2에서는 ROS2 통신 구조를 다룬다. 노드, 토픽, 서비스, 액션의 차이와 각각 어떤 상황에서 쓰는지 정리한다.

This post is licensed under CC BY 4.0 by the author.