Skip to main content
Summary

이해에서 움직임으로 넘어가는 마지막 관문

VLA에서 시각과 언어를 이해하는 능력은 출발점일 뿐이다. 로봇은 "파란 컵을 집어라"라는 지시를 듣고 컵을 찾는 데서 끝나지 않는다. 팔을 어디로 뻗을지, 손목을 얼마나 돌릴지, 집게를 언제 닫을지 결정해야 한다. 더 나아가 그 결정은 실제 모터가 수행할 수 있는 명령으로 바뀌어야 한다.

이때 필요한 부분이 행동 디코더(action decoder)다. 행동 디코더는 멀티모달 표현을 로봇의 행동 출력으로 바꾸는 모델의 끝단이다. 앞 장에서 말한 표현이 "무엇을 해야 하는지 이해한 내부 지도"라면, 행동 디코더는 그 지도를 보고 "지금 몸을 어떻게 움직일지"를 정하는 장치다.

중요한 점은 행동 디코더가 곧바로 모터 전압이나 토크를 내보내는 경우는 드물다는 것이다. VLA의 출력은 보통 중간 수준의 행동이다. 예를 들어 로봇 팔 끝을 오른쪽으로 3cm 움직이라거나, 손목을 조금 회전시키라거나, 그리퍼를 닫으라는 식이다. 이 출력은 다시 로봇 제어기를 거쳐 관절 각도, 속도, 힘, 토크 같은 더 낮은 수준의 명령으로 변환된다.

모델이 아무리 장면을 잘 이해해도 이 연결이 불안정하면 로봇은 일을 하지 못한다. 컵을 정확히 인식했지만 팔이 너무 빠르게 움직여 컵을 밀어버릴 수 있다. 목적지는 맞았지만 손목 각도가 틀려 물체를 잡지 못할 수 있다. 그래서 VLA의 성능은 "정답을 아는가"보다 "정답을 안전한 움직임으로 바꿀 수 있는가"에서 결정된다.

행동 디코더와 로봇 제어의 연결AI 생성 이미지

행동은 어떤 형태로 출력되는가

행동 디코더의 출력 형식은 크게 네 가지로 나눌 수 있다. 연속 좌표, 이산 행동 토큰, 궤적, 서브태스크 명령이다. 이 네 방식은 서로 배타적이지 않다. 실제 시스템에서는 둘 이상을 섞어 쓰기도 한다.

첫째, 연속 행동(continuous action) 방식이다. 모델이 실수값을 직접 출력한다. 예를 들어 x 방향으로 0.02m, z 방향으로 -0.01m, 손목 yaw 5도, 그리퍼 닫기 같은 값이다. 로봇 팔 조작에서는 엔드이펙터의 위치 변화, 회전 변화, 그리퍼 상태를 묶어 하나의 행동 벡터로 표현하는 경우가 많다. 여러 실험용 VLA 정책에서는 3차원 위치, 3차원 회전, 1차원 그리퍼 상태를 합친 7차원 행동 형식을 사용한다1.

연속 행동의 장점은 정밀함이다. 물체를 살짝 밀거나 손목 각도를 조금 조정하는 작업에 적합하다. 단점은 학습과 실행이 민감하다는 점이다. 출력값의 단위, 범위, 정규화 방식이 조금만 달라도 로봇이 전혀 다른 크기로 움직일 수 있다. 데이터셋에서 학습한 행동 값은 보통 정규화되어 있으므로, 실제 실행 전에는 로봇과 데이터셋에 맞게 다시 원래 단위로 되돌리는 과정이 필요하다.

둘째, 이산 행동 토큰(discrete action token) 방식이다. 행동을 언어 모델이 다루기 쉬운 토큰처럼 만든다. 예를 들어 x축 이동량을 여러 구간으로 나누고, 각 구간에 하나의 토큰을 붙인다. "왼쪽 조금", "앞으로 많이", "그리퍼 닫기" 같은 기호적 표현도 가능하다. VLA 연구에서는 로봇 명령을 숫자 또는 기호 토큰으로 표현해 비전-언어 모델의 다음 토큰 예측 구조에 연결하는 접근이 사용되어 왔다2.

