[Physical AI W1D2] 3/6 — ROS 2 통신의 4가지 길: 노드·토픽·서비스·액션

2026. 6. 14. 17:14·피지컬AI

[Physical AI W1D2 · 3/6]

로봇 소프트웨어는 하나의 거대 프로그램이 아니다. 카메라·인식·계획·제어가 각각 독립 노드로 돌며 데이터를 주고받는다. ROS 2의 네 가지 통신 방식 — 노드·토픽·서비스·액션을 "왜, 언제 쓰는가"로 잡는다.

이 글에서 잡는 개념

  • 로봇 SW를 왜 여러 노드로 쪼개나
  • 토픽(계속 흐르는 데이터) vs 서비스(요청/응답) vs 액션(오래 걸리는 목표 작업)
  • 네 방식의 차이와 선택 기준
  • 실제 이동 로봇·로봇 팔에서 어떻게 조합되나

(이 글은 Week1 Day2 ROS 2 블록의 시작입니다. 1·2편의 리눅스 기초 위에서 진행합니다. 4편부터 이 개념들을 직접 코드로 구현합니다.)


들어가며 — 로봇은 하나의 프로그램이 아니다

ROS 2 기반 로봇 시스템은 하나의 거대한 프로그램으로 만들어지지 않습니다. 카메라 데이터를 읽는 프로그램, LiDAR를 처리하는 프로그램, 위치를 계산하는 프로그램, 경로를 계획하는 프로그램, 모터를 제어하는 프로그램이 각각 독립적으로 실행됩니다.

왜 이렇게 쪼갤까요? 모든 기능을 한 프로그램에 넣으면 관리가 어렵고, 하나가 죽으면 전체가 멈춥니다. 기능을 나누면 필요한 부분만 고치거나 재사용할 수 있고, 한 노드가 문제여도 나머지는 살아 있습니다(장애 격리).

ROS 2는 이렇게 나뉜 프로그램들이 서로 데이터를 주고받도록 노드·토픽·서비스·액션이라는 통신 구조를 제공합니다.

카메라 노드 ──(이미지 토픽)──▶ 객체 인식 노드 ──▶ 경로 계획 노드 ──(속도 명령)──▶ 제어 노드

ROS 2의 네 가지 통신 방식을 한 화면에 — 노드(실행 단위 박스), 토픽(Publisher에서 Subscriber로 단방향 화살표), 서비스(Client와 Server 사이 요청·응답 양방향), 액션(Client와 Server 사이 Goal 전송 + Feedback 반복 + Result 반환)을 2x2로 비교한 다이어그램


1. 통신 4종 한눈에

통신 방식 구조 사용 상황
노드 기능 단위 실행 프로그램 센서 처리·제어·인식·계획 등 개별 기능
토픽 Publisher → Subscriber 센서 데이터·로봇 상태·속도 명령처럼 계속 흐르는 데이터
서비스 Client → Server → Response 설정 변경·계산 요청·상태 조회처럼 즉시 응답이 필요한 작업
액션 Client → Server → Feedback/Result 목표 지점 이동·로봇 팔 동작처럼 오래 걸리는 작업

2. 노드 — 기능 하나의 실행 단위

노드(Node) 는 ROS 2에서 하나의 기능을 수행하는 기본 실행 단위입니다. 다음처럼 각 기능이 노드가 됩니다.

노드 예시 역할
camera_node 카메라 이미지 수집
lidar_node LiDAR 거리 데이터 수집
object_detector_node 객체 탐지
navigation_node 이동 경로 계획
motor_controller_node 모터 제어

노드는 독립적으로 실행되지만 토픽·서비스·액션을 통해 서로 연결됩니다. 그래서 ROS 2 시스템을 볼 때 가장 먼저 묻는 질문은 "지금 어떤 노드들이 실행 중인가?" 입니다(→ 4편에서 ros2 node list로 확인).


3. 토픽 — 계속 흐르는 데이터 (Publisher/Subscriber)

토픽(Topic) 은 ROS 2에서 가장 많이 쓰는 통신 방식으로, 데이터를 지속적으로 흘려보내는 채널입니다.

