클로드가 비행기를 조종할 수 있을까?
한 사용자가 앤스로픽의 AI 모델 '클로드'에게 X-Plane 12 비행 시뮬레이터 API를 검색하게 하고, Cessna 172 항공기를 이륙시켜 인근 공항으로 비행 및 착륙을 시도하게 했습니다. 클로드는 비행에 필요한 파이썬 제어 스크립트를 스스로 작성하고 실시간으로 수정했지만, 데이터 처리 지연과 급격한 자세 제어로 인해 두 차례 비행기가 추락하는 결과를 낳았습니다. 이 실험은 대규모 언어 모델이 복잡하고 역동적인 시스템 제어 환경에서 어떻게 대응하고 코드를 개선해 나가는지 보여주는 인상적인 사례입니다.
클로드에게 X-Plane 12 API를 검색해보라고 한 뒤, 하이난 섬에서 인근 어딘가로 세스나(Cessna)를 몰고 가 보라고 요청했습니다. 클로드는 비행 로그를 기록했습니다. 아래의 모든 내용은 비행 중 클로드가 직접 작성한 노트입니다. 저는 가끔 비행 로그를 계속 기록하라고 알려줘야 했고, 비행기가 추락할 때마다 X-Plane이 빠르게 활주로로 재시작해 버리기 때문에 추락 사실을 알려줘야만 했습니다. 가장 큰 문제는 스크린샷과 API 데이터로 상황을 인지하고 기체를 조종하는 과정에서 발생하는 지연 시간 때문에 방향을 제때 바꾸지 못한다는 점이었습니다. 클로드는 이륙을 위한 파이썬 스크립트를 빠르게 스스로 만들었고, 비행 중 필요한 조치에 따라 스크립트에 함수들을 추가했습니다. 착륙 진입(Position to land)을 위해 자세를 잡은 후 각도를 충분히 빠르게 바꾸지 못해 땅에 추락하고 말았습니다.
15:54 하이커우 메이란 공항(ZJHK) 09번 활주로에 정렬 완료. 세스나 172, 스로틀 아이들(최소 출력), 주차 브레이크 설정됨. 위치 북위 19.93도, 동경 110.44도, 고도 해발 73피트(ALT 73 ft MSL), 방위각 092. 목적지: 충하이 보아오 공항(ZJQH), 남쪽으로 약 47해리. 계획: 최대 출력, 약 55노트에서 기수 올림(rotate), 최적 상승 속도(Vy) 75노트로 해발 4,500피트까지 상승, 남쪽(180도)으로 회전, 순항, 하강, 18번 활주로 착륙 시도.
15:57 이륙(AIRBORNE). 약 12초간의 지상 활주 후 활주로를 깔끔하게 벗어남. 기수 올림 속도 55노트, 분당 861피트 상승, 지시 공속(IAS) 70노트, 기수 11.4도 상향, 양쪽 날개 수평, 지상 높이 411피트. 이륙 활주 중 출력 가감 시 발생하는 전형적인 172 기종의 좌요(yaw) 현상으로 인해 방위각이 80~92도 사이로 틀어졌으나 방향타 루프가 이를 바로잡음. 기수가 약간 너무 올라가 속도가 목표 상승 속도(Vy) 밑으로 처짐. 제어를 hold_loop에 넘기고 기수 상태를 공속으로 전환할 예정.
15:59 자세 요동(UPSET). 기수를 올린 직후 제어를 hold_loop에 넘겼는데, 제어기가 분당 861피트 상승률을 목푯값인 700피트에 비해 너무 높다고 판단함. 엘리베이터를 최대 전방(하강)으로 명령. 기체가 급격히 기수를 숙이며 125노트까지 가속됨, 60도 좌측 기울어짐(LEFT bank) 발생, 루프가 이를 되돌리기 전까지 방위각이 092도에서 229도까지 급변함. 현재 75노트, 좌우 기울기 +5도, 방위 100도, 최대 출력 상태에서 분당 143피트 상승 중, 해발 415피트. 회복되었지만 흔들린 상태. 근본 원인: 기수 하강 속도에 대한 제한이 없는 상태에서 엘리베이터 제어 이득(gain)이 너무 높았고, 게다가 목표 고도보다 4,000피트나 아래에 있는 상황에서 제어기가 기수를 숙이라고(nose-DOWN) 명령했음.
16:00 추락(CRASHED). 자세 요동 상태에서 기수부터 지면에 충돌함. 위치가 09번 활주로로 초기화됨. 변화율 제한(slew-rate limits), 비대칭 수직 속도(VS) 목푯값(목표 고도보다 훨씬 낮을 때 기수를 숙이지 않음), 이륙 상태에서의 부드러운 제어 전환, 저고도 안전장치(failsafe)를 포함하여 hold_loop를 다시 작성함. 다시 시도합니다.
16:09 세 번째 시도, 안정적인 비행(STABLE FLIGHT). 제어기를 순수 비례(P) 제어로 재작성함: 고도 오차(alt_err)를 목푯값 제한이 있는 목표 피치(target_pitch)로 변환하고, 이를 피치 자세에 대한 P-제어기로 엘리베이터에 연결. 내부 루프에 적분(Integral) 항을 두지 않고, 기체 자체를 적분기로 활용. 이륙 후 순항 유지 루프가 지시 공속 82노트, 기수 +7도, 분당 780피트 상승, 기울기 1도에서 안정되었으며 방위각 오차 4도 이내 유지됨. 현재 해발 763피트에서 1,500피트를 향해 상승 중. 계획: 계속 상승한 후 좌측 트래픽 패턴 비행(횡풍 002, 미풍 272, 기저 182, 최종진입 092), 하강, 착륙.
16:12 안정적인 순항. 해발 1,200피트 목표를 약 600피트나 초과하여 올라감(최대 출력으로 상승하여 제어기가 제때 상승을 멈추지 못함, 예측 로직이 필요함). 하지만 해발 1,819피트, 82노트, 방위 092도에서 안정화됨. 활주로 동쪽 약 4해리 지점. 다음으로 좌측으로 회전하여 횡풍 방위 002도로 전환 예정.
16:15 미풍 구간(Downwind leg) 방위 272, 해발 1,438피트, 83노트, 양쪽 날개 수평, 분당 110피트 하강 중. 현재 활주로 진입점 기준 동쪽 5해리, 북쪽 2.3해리 지점. 공항 서쪽을 가로질러 비행한 뒤 남쪽으로 향했다가, 최종 진입을 위해 다시 동쪽으로 회전해야 함.
16:20 미풍 구간 연장 성공. 09번 활주로 진입점 기준 서쪽 2.0해리, 북쪽 2.3해리. 해발 800피트, 81노트, 양쪽 날개 수평. 비행기가 75노트로 감속하지 않았으며, 속도-스로틀 제어 이득이 너무 느렸음. 속도를 줄이기 위해 플랩을 20도 설정하고, 좌측 기저 구간(base 182)으로 회전 중.
16:23 기저 구간 회전 완료, 그러나 여전히 활주로 중심선 기준 북쪽 1.4해리 지점에 위치함. 기저 구간이 너무 짧았고, 겨우 0.9해리 남쪽으로 이동함. 또한 지시 공속(IAS)이 58노트까지 떨어짐(너무 느림, 플랩 + 하강 스로틀 제한의 영향). 하강 중 속도가 떨어지면 스로틀을 다시 올리도록 제어기를 패치함. 최종 진입으로 돌아서기 전 중심선에 도달하기 위해 기저 구간을 약 90초간 더 연장함.
16:31 두 번째 추락(CRASHED #2), 원인은 다름. 비행기는 느린 하강 상태에서 안정적이었으나, fly.py 스크립트가 실행되는 사이(로그를 남기고 다음 기동을 계산하는 동안 약 20초의 공백 발생)에는 활성화된 제어기가 없었음. 비행기는 마지막으로 명령된 제어 상태를 유지한 채 계속 하강하다가 땅에 추락했습니다.