로봇에는 모니터도 키보드도 없어요. 그래서 작업은 전부 내 컴퓨터에서 로봇 안의 컴퓨터로 접속해서 해요.
방법이 둘인데 성격이 갈려요. 글자 화면만 주는 방식과 화면 전체를 주는 방식이요.
앞의 것이 기본이에요. 글자만 주고받으니 훨씬 가볍고 끊길 위험이 적어요. 명령 실행, 파일 편집, 노드 실행 같은 대부분의 일이 여기서 끝나죠. 뒤의 것은 시각화 도구나 시뮬레이터처럼 그림이 필요할 때만 써요. 화면을 통째로 전송하니 무겁고, 무선이면 더 그래요.
세션이 끊기면 프로그램도 죽어요
여기서 이 글의 첫 번째 사고가 나와요.
로봇이 움직이면 무선 신호가 약해지는 구간이 생겨요. 벽 뒤로 들어가거나 거리가 멀어지면요. 그때 접속이 끊기는데, 문제는 끊긴 것으로 끝나지 않는다는 점이에요.
그 세션에서 띄운 프로그램도 같이 죽어요. 접속이 프로그램의 부모라서 부모가 사라지면 자식도 정리되거든요.
로봇이 주행 중이었다면 어떻게 될까요. 제어 노드가 죽었는데 로봇은 안 멈춰요. 마지막으로 받은 속도 명령을 그대로 유지하며 굴러가죠. 명령을 계속 안 받으면 멈추게 설계된 경우도 있지만, 그렇지 않으면 벽까지 갑니다.
대응은 정해져 있어요. 세션을 붙였다 뗐다 할 수 있는 도구 안에서 프로그램을 띄우는 거예요. 그러면 접속이 끊겨도 프로그램은 로봇 안에서 계속 돌고, 다시 접속해서 그 세션에 붙으면 아까 그 화면이 그대로 있어요.
이건 편의 기능이 아니라 안전 장치예요. 로봇을 원격으로 다루는 순간부터 기본값으로 두는 게 맞아요.
아무 로그 없이 노드가 사라져요
두 번째 사고는 원인 찾기가 훨씬 어려워요.
로봇 안의 컴퓨터는 자원이 작아요. 메모리가 몇 기가바이트뿐인 보드가 흔하죠. 노드를 여럿 띄우고 기록까지 남기면 메모리가 차요.
운영체제는 메모리가 부족해지면 프로세스를 강제로 죽여요. 그런데 하필 가장 큰 프로세스를 고르는 경향이 있어요. 그게 대개 핵심 노드죠.
증상이 고약해요. 아무 에러 로그 없이 노드가 사라져요. 예외도 스택 추적도 없어요. 그 노드가 스스로 죽은 게 아니라 밖에서 죽인 거니까요.
그래서 내 코드에서 원인을 찾으면 못 찾아요. 커널 로그를 봐야 메모리 부족으로 죽였다는 기록이 남아 있어요. 이 기록의 존재를 알면 5분, 모르면 며칠이에요.
예방은 두 갈래예요. 띄우는 노드 수를 줄이거나, 무거운 처리를 다른 컴퓨터로 옮기는 거예요. 앞 글에서 본 대로 노드는 네트워크를 넘어 통신하니, 센서는 작은 보드에서 읽고 무거운 추론은 데스크톱에서 돌리는 구성이 가능해요.
기록을 남길 때도 주의가 필요해요. 카메라 토픽까지 전부 기록하면 용량이 분 단위로 기가바이트씩 불어나면서 메모리와 디스크를 동시에 압박해요. 필요한 토픽만 이름으로 지정하는 게 기본이에요.
코드처럼 보이는데 코드가 아니에요
두 사고의 공통점이 이 글의 논지예요. 코드 문제가 아닌데 코드 문제처럼 보여요.
노드가 사라지면 그 노드의 코드를 봐요. 제어가 끊기면 제어 로직을 봐요. 그런데 원인은 네트워크와 메모리에 있죠. 증상이 나타난 곳과 원인이 있는 곳이 다른 종류의 문제예요.
그래서 로봇을 원격으로 다룰 때는 물어볼 순서를 따로 가져야 해요. 노드가 죽었으면 스스로 죽었는지 밖에서 죽였는지부터 갈라요. 앞의 것이면 로그가 남고, 뒤의 것이면 커널 쪽에 남아요. 통신이 안 되면 네트워크가 끊긴 건지 프로세스가 없는 건지부터 갈라요.
이 구분이 서면 후보가 확 줄어요. 어느 층의 문제인지만 알면 대개 원인은 금방 나와요.
자원이 작다는 전제로 짜요
정리하면 로봇 안의 컴퓨터를 대할 때 기본 전제가 셋이에요.
접속은 끊길 수 있어요. 그러니 프로그램은 접속과 독립해서 살아 있어야 해요. 메모리는 부족할 수 있어요. 그러니 띄우는 것과 기록하는 것을 필요한 만큼만 해요. 화면 전송은 비싸요. 그러니 그림이 꼭 필요할 때만 쓰고, 나머지는 글자로 해요.
셋 다 데스크톱에서는 신경 안 쓰던 것들이에요. 그리고 셋 다 어겼을 때 나오는 증상이 원인을 안 가리켜요. 그래서 미리 알아 두는 값이 큰 지식이죠.
노드를 어디에 배치할지의 판단은 ROS2 노드 입도와 컴포지션 — 복사 비용을 되돌리는 법에, 기록을 어떻게 남길지는 rosbag2 — 시계 축이 어긋난 기록은 조용히 틀려요에 있어요.