이 방식의 장점은 언어 모델 구조와 잘 맞는다는 것이다. 문장을 생성하듯 행동을 생성할 수 있다. 또 행동 공간을 제한하므로 이상한 값이 튀어나올 위험을 줄일 수 있다. 그러나 값을 구간으로 나누기 때문에 정밀도가 떨어질 수 있다. 2.1cm와 2.9cm가 같은 토큰으로 묶이면 미세한 조작에서는 차이가 사라진다. 반대로 토큰을 너무 촘촘히 만들면 학습해야 할 선택지가 많아져 데이터가 더 필요하다.

셋째, 궤적(trajectory) 또는 행동 청크(action chunk) 방식이다. 모델이 한 번에 한 동작만 내는 것이 아니라, 앞으로 몇 단계의 행동 시퀀스를 출력한다. 예를 들어 다음 0.5초 동안의 위치 변화 5개를 한꺼번에 예측한다. 이는 사람이 공을 잡을 때 손의 다음 위치를 순간마다 새로 생각하지 않고, 짧은 움직임 덩어리로 실행하는 것과 비슷하다.

궤적 출력은 움직임을 부드럽게 만들 수 있다. 한 단계 행동만 반복해서 생성하면 출력이 흔들릴 수 있는데, 짧은 미래를 함께 예측하면 전체 방향이 안정된다. 그러나 환경이 갑자기 바뀌면 이미 만든 궤적을 수정해야 한다. 그래서 궤적 방식은 폐루프 제어와 함께 써야 한다. 즉, 몇 단계를 실행하더라도 중간중간 다시 보고 계획을 고쳐야 한다.

넷째, 서브태스크 명령(subtask command) 방식이다. 행동 디코더가 "컵 위로 이동", "접근", "잡기", "들기", "놓기"처럼 더 추상적인 명령을 출력한다. 이 명령은 별도의 모션 플래너나 제어 정책이 실제 움직임으로 바꾼다. 이 방식은 장기 작업에 강하다. 예를 들어 "식탁을 정리하라"는 명령은 여러 물체를 찾고, 잡고, 옮기는 작은 단계로 나뉜다.

하지만 서브태스크 명령은 인터페이스가 어렵다. "컵 위로 이동"이라는 명령이 정확히 어느 좌표를 뜻하는지, 어느 정도 속도로 접근해야 하는지, 실패하면 어떻게 다시 시도할지 별도로 정의해야 한다. 추상 명령은 이해하기 쉽지만, 실행 가능한 명령으로 바뀌지 않으면 공허하다.

고수준 정책과 저수준 제어기

로봇 시스템은 보통 두 층으로 나뉜다. 위쪽에는 고수준 정책(high-level policy)이 있다. 이는 VLA가 담당하는 경우가 많다. 장면을 보고 언어 지시를 해석하며 다음 행동의 의도를 정한다. 아래쪽에는 저수준 제어기(low-level controller)가 있다. 이는 로봇의 관절, 모터, 힘, 속도를 빠르게 조절한다.

이 분리는 매우 중요하다. 고수준 정책은 의미를 다룬다. "컵을 잡아라", "책 옆에 놓아라", "손잡이를 다시 찾아라" 같은 판단을 한다. 저수준 제어기는 물리적 안정성을 다룬다. 관절 제한을 넘지 않는지, 속도가 너무 빠르지 않은지, 목표 위치까지 부드럽게 갈 수 있는지 확인한다.

분리의 장점은 명확하다. 첫째, VLA가 모든 물리 계산을 직접 하지 않아도 된다. 둘째, 같은 고수준 정책을 여러 로봇에 옮길 가능성이 생긴다. 로봇마다 팔 길이와 관절 구조는 달라도 "엔드이펙터를 이 방향으로 움직인다"는 중간 표현은 공유할 수 있다. 셋째, 안전 장치를 저수준 제어기에 넣을 수 있다. 모델이 실수해도 제어기가 속도 제한, 충돌 회피, 비상 정지를 수행할 수 있다.

하지만 분리에는 인터페이스 문제가 따른다. 고수준 정책이 내는 행동을 저수준 제어기가 정확히 이해해야 한다. 출력이 절대 좌표인지 상대 좌표인지, 기준 좌표계가 카메라인지 로봇 베이스인지, 회전 표현이 오일러 각인지 쿼터니언인지 명확해야 한다. 작은 해석 차이가 큰 실패로 이어진다.

예를 들어 모델이 "z를 5cm 올리라"고 출력했다고 하자. 이 z축이 카메라 기준 위쪽인지, 로봇 베이스 기준 위쪽인지, 엔드이펙터의 현재 자세 기준 앞쪽인지에 따라 움직임은 완전히 달라진다. 사람이 보기에는 단순한 숫자 하나지만, 로봇에게는 좌표계 정의가 곧 행동의 의미다.

