게임 엔진과 항공우주 시뮬레이션 사이의 간극 메우기
항공우주 소프트웨어 개발은 오랫동안 고충실도 시뮬레이션과 개발자 편의성 사이의 격차로 인해 어려움을 겪어 왔습니다. 수년 동안 업계 표준은 제어 로직을 위한 MATLAB/Simulink, 물리학을 위한 Gazebo, 그리고 오케스트레이션을 위한 커스텀 Python 스크립트를 결합하는 등 서로 다른 도구들을 짜깁기하는 방식이었습니다. 이러한 파편화된 워크플로우는 시뮬레이션에서 실제 비행으로 전환할 때 위험이 따르는 "fragile"한 스택을 초래하는 경우가 많습니다.
이를 해결하기 위해, Elodin은 50만 달러 규모의 자율 드론 레이싱 대회인 Anduril의 AI Grand Prix를 위해 설계된 연습용 리그(practice rig)를 오픈 소스로 공개했습니다. 공식 Virtual Qualifier 1 시뮬레이터를 기다리는 참가자들을 위한 입문서 역할을 하도록 의도되었지만, 이 프로젝트는 게임 산업의 직관을 빌려와 현대적인 항공우주 도구 제작 방식을 보여주는 더 넓은 철학을 드러냅니다.
현대적 비행 시뮬레이션의 아키텍처
Elodin의 접근 방식은 전통적인 "짜깁기" 모델에서 벗어나 통합된 고성능 스택을 지향합니다. 시스템의 핵심은 **Rust ECS (Entity Component System)**와 nox라고 불리는 JIT 컴파일 방식의 물리 코어로 구축되었습니다.
주요 기술 구성 요소:
- Physics Core: 타입이 지정된 컴포넌트에 대해
@el.map함수를 사용하는 JAX 스타일의 코드로 작성되었습니다. 이 아키텍처를 통해 GPU 가속, 몬테카를로 시뮬레이션, 그리고 비트 단위의 결정론적 리플레이(deterministic replays)가 자연스럽게 가능해집니다. - The Editor: TCP를 통해 시계열 텔레메트리 데이터베이스(
elodin-db)에 연결되는 3D 에디터입니다. 이를 통해 개발자는 GLB 모델, 플롯, 카메라 피드를 ECS 컴포넌트에 직접 실시간으로 바인딩할 수 있습니다. - Process Orchestration: 소규모 프로세스 러너(
s10)를 통해 단일 Python 엔트리 포인트에서 비행 제어기, 렌더 서버, 외부 추정기(estimator)를 포함한 필요한 인프라를 생성할 수 있습니다.
AI Grand Prix 하네스 구현
AI Grand Prix 하네스는 자율 드론 레이싱의 특정 제약 조건을 시뮬레이션하도록 설계된 이 스택의 구체적인 응용 사례입니다. 이 리그는 세 가지 주요 요소를 1 kHz의 락스텝(lockstep) 루프에서 함께 연결합니다:
- 6-DOF Physics: Elodin은 강체 물리학, 모터 역학, 항력, 지면 제약 조건, 그리고 멀티 레이트 센서(IMU, barometer, magnetometer)를 처리합니다.
- Real Flight Control: 비행 제어기를 시뮬레이션하는 대신, 이 리그는 실제 Betaflight SITL (Software-In-The-Loop) 빌드를 사용합니다. 이는 개발자가 시뮬레이션에서 제어기를 튜닝할 때, 실제 하드웨어에서 실행될 것과 정확히 동일한 PID 루프를 튜닝하고 있음을 보장합니다.
- The Autopilot Solver: 참가자가 작성한 Python 함수로, 센서 업데이트를 받아 RC 명령을 반환합니다. 공식 대회 규격에 맞추기 위해, 솔버는 GPS, 깊이, 또는 모터 RPM에 접근할 수 없습니다.
도전 과제 및 트레이드오프
대표성 있는 시뮬레이션을 구축하려면 기술적 불일치라는 지뢰밭을 헤쳐 나가야 합니다. Elodin은 현재 구현에서 몇 가지 주의 사항을 언급합니다:
- Coordinate Systems: 현재 하네스는 ENU (East-North-Up) 세계 상태를 사용하지만, 공식 대회 규격은 NED (North-East-Down)를 요구합니다.
- Atmospheric Modeling: 현재 물리 모델은 단일 항력 계수를 사용하며, 난류, 지면 효과, 배터리 전압 강하(battery sag)와 같은 복잡한 효과를는 생략합니다.
- Optical Inconsistencies: 카메라 시야각(FoV)에 관한 공식 규격에는 불일치가 있습니다. Elodin은 명시된 VFoV 90° 대신 intrinsics (VFoV $\approx$ 58.72°)를 따르기로 선택했습니다.
게임에서 항공우주로
이 프로젝트의 동기는 게임 개발(특히 The Sims 4) 배경에서 비롯되었습니다. 저자는 게임 엔진이 항공우주 도구에서 흔히히 결여된 수준의 세련미(창발적 행동, 결정론적 리플레이, 직관적인 에디터)를 제공한다는 점에 주목합니다. 이러한 "게임 엔진의 직관"을 적용함으로써, Elodin은 유용한 시뮬레이션을 실행하는 데 걸리는 시간을 몇 주에서 몇 시간으로 단축하는 것을 목표로 합니다.
시작하려는 분들을 위해, 프로젝트는 GitHub에 공개되어 있으며 uv, git, 그리고 C 툴체인이 필요합니다. 설정 프로세스는 Elodin CLI를 설치하고, 의존성을 동기화하며, Betaflight SITL을 빌드하는 일련의 스크립트를 통해 간소화되어, 개발자가 설치부터 비행 가능한 드론까지 단는 몇 분 만에 준비할 수 있도록 합니다.