9각 노드는 주기도 다르고, 언어도 다르고(C++/Python), 심지어 실행되는 컴퓨터도 다릅니다. 예를 들어 인지는 GPU가 달린 온보드 PC에서, 관절 제어는 실시간성이 중요한 별도 임베디드 보드에서 돌 수 있습니다.
102. Why — 소켓으로 직접 배선하면 무엇이 무너지는가
11노드끼리 TCP/UDP 소켓을 직접 열어 IP·포트를 하드코딩하면 세 가지가 동시에 무너집니다.
121) 배선 폭발: 서로 통신해야 하는 노드가 N개면 최악의 경우 연결 수는
13
L_{max} = \frac{N(N-1)}{2}
14입니다. N = 10이면 45개, N = 30이면 435개의 연결을 사람이 직접 관리해야 합니다. 연결 하나마다 IP, 포트, 재접속 로직, 바이트 순서(엔디안), 패킷 파싱 코드가 붙습니다.
152) 교체 비용(결합도): 라이다를 Velodyne에서 Ouster로 바꾸면, 그 라이다에 붙어 있던 정합·장애물 검출·로깅 노드의 파싱 코드를 전부 뜯어고쳐야 합니다. 즉 하나를 바꾸면 관련된 모든 코드가 함께 흔들립니다.
163) 재사용 불가: 로봇 A용으로 만든 경로계획기가 로봇 A의 소켓 규약에 묶여 있으면, 로봇 B로 옮길 때 사실상 다시 작성해야 합니다. 연구실·기업이 매번 바퀴를 다시 발명하는 이유가 여기에 있습니다.
17핵심 문장: 미들웨어는 노드 간 통신 규약을 표준화해, 개발자가 '누가 누구에게 어떤 방식으로 말을 거는지'를 몰라도 되게 만들어 줍니다. 이것이 개발 속도와 재사용성의 근원입니다.
183. How — 미들웨어가 실제로 대신해 주는 일
19- 이름 기반 간접 연결: 노드는 상대 IP가 아니라 /scan, /cmd_vel 같은 토픽 이름에만 의존합니다. 발행자(publisher)와 구독자(subscriber)는 서로의 존재를 몰라도 됩니다.
20- 메시지 타입 정의(IDL): sensor_msgs/LaserScan처럼 필드와 직렬화 규칙이 표준화되어, C++ 노드가 보낸 데이터를 Python 노드가 그대로 읽습니다.
21- 디스커버리: 새 노드가 켜지면 미들웨어가 자동으로 상대를 찾아 연결합니다(ROS 1은 마스터, ROS 2는 DDS 분산 디스커버리).
22- 시간·좌표 정합: 타임스탬프와 좌표변환 트리(TF)로 서로 다른 주기의 센서를 한 기준계에서 다룹니다.
23- 공용 도구 생태계: 기록/재생(rosbag), 시각화(RViz), 그래프 검사(rqt_graph) 같은 도구를 모든 노드가 공짜로 얻습니다.
244. 비유 — 로봇 세계의 '우체국'
25소켓 하드코딩은 이웃집마다 전용 전화선을 새로 까는 것과 같고, 미들웨어는 주소(토픽)만 적으면 배달해 주는 우체국과 같습니다. 이사(센서 교체)를 해도 편지 쓰는 사람은 형식을 바꿀 필요가 없습니다.
265. 실제 사례
27- PR2 로봇: ROS는 원래 스탠퍼드/Willow Garage의 PR2를 위한 통합 프레임워크로 출발했습니다. 두 팔·머리 카메라·틸팅 라이다·수십 개 관절을 하나의 메시지 규약으로 묶어, 물건 집기·문 열기 같은 응용을 팀이 나눠 개발할 수 있게 했습니다 (Quigley et al., 2009).
28- 자율주행 인지-계획-제어 파이프라인: DARPA 어반 챌린지의 Junior는 라이다·레이더·GPS를 융합해 인지 → 경로계획 → 제어로 이어지는 모듈형 파이프라인을 사용했고, 이 모듈 경계가 곧 미들웨어 토픽 경계가 됩니다 (Montemerlo et al., 2008).
29- ROS 2와 실시간성: 제어 루프의 지연·지터가 중요한 산업용·모바일 로봇을 위해 ROS 2는 DDS 기반 통신과 QoS(신뢰성/이력 정책)를 도입했습니다 (Maruyama et al., 2016).