Publisher Node ──▶ Topic ──▶ Subscriber Node

핵심은 Publisher와 Subscriber가 서로 직접 연결되어 있지 않다는 점입니다. 둘은 같은 토픽 이름 + 같은 메시지 타입을 기준으로 느슨하게 연결됩니다. 예를 들어 카메라 노드는 /camera/image 토픽으로 이미지를 발행하고, 인식 노드는 같은 토픽을 구독해 처리합니다. 발행자가 누구인지 구독자는 몰라도 됩니다.

데이터 토픽을 쓰는 이유
카메라 이미지 프레임이 계속 들어옴
LiDAR 스캔 실시간 거리 데이터 반복
로봇 위치 현재 위치가 계속 갱신
속도 명령 이동 명령을 지속 전달

💡 Day1에서 만든 /clock(시뮬레이션 시간)도 토픽이었습니다 — 계속 갱신되는 값이라 토픽이 적합했죠.


4. 서비스 — 요청하면 바로 응답 (Client/Server)

서비스(Service) 는 요청과 응답 구조입니다. 토픽이 계속 흘려보내는 방식이라면, 서비스는 필요한 순간 요청하고 응답을 받는 방식입니다.

Service Client ──(Request)──▶ Service Server ──(Response)──▶ Service Client
사용 예시 설명
로봇 상태 조회 배터리·모드 조회
좌표 변환 요청 특정 좌표 계산
설정 변경 센서 파라미터 변경
로봇 초기화 위치 초기화 요청
간단한 계산 두 수 더하기 등

서비스는 응답이 즉시 필요한 작업에 씁니다. 다만 작업이 오래 걸리면 서비스보다 액션이 적절합니다.


5. 액션 — 오래 걸리는 목표 작업 (Goal/Feedback/Result)

액션(Action) 은 시간이 오래 걸리는 작업을 위한 통신입니다. 서비스는 응답이 올 때까지 기다리는 구조라, 몇 초~몇 분 걸리는 작업엔 부적합합니다(중간 진행 상황도 모르고 취소도 어렵습니다).

Action Client ──(Goal)──▶ Action Server
              ◀─(Feedback)── (작업 중 진행 상황 반복)
              ◀─(Result)──   (완료 후 최종 결과)
기능 설명
Goal 수행할 목표 전달
Feedback 작업 중간 진행 상황 전달
Result 작업 완료 결과 반환
Cancel 진행 중인 작업 취소
사용 예시 이유
목표 지점까지 이동 오래 걸리고 중간 위치 피드백 필요
로봇 팔 경로 실행 진행률·완료 여부 필요
물체 집기 접근→파지→이동→배치 단계
탐색 작업 장시간 수행·취소 필요

6. 네 방식, 어떻게 고르나

구분 통신 방식 특징 대표 사용 예
노드 실행 단위 하나의 기능 담당 카메라·제어·경로 계획 노드
토픽 비동기 발행/구독 지속적 데이터 흐름 센서 데이터·속도 명령·로봇 상태
서비스 요청/응답 짧은 작업·즉시 응답 상태 조회·설정 변경·계산
액션 목표/피드백/결과 오래 걸림·취소 가능 목표 이동·로봇 팔 동작·탐색

선택은 질문 하나로 정리됩니다.

계속 흘러가는 데이터인가?        → 토픽
요청하면 바로 응답받는 작업인가?  → 서비스
시간이 오래 걸리고 진행 상황이 필요한가? → 액션
기능을 실행하는 독립 프로그램인가? → 노드

7. 실제 로봇에서 어떻게 조합되나

이동 로봇 예시

기능 ROS 2 구조
LiDAR 데이터 수집 LiDAR 노드가 /scan 토픽 발행
카메라 이미지 Camera 노드가 /image_raw 토픽 발행
현재 위치 추정 Localization 노드가 /odom·/tf 발행
목표 지점 이동 Navigation 액션 서버가 goal 수신
속도 명령 Controller 노드가 /cmd_vel 토픽 구독
맵 저장 요청 Map Server 서비스 호출

로봇 팔 예시

