hello, robot

로봇 안에 똑똑한 컴퓨터가 하나 들어 있다고 막연히 생각했어요. 실제로는 역할이 다른 컴퓨터가 둘이었고, 그 사이 통신에 함정이 있었어요.

판단과 실행을 나눈 2계층

왜 나눌까요
"무엇을 할지"는 SBC가 정하고 "정확한 타이밍으로 실행"은 MCU가 맡아요.
상위 제어기 (SBC)리눅스가 도는 손바닥 보드카메라 영상 처리 · 경로 판단모델 추론무엇을 할지실시간 제어기 (MCU)OS 없는 작은 제어칩모터 구동 · 센서 읽기하드웨어 작업만정확한 타이밍으로 실행시리얼한 비트씩 줄 세워 보내요USB도 이 시리얼의 한 종류예요범용 OS는 여러 프로세스를 함께 돌리다 보니 타이밍이 미세하게 흔들려요(스케줄링 지터).그런데 모터 제어는 1 ms를 다투는 정밀한 일이라 그 흔들림을 못 견뎌요. 그래서 판단과 실행을 나눠요.사고가 나는 곳은 SBC도 MCU도 아니라 둘이 만나는 경계예요.

두 컴퓨터가 대화하는 방법은 시리얼 통신이에요. 데이터를 한 비트씩 줄 세워 보내는 오래된 방식이고, 매일 쓰는 USB도 이 시리얼의 한 종류예요. 통신 속도를 맞출 때 9600 같은 느린 보드레이트가 나오는데, 옛 장비들이 안정성 때문에 쓰던 값이 지금도 관습으로 남은 거예요.

문제는 경계에서 생겨요

경계에서 나는 사고 둘
사고가 나는 곳은 SBC도 MCU도 아니라 둘이 만나는 자리예요.
수신 검증두 컴퓨터에 전원을 동시에 넣음한쪽이 부팅되는 사이 신호가 깨져 들어옴그 깨진 데이터를 잡고 프로그램이 죽음잘못된 값이 오면 조용히 넘긴다자원 해제통신 포트를 열어둠다른 프로그램이 그 포트를 못 씀재접속이 막힘try / finally 로 반드시 닫는다둘 다 경계에서 나요. 웹캠을 놓아주고 파일을 닫는 것도 "빌린 자원은 돌려준다"는 같은 규칙이에요.

구조를 알고 나니 로봇이 덜 막막해졌어요. 판단과 실행을 나눠 맡고 그 사이를 시리얼로 잇는, 이유가 있는 설계였어요. 그리고 문제는 대개 한복판이 아니라 경계에서 생긴다는 것, 두 세계가 만나는 자리를 조심스럽게 다루는 게 로봇 다루기의 절반이라는 걸 배웠어요.

1 ms 실시간 제어와 계층 구조 이야기는 1kHz 제어 주기와 지터 — 로봇 제어가 1ms를 다투는 이유에 더 있어요.