테슬라 옵티머스처럼 고성능 로봇을 만든다면: 제어 정책만큼 중요한 소프트웨어 시스템 설계의 함정

최첨단 로봇 시스템은 복잡한 제어 **정책(Policy)**과 정교한 소프트웨어 시스템의 결합으로 작동합니다. 로봇이 예상대로 움직이지 않을 때마다 우리는 종종 인공지능이 설계한 제어 정책만을 의심하곤 합니다. 하지만 전문가들은 문제의 근원이 정책이 아니라 데이터를 전달하고 수집하는 기본 소프트웨어 시스템에 있는 경우가 많다고 지적합니다. 이 글은 고성능 로봇을 설계할 때 반드시 고려해야 할 통신 지연, 데이터 동기화, 시스템 오버헤드 등 소프트웨어 시스템의 주요 함정을 분석하고 그 해결책을 제시합니다.

CAN 통신 지연 문제와 파이프라인 기법

로봇의 핵심 부품인 액추에이터, 센서, CPU는 보통 **CAN(Controller Area Network)**이라는 통신 프로토콜로 데이터를 주고받습니다. CAN 통신은 저렴하고 호환성이 좋지만, 고속으로 많은 데이터를 처리할 때는 병목 현상이 발생하기 쉽습니다. 예를 들어, 2밀리초(ms) 주기로 작동해야 하는 제어 루프에서 10개의 메시지를 전송하고 수신하면, 통신 시간만 1ms가량 소요될 수 있습니다.

이러한 통신 시간은 제어 루프 실행 시간과 비슷한 수준이 되어, 결국 루프 주기가 3ms로 지연되는 결과를 낳습니다. 이 1ms의 지연은 고성능 로봇에게 치명적인 성능 저하로 이어집니다. 따라서 단순한 지연을 감수하기보다는 시스템 구조를 근본적으로 개선해야 합니다. 우리는 작업을 세분화하고 병렬 처리하여 이 문제를 해결할 수 있습니다.

가장 효과적인 방법은 **멀티 스레딩(Multi-threading)**을 통해 제어 루프를 **파이프라인(Pipelining)**화하는 것입니다. 즉, 데이터를 송신(TX), 수신(RX), 그리고 정책 실행(Policy) 세 가지 독립적인 스레드로 분리합니다. 이렇게 작업을 나누어 다음번 데이터를 수신하는 작업을 현재 정책이 완료되기 전에 미리 시작합니다. 이처럼 파이프라인 구조를 도입하면 통신 지연 시간을 효과적으로 숨기고 원래 목표였던 2ms의 루프 시간을 유지할 수 있습니다.

 

액추에이터 떨림 현상과 동기화 문제 해결

시스템을 멀티 스레드로 구성하면, 이번에는 스레드 간의 동기화(Synchronization) 문제가 새로운 성능 저하를 일으킵니다. 만약 제어 정책 실행 시간이 길어져 데이터 송신(TX) 시점을 놓치면, 이전 메시지와 현재 메시지 두 개가 다음 루프에서 한꺼번에 전송됩니다. 이처럼 두 명령이 동시에 액추에이터에 전달되면, 로봇은 심하게 떨리는(Jitter) 비정상적인 움직임을 보이게 됩니다.

마찬가지로, 데이터 수신(RX) 스레드가 지연되면 정책은 이전 루프의 오래된 데이터를 가지고 작동하게 됩니다. 이로 인해 로봇은 중간 과정을 건너뛴 채 뒤늦게 두 명령을 한 번에 따라잡으려는 듯한 동작을 보입니다. 이러한 떨림 현상은 제어 정책의 오류처럼 보이지만, 실제로는 소프트웨어 동기화의 실패에서 비롯된 문제입니다.

이 문제를 해결하려면 **뮤텍스(Mutex)**나 **세마포어(Semaphore)**와 같은 저수준의 시스템 동기화 기본 요소를 활용해야 합니다. 만약 실시간 운영체제(RTOS)나 마이크로컨트롤러 환경처럼 이러한 기능이 제한적이라면 패딩(Padding) 기법을 적용할 수 있습니다. 데이터를 처리할 때 약간의 여유 공간이나 완충 장치(Cushion)를 두어 데이터가 정확한 시점에 올바른 정책에 입력되도록 보장해야 시스템의 강건성(Robustness)이 확보됩니다.

 

성능 저하의 숨은 주범, 로깅과 우선순위 역전

로봇 시스템에서 디버깅을 위해 사용하는 로깅(Logging) 기능조차 치명적인 시스템 지연을 유발할 수 있습니다. 제어 루프가 너무 많은 정보를 로그로 기록하고 이를 하드디스크에 저장하려 할 때 문제가 발생합니다. 특히 SD 카드 같은 느린 저장 매체를 사용하는 경우, 이 디스크 쓰기 작업 때문에 로봇의 핵심 제어 루프가 수십 밀리초 동안 멈출 수 있습니다.

이러한 로깅 오버헤드를 막는 가장 확실한 방법은 로깅 기능을 전담하는 별도의 CPU를 추가하는 것입니다. 또한, 마이크로컨트롤러에서는 로그를 기록하는 간단한 UART(범용 비동기 송수신기) 통신조차 밀리초 단위의 시간을 소모합니다. 따라서 패킷 드롭이 발생했을 때 이를 로그로 남기는 행위가 오히려 다음 패킷 드롭을 유발하여 시스템 전체가 마비되는 연쇄적인 문제를 일으키지 않도록 주의해야 합니다.

마지막으로, 우선순위 역전(Priority Inversion) 현상 역시 주의해야 합니다. 로봇 공학에서는 주요 제어 프로세스의 우선순위를 너무 높게 설정하는 경향이 있습니다. 하지만 이처럼 우선순위를 지나치게 높이면, 데이터 수집을 담당하는 리눅스 커널(Kernel) 프로세스가 오히려 실행되지 못하고 차단될 수 있습니다. 결국 데이터를 받고자 우선순위를 올린 행위가 데이터 수신 자체를 막아 시스템이 멈추는 역설적인 상황이 발생하는 것입니다.

 

고성능 로봇 시스템의 성공은 단순히 뛰어난 AI 제어 정책을 개발하는 것에만 달려있지 않습니다. 정책과 하드웨어 사이에서 데이터를 빠르고 안정적으로 처리하는 소프트웨어 시스템의 설계가 필수적입니다. 통신 지연을 극복하기 위한 파이프라인 구조 도입, 액추에이터 떨림을 막기 위한 정교한 스레드 동기화, 그리고 시스템을 마비시키는 로깅 오버헤드 관리 및 우선순위 역전 회피가 핵심 고려 사항입니다. 이러한 소프트웨어 공학적 함정들을 사전에 인지하고 해결할 때 비로소 로봇은 본래 설계된 대로 빠르고 정확하게 임무를 수행할 수 있게 됩니다.

출처: AI Engineer 유튜브

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다