센서·판단·구동
벽 앞에서 멈추기, 그게 왜 어려울까?
세 가지 일
로봇은 감지·판단·구동을 합니다
센서로 주변을 재는 감지(sense), 무엇을 할지 정하는 판단(plan), 바퀴나 팔을 움직이는 구동(act)입니다. 움직이면 주변이 바뀌므로 이 고리는 끝없이 돕니다.
동시에
셋이 제 박자로 돕니다
센서마다 데이터가 오는 박자가 다르고, 바퀴 제어는 더 잦게 돌아야 부드럽습니다. 이 일들이 서로 기다리지 않고 동시에 돌아야 합니다.
횟수는 이해를 돕는 예시 값입니다. 로봇과 센서마다 다릅니다.
한 덩어리라면
느린 일 하나가 전부를 막습니다
이 모든 일을 반복문 하나에 차례로 넣으면, 카메라 영상 처리처럼 오래 걸리는 일이 끼는 순간 바퀴 명령이 제때 나가지 못합니다. 멈춰야 할 때 못 멈춥니다.
하나가 죽으면
한 곳이 멎으면 다 멎습니다
한 프로그램 안에서는 한 부분의 오류가 프로그램 전체를 끝낼 수 있습니다. 카메라 처리에서 난 오류 하나 때문에 바퀴 제어까지 멈추면 위험합니다.
부품이 바뀌면
센서를 바꾸면 코드 곳곳을 고칩니다
센서를 다른 회사 제품으로 바꾸면 데이터를 읽는 방법도 달라집니다. 센서를 직접 부르던 코드가 프로그램 곳곳에 흩어져 있으면, 그곳을 모두 찾아 고쳐야 합니다.
그림의 코드는 설명을 위한 가짜 코드입니다.
풀이
나눠서 돌리고 메시지로 잇습니다
일마다 작은 프로그램으로 나눠 따로 돌리고, 서로 정해진 모양의 메시지를 주고받게 합니다. 각자 제 박자로 돌고, 하나가 멎어도 나머지는 살아 있고, 부품을 바꾸면 그 프로그램만 바꾸면 됩니다.
ROS 2에서는 이 작은 프로그램을 노드라고 부릅니다(3강).
다음 편