弥合游戏引擎与航空航天仿真之间的鸿沟
航空航天软件的开发长期以来一直受到高保真仿真与开发者工程效率之间差距的困扰。多年来,行业标准一直涉及将不同的工具缝合在一起——使用 MATLAB/Simulink 进行控制逻辑处理,使用 Gazebo 进行物理仿真,并使用自定义的 Python 脚本进行编排。这种碎片化的工作流往往会导致一个“脆弱”的技术栈,使得从仿真到现实世界飞行的过渡充满了风险。
为了解决这个问题,Elodin 开源了一个为 Anduril 的 AI Grand Prix 设计的练习平台(practice rig),该比赛是一项奖金高达 50 万美元的自主无人机竞赛。虽然该项目旨在为等待官方 Virtual Qualifier 1 模拟器的参赛者提供入门指导,但它也揭示了一种更广泛的哲学,即通过借鉴游戏行业的直觉来构建现代航空航天工具链。
现代飞行仿真的架构
Elodin 的方法从传统的“缝合”模型转向了统一、高性能的技术栈。系统的核心构建在 Rust ECS (Entity Component System) 之上,并结合了一个名为 nox 的 JIT 编译物理核心。
关键技术组件:
- 物理核心: 使用 JAX 风格的代码编写,通过在类型化组件上使用
@el.map函数来实现。这种架构允许自然地进行 GPU 加速、蒙特卡洛模拟以及位对位的确定性回放。 - 编辑器: 一个通过 TCP 连接到时间序列遥测数据库 (
elodin-db) 的 3D 编辑器。这允许开发者将 GLB 模型、图表和摄像机画面直接实时绑定到 ECS 组件上。 - 进程编排: 一个轻量级的进程运行器 (
s10) 允许单个 Python 入口点即可启动必要的架构,包括飞行控制器、渲染服务器和外部估计器。
实现 AI Grand Prix 平台
AI Grand Prix 平台是该技术栈的一个具体应用,旨在模拟自主无人机竞赛的特定约束。该平台以 1 kHz 的频率在同步循环中将三个主要元素连接在一起:
- 6-DOF 物理: Elodin 处理刚体物理、电机动力学、阻力、地面约束以及多速率传感器(IMU、气压计、磁力计)。
- 真实飞行控制: 该平台不模拟飞行控制器,而是使用真实的 Betaflight SITL (Software-In-The-Loop) 构建版本。这确保了当开发者在仿真中调整控制器时,他们调整的是将在物理硬件上运行的完全相同的 PID 环路。
- 自动驾驶求解器: 由参赛者编写的 Python 函数,接收传感器更新并返回 RC 命令。为了符合官方比赛规范,该求解器无法访问 GPS、深度或电机 RPM。
挑战与权衡
构建具有代表性的仿真需要应对技术不一致性带来的重重困难。Elodin 在其当前的实现中指出了几点注意事项:
- 坐标系: 该平台目前使用 ENU (East-North-Up) 世界状态,而官方比赛规范要求使用 NED (North-East-Down)。
- 大气建模: 当前的物理模型使用单一阻力系数,忽略了湍流、地面效应和电池压降等复杂效应。
- 光学不一致性: 官方规范中关于摄像机视场角 (FoV) 存在差异。Elodin 选择遵循内在参数 (VFoV $\approx$ 58.72°) 而不是规定的 VFoV 为 90°。
从游戏到航空航天
该项目的动力源于游戏开发的背景(特别是 The Sims 4)。作者指出,游戏引擎提供了某种程度的精致感——涌现行为、确定性回放和直观的编辑器——而这些在航空航天工具链中往往是缺失的。通过应用这些“游戏引擎直觉”,Elodin 旨在将运行一个实用的仿真所需的时间从数周缩短到数小时。
对于想要开始尝试的人,该项目已在 GitHub 上可用,并需要 uv, git 和 C 工具链。设置过程通过一系列脚本进行了简化,通过安装 Elodin CLI、同步依赖并构建 Betaflight SITL,使开发者能够从安装到操控飞行的无人机仅需几分钟。