AI에게 실제 자동차를 맡기다.

최근 생성형 모델들은 단순 질의 응답, 글 또는 코드 작성 뿐만 아니라 MCP와 같은 도구 호출로 외부 환경과 상호작용하는 방향으로 역할을 강화하는 쪽으로 발전하고 있다. 특히 컴퓨터를 사용해서 특정한 상품을 주문하거나, 브라우저를 조작해서 사용자가 요구한 정보를 긁어오는 등 사람이 해야할 일을 차츰 대신해 나가고자 하고 있다.

그렇다면 이처럼 AI모델에게 물리 환경에 접근할 수 있는 도구를 쥐어 준다면 현실 세계의 물건을 컨트롤 하는게 가능하지 않을까. 이러한 아이디어에서 출발한 실험 프로젝트가 바로 DrivingBench(https://drivingbench.com/) 이다. 이 실험은 AI모델에게 차량의 카메라 화면과 차량 상태를 전달하고, 핸들과 가속, 제동을 제어할 수 있는 도구를 제공하여 직접 운전하도록 시킨 실험으로 현실과 가상 환경의 경계를 희미하게 만들지도 모르는 흥미로운 실험이다.

DrivingBench는 GPT-6 Astra, Claude Fable 5.1, Grok 4.6, GPT-5.6 Sol과 같은 범용 AI 모델에 실제 자동차를 제어할 수 있는 도구를 제공하고, 주차장에 설치한 콘 코스를 얼마나 주행할 수 있는지를 비교했다고 한다. 재미있는 점은 시뮬레이션 환경에서 가상의 차량을 움직인 것이 아니라 실제 차량 (2022년 형 Toyota Corolla) 을 사용했다는 것이다.


운전 연수생 : AI

Driving Bench 테스트는 넓은 공터 주차장에서 진행했고, 작은 콘을 이용해 하나의 주행 코스를 만들었다. 특히 코스에는 좌회전, 우회전, 긴 직선 구간, 굴곡 등이 포함되어 있어 실질적인 운전 성능을 테스트할 수 있도록 구성했고, 경로의 마지막에는 파란색 콘으로 표기된 주차 공간을 준비했다.

DrivingBench에서 테스트를 위해 구축한 경로. 출처 : DrivingBench

AI에게 주어진 목표는 간단히 콘 사이를 벗어나거나 장애물과 충돌하지 않으면서 코스를 이동해 마지막 파란색 주차공간까지 도달하는 것 이었다. 다만 실험 중 발생할 수 있는 돌발 상황에 대비해서 사람이 운전석에 탐승했고 코스를 벗어나거나 연석과 같은 장애물과의 충돌이 발생될 것으로 예상되는 경우에는 즉시 브레이크를 밟을 수 있도록 했다. 여기서 AI 의 역할은 정상적인 주행 과정에서 어디로 이동하며, 언제 방향을 얼마나 틀어야할 지를 결저하는 것이다.


AI가 실제 차량을 제어한 방법

DrivingBench 실험에서 중요한 장비 중 하나는 comma.ai의 comma four 라는 장비로, 일종의 운전자 보조 장치이다. 차량의 전방 카메라 영상과 속도, 조향 상태 등의 정보를 가져올 수 있다. DrivingBench가 공개한 보고서에는 다음과 같은 데이터 파이프라인을 구축했음을 보여주고 있다.

자동차 → comma four → 컴퓨터 → MCP 서버 → AI 모델

그리고 AI가 판단을 내리면 반대 방향으로 명령이 전달된다.

AI 모델 → MCP 서버 → 컴퓨터 → comma four/openpilot → CAN bus → 자동차

 차량 및 제어 장치, MCP, AI모델의 작동 구조 도식. 출처 : DrivingBench

즉, AI가 자동차의 전방 영상을 보고 현재 속도와 조향 상태를 확인한 뒤,

오른쪽으로 이 정도 핸들을 돌리고, 이 속도로 몇 초간 이동한다.

와 같은 명령을 내리는 방식으로 이때 MCP 서버스를 이용해서 차량을 간접적으로 이동하는 방식으로 진행된다. 이 때 openpilot과 DrivingBench에서 자체적으로 준비한 차량 제어 프로그램이 모델의 주행 명령을 실제 자동차가 이해할 수 있는 제어 값으로 바꾸는 작업을 담당했다.

모델이 자동차를 움직이기 위해서 사용한 핵심 명령은 크게 3가지로 - 속도 - 명령 지속시간 - 조향 비율(Steering Percent)

이며 AI가 "왼쪽 / 조향 60% / 1m/s / 10초" 와 같이 명령을 내리면 DrivingBench에서는 조향 비율 0~100% 를 핸들의 약 0~180도 회전에 대응시킨다. 이후 openpilot은 이 값을 자동차의 조향비에 맞게 바퀴의 실제 조향각과 차량 곡률, 필요한 조향 토크로 변환한다. 이후 명령은 차량 내부의 CAN 버스를 통해 전동식 파워스티어링(EPS)으로 전달된다.


스스로 적응할 수 있을까?

실험에서 발생했던 현실적인 제약을 AI 모델이 자체적으로 이해하고, 적응해야 했던 부분도 존재했다고 밝혔다. 이를 테면 Toyota 와 comma 구성에서는 핸들을 돌릴 수 있는 속도가 초당 최대 100도 정도로 제한되어있었다 . 따라서 AI는 프롬프트 예시로 부터 추론하거나, 기존의 진행 경험 및 대화에서 학습(in-context learning)해야 했다. 이는 AI가 제약 상황과 감각에 대해 적응하여 인지 → 경로 계획 → 차량 제어 → 실제 움직임 확인 → 다음 행동 수정과 같은 반복적인 피드백 루프를 만들어야 하는 과제인 것이다. 실제 차량이 얼마나 빠르게 핸들을 돌릴 수 있는지, 어느 정도 조향 명령을 내려야 자동차가 얼마나 회전하는지를 모델 스스로 경험하면서 맞춰가야 했다.

DrivingBench 연구진 역시 이 실험이 perception, planning, control뿐 아니라 모델의 추론 속도와 latency까지 동시에 시험하는 문제라고 설명한다.

한편 AI가 자동차를 제어할 수 있도록 하기 위해 연구진은 MCP(Model Context Protocol) 을 도입했다. MCP를 통해 모델은 observe( ), set_motion( ), stop_now( ) 3개 도구를 제공받게 된다.

도구 정의
observe( ) 현재 카메라 영상, 속도, 조향 상태 등을 반환
set_motion( ) 방향과 조향 비율, 속도, 지속 시간을 지정해 자동차를 움직임
stop_now( ) 즉시 제동

set_motion( ) 도구는 자동차가 움직이는 상태라고 할 지라도 새로운 set_motion 명령이 들어오면 기존 명령을 즉시 새 명령으로 교체하게 되는데, 이는 마치 사람처럼 차량이 움직이는 상태를 확인하면서 핸들과 페달을 수정하듯 작동하는것과 같은 동작을 가능하게 한다.


적절한 추론과 선택의 균형

이 실험에서 중요한 부분 중 하나는 어디로 갈지 어떻게 갈지 생각해내는 모델의 반환값이 아니라, 실제 차량을 적절한 시점에 움직여야 성공할 수 있다는 점이다. AI가 열심히 추론을 하는 와중에도 차량은 계속 움직이기 때문이다. 만약 AI가 어떤 명령을 입력 한 뒤 다른 행동을 고민하는 동안 자동차는 계속 앞으로 이동할 것이며, 그 다음 명령이 실행되는 순간 실제 차량은 물리적인 관성으로 인해 예상한 것과 다른 방향으로 이동할 수도 있다.

따라서 AI 모델이 실패하지 않기 위해서는 단순히 방향을 올바르게 정하는 것 만으로는 부족하며 자신의 추론 시간을 고려해서 다음 명령이 언제 내려져야 하는지 적절히 판단해야 한다. 바로 이 지점이 테스트에서 모델 간 차이를 나타내었던 핵심 지점이었다고 한다. 대부분의 모델은 차량을 움직이고 명령이 끝나면 정지한 상태에서 한참동안 생각한 뒤에 다음 행동을 결정했지만 GPT Astra와 GPT Sol 은 기존 주행 명령이 끝나기 전 새로운 명령을 보내어 기존 명령을 교체한 유일한 모델이었다고 하며, 특히 Astra는 약 5~6초마다 차량 상태를 체크하며 분당 약 6개의 명령을 내렸다. 반면 Fable은 두번째 시도에서 전체 190초 중 실제 자동차가 움직인 시간은 31초에 불과했으며 대부분의 시간을 차량을 세운 채 추론하는데 사용했다고 밝혔다 .

또 다른 중요한 실험 요소는 위에서도 언급했던 In-context-Learning 이다. 이는 모델이 실패하더라도 다시 학습하고 적응하는 것이 가능한지를 측정해 볼 수 있기 때문이다. 먼저 각 모델에는 같은 대화 안에서 최대 세 번의 주행 기회가 주어지게 되고, 한번의 시도가 실패하는 경우 모델에게 이전 주행 과정을 돌아보도록(reflection) 했다. 도구 출력을 통해 타임스탬프, 차량속도와 조향비 등을 제공하여 어디에서 실수가 발생했고, 왜 실패했는지, 다음에는 무엇을 바꿔야하는지를 모델 스스로가 분석하게 만든 것이다. 이후 대화 맥락을 유지한 상태(continuation)로 다시 운전하도록 요구했다. 즉 모델이 자신의 이전 경험을 대화 문맥(context)에 남겨두고 다음 행동을 수정할 수 있는지 확인한 것이다.

모델의 성과 비교

사용된 상용 모델은 Claude Fable, Gpt Sol, Gpt Astra, Grok X 로 코스를 완주한 모델은 GPT Astra가 유일했다고 연구진은 밝혔다. 먼저 Claude Fable 5.1 은 첫 시도에서는 전체 코스의 9%, 두번째 시도에서는 10% 정도만을 주행했지만 이후 세 번째 시도에서는 45% 까지 주행해냈다. 앞선 시도에서 콘 경계를 잘못 해석한 문제를 회고한 뒤 세 번째 시도에서는 어느 쪽이 실제 주행 차선인지 제대로 파악했고, 긴 직선 구간을 성공적으로 주행했다. 하지만 이후 우회전을 수행하기 위한 공간을 충분하게 남겨두지 못해 결국 코스 중간에서 실패하게 되었다. 또한 60~100% 정도의 큰 조향값을 사용했던 첫 시도와 달리, 이전 주행을 분석한 뒤에는 30%의 조향을 기본값으로 사용하는 법을 익히기도 했다. 이처럼 모델은 같은 행동을 반복하는것이 아니라 자신의 이전 테스트 성과를 바탕으로 도구 사용법 자체를 조금씩 보정해나갔다.

GPT-6 Astra 역시 첫 시도에서는 코스를 완주하지 못했지만 다른 모델과 달리 49%까지 주행에 성공했고, 첫 시도를 스스로 분석하며 문제점을 찾아내기도 했다. 이후 두번째 시도에서는 행동을 바꾸어 속도를 낮추거나 필요한 상황에 더 적극적인 조향을 시도하는 등 행동을 개선해나갔고 결과적으로 5분 22초만에 전체 코스를 완주해 내며 Driving Bench 에 참가한 모델 가운데 끝까지 완주한 유일한 모델이 되었다 .

공개된 보고서의 실험 결과를 정리하면 다음과 같다.

모델 최고 진행률
GPT-6 Astra (medium) 100%
Claude Fable 5.1 (medium) 45%
Grok 4.6 (medium) 11%
GPT-5.6 Sol (medium) 6%

운전을 거부한 사례

연구팀이 밝힌 실험 과정에서 예상하지 못했던 문제는 상당히 재미있는데, 일부 모델 특히 Astra 는 자신이 실제 차량을 주행하고 있다는 점을 인지하고 나서 실제 차량을 운전하는 것이 위험하다며 주행 자체를 거부 했다고 한다. 이러한 상황에서 실험을 이어가기 위해서 연구진은 차량이 완전하게 빈 공간에 있고, 속도가 매우 낮게 제한되어있으며, 사람이 운전석에 앉아 언제든 브레이크를 밟을 준비가 되어있다는 점을 설명했음에도 운전을 거부하는 경우가 많았다고 한다. 결국 연구진은 MCP의 이름을 DrivingBench Sandbox 라고 변경하고 나서야 모델이 일관되게 주행하도록 시킬 수 있었다고 기록했다.

이는 같은 도구와 환경을 갖춰놓았다 하더라도 AI가 상황을 어떤 맥락으로 해석하느냐에 따라 AI의 행동이 달라질 수 있음을 보여준다.


로봇을 움직이는 완성형 AI를 볼 수 있을까?

Driving Bench의 테스트는 단순히 “LLM 이 자동차를 주행할 수 있다” 정도의 실험이 아닌, 사고하는 AI 에이전트가 현실 속 물리적인 시스템을 다룰 때 어떤 문제가 발생하는지를 꽤 잘 보여주는 사례이기도 하다. 특히 LLM 은 자동차 제어를 위해 특별히 훈련된 자율주행 모델이 아니기에 카메라 이미지를 보고, 상황을 이해하며, 처음보는 도구의 의미과 자신의 판단이 어떤 결과를 만들어내는지도 경험을 통해 추정해 나가야 한다. 따라서 범용 생성형 모델이 물리 세계와 상호작용할 수 있는가를 실험했다는 점에서 더 흥미로운 케이스라고 느껴진다.


아울러 AI모델이 자신의 첫 시도에서 문제를 발견하고 다음 시도에서는 판단을 바꿔 코스를 완주했던 점은 앞으로의 AI에이전트의 발전 방향을 보여준다. 로봇과 자동차와 같은 물리적인 시스템에까지 MCP나 도구 호출 형태로 연결되고, 향상된 지연시간 절감이 이뤄진다면 AI의 행동 반경은 훨씬 더 넓어질 것이라는 낙관적인 기대도 해볼 수 있다.

생각하고, 판단하고, 도구를 사용하며, 결국 현실의 기계까지 움직이는 AI. 우리가 상상해 온 ‘완성형 AI’ 는 어쩌면 이런 모습에서부터 시작될지도 모른다.

참고

  • https://drivingbench.com/report/

댓글

이 블로그의 인기 게시물

[R_bigdata] Rstudio 설치, 한글 깨짐 방지 설정

[R_bigdata] R을 활용한 시각화(도식)

[R_bigdata] R의 함수, 사용자 정의 함수 만들어보기