마스터 없이, 바꿔 끼우는 미들웨어

가운데 서버 하나가 꺼지면 로봇이 길을 잃을까?

ROS 1

가운데에 마스터가 있었습니다

ROS 1에서는 roscore로 마스터(master)를 먼저 띄웠습니다. 노드는 켜지면 마스터에 등록하고, 마스터가 알려 준 상대 주소로 직접 이어졌습니다. 전화번호부 같은 역할입니다.

약점

마스터가 꺼지면 새로 못 찾습니다

마스터가 멈추면 이미 이어진 노드는 한동안 말을 주고받지만, 새로 켠 노드는 아무도 찾지 못합니다. 무선으로 자주 끊기는 로봇이나 여러 대가 함께 움직이는 로봇에는 이 한 점이 부담이었습니다.

ROS 2

노드끼리 직접 서로 찾습니다

ROS 2에는 마스터가 없습니다. 노드는 켜지면 네트워크에 "나 여기 있어"라고 알리고, 같은 이름의 토픽을 쓰는 상대를 스스로 찾아 잇습니다. 이것을 발견(discovery)이라고 합니다.

발견은 같은 ROS_DOMAIN_ID를 쓰는 노드끼리만 일어납니다(2강 8편).

RMW

미들웨어를 바꿔 끼웁니다

발견과 전달은 그 아래 미들웨어가 맡습니다. Jazzy가 기본으로 쓰는 것은 DDS라는 통신 표준을 구현한 Fast DDS입니다. ROS 2는 그 앞에 RMW(ROS MiddleWare interface)라는 층을 두어, 내 코드를 고치지 않고 미들웨어를 바꿔 끼울 수 있게 했습니다.

DDS가 아닌 Zenoh 같은 미들웨어도 이 자리에 끼울 수 있습니다. 이 과정은 기본값을 그대로 씁니다.

실시간

ROS 2라서 실시간은 아닙니다

실시간(real-time)은 빠르다는 뜻이 아니라, 정해진 시간 안에 반드시 끝낸다는 뜻입니다. ROS 2를 쓴다고 실시간이 되지는 않습니다. 실시간 코드를 짤 수 있게 설계되었을 뿐입니다.

실제로는 실시간 리눅스 커널, 실행 중 메모리를 새로 잡지 않는 코드 같은 준비가 함께 필요합니다.

그 밖에

ROS 1은 지원이 끝났습니다

마지막 ROS 1 배포판 Noetic은 2025년 5월에 지원이 끝났습니다. 인터넷에서 rosrun, roslaunch, catkin_make가 나오는 글은 ROS 1 자료이니 그대로 따라 하면 안 됩니다.

이 밖에 메시지 전달 규칙을 고르는 QoS(11강)도 ROS 2에서 생겼습니다.

다음 편

노드가 여럿 모이면 어떤 모양이 될까요?

6편노드가 모이면 그래프 1강 목록