또 하나의 문제는 시간이다. 고수준 정책은 보통 느리다. 큰 모델일수록 추론 시간이 길다. 반면 저수준 제어기는 빠르게 돌아야 한다. 모터 제어는 수십 Hz에서 수백 Hz 이상으로 작동할 수 있다. VLA가 매 순간 모든 모터 명령을 직접 생성하기 어렵기 때문에, 실제 시스템에서는 VLA가 낮은 빈도로 목표 행동을 주고 제어기가 높은 빈도로 그 목표를 따라가는 구조가 자주 사용된다.

로봇 팔 행동의 기본 단위

로봇 팔 조작에서 가장 자주 쓰이는 행동 표현은 엔드이펙터(end effector) 중심 표현이다. 엔드이펙터는 로봇 팔 끝에 붙은 도구다. 사람 손에 해당하는 부분이며, 그리퍼, 흡착기, 용접기, 드라이버 등이 될 수 있다.

물체를 조작할 때 중요한 것은 모든 관절의 각도를 직접 정하는 것보다 손끝이 어디에 있고 어떤 방향을 향하는가다. 그래서 정책은 보통 엔드이펙터의 위치, 회전, 그리퍼 상태를 출력한다.

위치는 x, y, z 세 값으로 표현된다. x는 좌우, y는 앞뒤, z는 위아래처럼 생각할 수 있다. 실제 좌표축 방향은 로봇 설정에 따라 다르지만, 핵심은 3차원 공간에서 손끝의 이동을 지정한다는 점이다.

회전은 손목의 방향을 나타낸다. 컵을 잡을 때는 손가락이 컵 옆면을 향해야 하고, 서랍 손잡이를 잡을 때는 손목 방향이 손잡이와 맞아야 한다. 회전은 roll, pitch, yaw 같은 세 각도로 표현할 수도 있고, 쿼터니언(quaternion)이라는 네 개의 숫자로 표현할 수도 있다. 쿼터니언은 3차원 회전을 안정적으로 계산하기 위한 방식이다. 처음 보면 낯설지만, 로봇 내부에서는 손목 방향을 부드럽게 다루기 위해 자주 사용된다.

그리퍼 상태는 보통 단순하다. 열기, 닫기, 또는 얼마나 닫을지의 연속값으로 표현된다. 하지만 실제로는 이 한 값도 중요하다. 너무 일찍 닫으면 물체에 닿기 전에 허공을 잡는다. 너무 늦게 닫으면 물체를 밀어버린다. 너무 세게 닫으면 약한 물체를 부술 수 있다.

따라서 "집기"라는 행동은 단일 명령이 아니다. 접근 위치, 손목 방향, 속도, 그리퍼 타이밍, 접촉 후 힘 조절이 함께 맞아야 한다. VLA의 행동 디코더는 이 복합적인 움직임을 간단한 벡터나 토큰으로 압축해 출력한다. 그 압축이 잘못되면 의미는 맞지만 행동은 실패한다.

실시간 제어가 모델 설계를 바꾼다

물리 세계에서는 시간이 모델의 일부다. 텍스트 생성에서는 답변이 0.5초 늦게 나와도 큰 문제가 아닐 수 있다. 그러나 로봇 팔이 움직이는 동안 0.5초는 길다. 사람이 갑자기 손을 뻗거나, 물체가 미끄러지거나, 로봇이 이미 목표 지점을 지나칠 수 있다.

여기서 중요한 개념이 추론 지연(inference latency)이다. 추론 지연은 센서 입력을 받은 뒤 모델이 행동을 출력하기까지 걸리는 시간이다. 카메라가 이미지를 찍고, 모델이 장면을 해석하고, 행동 디코더가 출력을 만들고, 제어기가 실행하기까지 시간이 흐른다. 이 지연이 커지면 로봇은 과거의 세계를 보고 현재 행동하게 된다.

또 하나는 제어 주기(control cycle)다. 제어 주기는 로봇이 얼마나 자주 상태를 읽고 명령을 갱신하는지를 말한다. 10Hz라면 0.1초마다 한 번, 100Hz라면 0.01초마다 한 번 갱신한다. 고속 조작이나 접촉 작업은 더 빠른 제어가 필요하다. 하지만 VLA 모델은 계산량이 크기 때문에 높은 주기로 직접 실행하기 어렵다.