기능 ROS 2 구조
관절 상태 Joint State Publisher가 /joint_states 발행(토픽)
목표 자세 MoveIt 액션 서버에 goal 전송
그리퍼 열기/닫기 서비스 또는 액션
물체 인식 Vision 노드가 객체 위치 토픽 발행

→ 하나의 로봇은 토픽·서비스·액션을 동시에 씁니다. 어떤 데이터냐에 따라 길을 골라 쓰는 거죠.


3편 정리

  • 로봇 SW는 여러 노드로 쪼개 통신으로 연결 — 관리·장애격리·재사용에 유리.
  • 토픽 = 계속 흐르는 데이터(Pub/Sub, 느슨한 연결) / 서비스 = 즉시 요청·응답 / 액션 = 오래 걸리는 목표 작업(Goal·Feedback·Result·Cancel).
  • 고르는 기준: "흐르는 데이터→토픽 / 즉답→서비스 / 장시간→액션".
  • 실제 로봇은 셋을 동시에 조합한다.

다음 편 예고

4편부터 직접 구현합니다. 환경을 준비하고(ros2 pkg create), 토픽 Publisher/Subscriber를 Python(rclpy)으로 작성해 colcon build로 빌드하고 ros2 run으로 실행합니다. 개념이 코드로 살아나는 단계입니다.

📚 Week1 Day2 전체 목차 (총 6편)

  • 1/6 리눅스 기초 — 쉘·파일시스템·핵심 명령어
  • 2/6 리눅스 실전 8 시나리오
  • 3/6 ROS 2 통신 4종 개념 — 노드·토픽·서비스·액션 — 이번 글
  • 4/6 ROS 2 토픽 Pub/Sub 직접 만들기
  • 5/6 ROS 2 서비스·액션 구현
  • 6/6 ROS 2 패키지 빌드 — Python·C++·colcon
저작자표시 (새창열림)

'피지컬AI' 카테고리의 다른 글

[Physical AI W1D2] 5/6 — ROS 2 서비스·액션 구현: 요청/응답과 목표/피드백  (0) 2026.06.14
[Physical AI W1D2] 4/6 — ROS 2 토픽 직접 만들기: Publisher·Subscriber  (0) 2026.06.14
[Physical AI W1D2] 2/6 — 리눅스 실전 8 시나리오: 명령어를 손에 익히기  (0) 2026.06.14
[Physical AI W1D2] 1/6 — 리눅스 기초 체력: 쉘·파일시스템·핵심 명령어  (0) 2026.06.14
[Physical AI W1D1] 5/5 — ROS 2 /clock을 밖으로: WebSocket 서버 + Cloudflare Tunnel  (1) 2026.06.14
'피지컬AI' 카테고리의 다른 글
  • [Physical AI W1D2] 5/6 — ROS 2 서비스·액션 구현: 요청/응답과 목표/피드백
  • [Physical AI W1D2] 4/6 — ROS 2 토픽 직접 만들기: Publisher·Subscriber
  • [Physical AI W1D2] 2/6 — 리눅스 실전 8 시나리오: 명령어를 손에 익히기
  • [Physical AI W1D2] 1/6 — 리눅스 기초 체력: 쉘·파일시스템·핵심 명령어
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (342) N
      • 여러가지 (11) N
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (21)
        • 도커 (2)
        • AWS (19)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (2) N
        • 정보처리기사 (0)
        • 정보보안기사 (1)
        • 네트워크관리사 (1) N
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
      • 피지컬AI (26)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    EC2
    AWS네트워크계층으로읽기
    운동학
    자바
    Spring Boot
    항해99
    AWS
    완전탐색
    Redis
    java
    취업리부트
    SAA
    클라우드
    Python
    celery
    moveit
    WebFlux
    FastAPI
    그리디
    피지컬ai
    역운동학
    Spring WebFlux
    docker
    rclpy
    네트워크
    ROS2
    프로그래머스
    TF
    로봇팔
    동차변환행렬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[Physical AI W1D2] 3/6 — ROS 2 통신의 4가지 길: 노드·토픽·서비스·액션
상단으로

티스토리툴바