이 문제를 해결하는 방법은 여러 가지다. 첫째, VLA는 낮은 주기로 목표 행동을 정하고, 저수준 제어기가 높은 주기로 따라가게 한다. 둘째, 행동 청크를 출력해 몇 단계의 움직임을 미리 제공한다. 셋째, 작은 정책 모델이나 별도 제어기를 사용해 큰 모델의 출력을 빠르게 보정한다. 넷째, 위험한 상황에서는 모델 판단을 기다리지 않고 안전 제어기가 즉시 멈춘다.

이때 필요한 것이 안전 정지 조건(safety stop condition)이다. 로봇이 계속 움직이면 위험하다고 판단되는 기준이다. 예를 들어 예상보다 큰 힘이 감지될 때, 사람이 작업 공간에 들어왔을 때, 목표와 실제 위치 차이가 커질 때, 모델 출력이 허용 범위를 벗어날 때, 센서가 끊겼을 때 로봇은 멈춰야 한다.

안전 정지는 모델의 실패를 인정하는 설계다. 좋은 로봇 시스템은 "절대 틀리지 않는 모델"을 전제로 하지 않는다. 모델이 틀릴 수 있고, 센서가 흔들릴 수 있으며, 물체가 예상과 다르게 움직일 수 있다고 보고 대비한다. Physical AI에서 안전은 성능 위에 덧붙이는 장식이 아니라 행동 생성 구조 안에 들어가야 하는 기본 조건이다.

행동 디코더는 로봇의 언어 번역기다

행동 디코더는 단순한 출력층이 아니다. 로봇이 이해한 의미를 몸의 언어로 번역하는 장치다. 이 번역에는 세 가지 질문이 들어 있다.

첫째, 무엇을 출력할 것인가. 연속 좌표를 낼 것인지, 행동 토큰을 낼 것인지, 짧은 궤적을 낼 것인지, 서브태스크 명령을 낼 것인지 정해야 한다. 최근 VLA 연구들은 연속 정책 헤드, 이산 행동 예측, 연속 행동 시퀀스 등 다양한 형식을 비교하며 어느 인터페이스가 실제 로봇에 더 적합한지 탐색하고 있다3.

둘째, 누가 책임질 것인가. VLA가 세밀한 움직임까지 직접 책임질 수도 있고, VLA는 목표만 정하고 저수준 제어기가 실행을 책임질 수도 있다. 전자는 단순해 보이지만 데이터와 안정성 부담이 크다. 후자는 안전하고 재사용하기 쉽지만 인터페이스 설계가 까다롭다.

셋째, 언제 다시 판단할 것인가. 로봇은 한 번 결정하고 끝까지 밀어붙이면 안 된다. 움직인 뒤 다시 보고, 접촉을 느끼고, 실패했으면 수정해야 한다. 컵을 놓쳤다면 다시 위치를 잡아야 하고, 손잡이를 빗맞혔다면 손끝 위치를 조정해야 한다. 실제 로봇 실행에서 이런 자기 수정 능력은 행동 출력과 피드백 제어가 잘 연결될 때 나타난다.

결국 VLA의 지능은 행동 디코더에서 시험대에 오른다. 시각과 언어를 잘 이해하는 모델은 많아질 수 있다. 하지만 물체를 안정적으로 잡고, 사람 옆에서 안전하게 움직이며, 실패 후 다시 시도하는 로봇은 이해만으로 만들어지지 않는다. 고수준 판단, 행동 표현, 저수준 제어, 실시간 피드백, 안전 정지가 하나의 흐름으로 묶여야 한다.

다음 장에서 다룰 로봇 데이터의 병목도 이 지점과 연결된다. 행동 디코더가 좋은 출력을 배우려면 단순한 이미지와 문장만으로는 부족하다. 어떤 장면에서 어떤 행동을 했고, 그 행동이 어떤 결과를 냈는지에 대한 데이터가 필요하다. 로봇에게 중요한 데이터는 정답 문장이 아니라 성공한 움직임의 기록이다.

참고

1Vision Language Action Models (VLA) Overview: LeRobot Policies Demo

2Vision-Language-Action (VLA) Models: Concepts, Progress, Applications and Challenges

3What matters in building vision–language–action models for generalist robots

책 목록

VLA와 Physical AI: 로봇의 다음 세대

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기