摘要:E2E-Fly(arXiv:2604.12916)是2026年4月由上海交大团队提出的端到端四旋翼自主飞行全链路系统,首次将可微物理仿真、一阶策略优化、域随机化与零样本部署整合为统一平台。相比传统方法,E2E-Fly将策略训练的样本效率提升了1-2个数量级,实现了从仿真训练到真机飞行的零样本迁移。本文从方法论角度系统解析E2E-Fly的技术架构、核心算法设计与工程实现。

一、引言:端到端四旋翼自主飞行面临的核心挑战

四旋翼自主飞行系统的传统开发范式是模块化流水线

1
感知(视觉/IMU)→ 状态估计 → 轨迹规划 → 控制(PID/MPC)→ 执行

每个模块由独立团队开发,通过人工定义的接口传递信息。这种架构存在根本性缺陷:

  1. 信息损失:图像→边界框→轨迹→控制指令,每步都在压缩信息
  2. 误差传递:感知的微小偏差经过规划和控制放大,最终表现为飞行性能退化
  3. 接口僵硬:人工定义的中间表示限制了系统性能上限
  4. 开发成本:模块间调试、调参、适配耗费大量工程时间

端到端学习试图用单一可微模型替代整个流水线,但应用到四旋翼领域面临三大难题:

难题 具体表现 传统解决
🎲 样本效率低 RL在仿真中需要百万级交互步数 无法直接迁移到实机
🖼️ 视觉渲染慢 每帧渲染10-30ms,训练速度极慢 用简化渲染,牺牲真实感
🔧 Sim-to-Real鸿沟 仿真物理与真实世界存在偏差 域随机化治标不治本
🔄 部署断裂 训练环境和部署环境割裂 每次部署重新适配

E2E-Fly的定位:不是出一个算法,而是构建一个从训练到部署的全链路工程平台,一次性解决上述所有问题。


二、系统架构全景

E2E-Fly的整体架构可划分为两大阶段四大核心模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
┌───────────────────────────────────────────────────────────────┐
│ E2E-Fly System │
├──────────────────────────────┬────────────────────────────────┤
│ 训练阶段 (Training) │ 部署阶段 (Deployment) │
├──────────────────────────────┼────────────────────────────────┤
│ │ │
│ ┌──────────────────────┐ │ ┌────────────────────────┐ │
│ │ Module 1: 可微物理引擎 │ │ │ Module 4: 模型导出 │ │
│ │ Differentiable │ │ │ → 格式转换 │ │
│ │ Physics Engine │ │ │ → INT8/FP16量化 │ │
│ └──────────┬───────────┘ │ │ → 机载芯片部署 │ │
│ │ │ │ → 零样本实飞 │ │
│ ┌──────────▼───────────┐ │ └────────────────────────┘ │
│ │ Module 2: 一阶策略优化 │ │ │
│ │ First-Order Policy │ │ │
│ │ Optimization │ │ │
│ └──────────┬───────────┘ │ │
│ │ │ │
│ ┌──────────▼───────────┐ │ │
│ │ Module 3: 域随机化 │ │ │
│ │ + 传感器建模 │ │ │
│ │ + 可微渲染(可选) │ │ │
│ └──────────────────────┘ │ │
└──────────────────────────────┴────────────────────────────────┘

2.1 与VisFly-Lab的关系

E2E-Fly基于VisFly-Lab(arXiv:2603.21123)构建,两者是同一个团队的递进工作:

维度 VisFly-Lab E2E-Fly
定位 可微仿真框架(引擎层) 工程系统(应用层)
覆盖 悬停/跟踪/降落/竞速 前述 + 避障 + 全链路部署
可微引擎 ✅ JAX核心 ✅ 复用+强化
部署 ❌ 纯仿真 ✅ 实飞部署管线
零样本迁移 ❌ 未验证 ✅ 有实飞验证

核心关系:VisFly-Lab提供可微仿真引擎,E2E-Fly在其上构建了完整的训练→部署流水线

三、核心技术一:可微物理引擎

3.1 四旋翼动力学模型

可微物理引擎是E2E-Fly的基石。与传统仿真器(如Gazebo)不同,E2E-Fly的动力学模型是用可微编程框架(JAX)实现的,使得梯度可以穿过物理方程反向传播。

1
2
3
4
5
6
7
8
系统状态: x = [p, q, v, ω] ∈ ℝ³ × S³ × ℝ³ × ℝ³
p: 位置 (ℝ³)
q: 姿态四元数 (S³)
v: 线速度 (ℝ³)
ω: 角速度 (ℝ³)

控制输入: u = [ω₁², ω₂², ω₃², ω₄²] ∈ ℝ⁴⁺
每个电机的转速平方

力与力矩计算

Ftotal=i=14CTρAr2ωi2(总升力)τtotal=i=14(ri×fi)+(1)iCDρAr3ωi2(总力矩) \begin{aligned} F_{\text{total}} &= \sum_{i=1}^{4} C_T \cdot \rho \cdot A \cdot r^2 \cdot \omega_i^2 \quad &\text{(总升力)}\\ \tau_{\text{total}} &= \sum_{i=1}^{4} (\mathbf{r}_i \times \mathbf{f}_i) + (-1)^i \cdot C_D \cdot \rho \cdot A \cdot r^3 \cdot \omega_i^2 \quad &\text{(总力矩)} \end{aligned}

其中:

  • CTC_T: 推力系数(正是你在前进比论文中详细推导的那个量!)
  • CDC_D: 阻力系数(反扭矩)
  • ρ\rho: 空气密度
  • AA: 螺旋桨盘面积
  • rir_i: 电机到质心的力臂

牛顿-欧拉方程(离散形式,前向欧拉):

vt+1=vt+Δt(Ftotalm+g1mD(vt))pt+1=pt+Δtvt+1ωt+1=ωt+ΔtI1(τtotalωt×(Iωt))qt+1=qt+Δt2Ω(ωt+1)qt \begin{aligned} \mathbf{v}_{t+1} &= \mathbf{v}_t + \Delta t \cdot \left(\frac{\mathbf{F}_{\text{total}}}{m} + \mathbf{g} - \frac{1}{m}\mathbf{D}(\mathbf{v}_t)\right) \\ \mathbf{p}_{t+1} &= \mathbf{p}_t + \Delta t \cdot \mathbf{v}_{t+1} \\ \boldsymbol{\omega}_{t+1} &= \boldsymbol{\omega}_t + \Delta t \cdot \mathbf{I}^{-1}\left(\boldsymbol{\tau}_{\text{total}} - \boldsymbol{\omega}_t \times (\mathbf{I}\boldsymbol{\omega}_t)\right) \\ \mathbf{q}_{t+1} &= \mathbf{q}_t + \frac{\Delta t}{2} \cdot \boldsymbol{\Omega}(\boldsymbol{\omega}_{t+1}) \cdot \mathbf{q}_t \end{aligned}

3.2 可微性的数学本质

传统仿真与可微仿真的核心区别:

1
2
3
4
5
6
7
8
9
# 传统仿真 (numpy) — 只能前向,无法求导
def step(state, action):
new_state = dynamics(state, action)
return new_state # 梯度断了

# 可微仿真 (JAX/PyTorch) — 梯度直通
def step(state, action):
new_state = dynamics(state, action)
return new_state # ∂new_state/∂action 可计算

可微性的关键:每一步物理计算都用支持自动微分的原语实现。例如 JAX 的 jnp 替代 npjax.grad() 替代手动求导:

1
2
3
4
5
6
7
8
9
10
11
12
13
import jax.numpy as jnp
from jax import grad, jit

def quadrotor_dynamics(state, motor_rpm):
"""可微四旋翼动力学"""
# 所有运算都是可微的
thrust = C_T * rho * A * r**2 * motor_rpm**2 # jnp 运算
total_thrust = jnp.sum(thrust)
# ...
return new_state

# 直接对动力学求导
d_state_d_action = grad(quadrotor_dynamics)(state, action)

3.3 面向部署的动力学建模

E2E-Fly的引擎不是学术版的简化模型,而是包含实际工程细节

建模要素 作用 E2E-Fly的处理
执行器延迟 电机响应不是瞬时的 一阶低通滤波:ω˙=(ωcmdω)/τmotor\dot{\omega} = (\omega_{\text{cmd}} - \omega)/\tau_{\text{motor}}
电机饱和 转速有上下限 ω=clamp(ω,ωmin,ωmax)\omega = \text{clamp}(\omega, \omega_{\min}, \omega_{\max})
桨叶气动耦合 来流影响推力 基于前进比 JJ 修正 CT(J)C_T(J)
IMU噪声 传感器特性 高斯噪声 + 偏置漂移
电池电压下降 升力随电压变化 TVbatt2/V02T \propto V_{\text{batt}}^2/V_0^2

关键洞察:正是因为在仿真中精确建模了这些”不完美”因素,E2E-Fly才能实现零样本迁移——策略在仿真中已经学会了应对真实世界中会遇到的各类非理想条件。

四、核心技术二:一阶策略优化

4.1 从零阶到一阶:范式转变

传统深度强化学习(PPO、SAC等)使用零阶梯度估计

θJ(θ)Eτπθ[tθlogπθ(atst)Rt] \nabla_\theta J(\theta) \approx \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_t \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot R_t \right]

梯度是通过采样→评估→加权得到的,本质上是随机近似。这导致:

  • 高方差(需要大量采样来降低)
  • 样本效率低(10⁶-10⁷步才能收敛)
  • 无法利用物理模型的结构信息

一阶策略优化(First-Order Policy Optimization)直接利用可微仿真计算精确梯度:

θL=LxTxTxT1x1a0a0θ \nabla_\theta \mathcal{L} = \frac{\partial \mathcal{L}}{\partial x_T} \cdot \frac{\partial x_T}{\partial x_{T-1}} \cdots \frac{\partial x_1}{\partial a_0} \cdot \frac{\partial a_0}{\partial \theta}

其中 L\mathcal{L} 是任务损失函数(如位置跟踪误差),梯度通过链式法则穿过所有时间步。

计算图示意

1
2
3
θ → a₀ → [可微物理] → x₁ → a₁ → [可微物理] → x₂ → ... → x_T → L
↑ ↑ ↑ ↑
└──── 梯度反向传播路径 ────────────────→ ∂L/∂θ

4.2 训练循环

E2E-Fly的标准训练循环如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for epoch in range(num_epochs):
# 1. 初始化状态
state = initial_state

# 2. 前向:策略 + 可微仿真推演
for t in range(horizon):
action = policy(state) # 策略输出动作
state = diff_physics(state, action) # 可微物理前向

# 3. 计算损失
loss = task_loss(state, goal)

# 4. 反向:梯度直通
grads = jax.grad(loss)(policy.params)

# 5. 更新策略
policy.params = optimizer.update(policy.params, grads)

与传统RL的对比

特性 传统RL (PPO/SAC) 一阶RL (E2E-Fly)
梯度类型 零阶估计(高方差) 一阶精确(低方差)
是否需要价值函数 ✅ Critic网络 ❌ 不需要
是否需要经验回放 ✅ 缓冲池 ❌ 不需要
单次交互样本数 10⁴-10⁵步 10²-10³步
训练时间(悬停任务) 数小时 数分钟
策略网络 简单MLP即可 简单MLP即可

4.3 损失函数设计

不同任务的损失函数:

悬停任务

Lhover=pTp2+λvT2 \mathcal{L}_{\text{hover}} = \|\mathbf{p}_T - \mathbf{p}^*\|^2 + \lambda \|\mathbf{v}_T\|^2

轨迹跟踪

Ltrack=t=0Tptpt2+λq˙t2 \mathcal{L}_{\text{track}} = \sum_{t=0}^T \|\mathbf{p}_t - \mathbf{p}^*_t\|^2 + \lambda \|\dot{\mathbf{q}}_t\|^2

避障

Lavoid=Ltrack+μt=0T1pto<dsafe(dsafepto)2 \mathcal{L}_{\text{avoid}} = \mathcal{L}_{\text{track}} + \mu \sum_{t=0}^T \mathbb{1}_{\|\mathbf{p}_t - \mathbf{o}\| < d_{\text{safe}}} \cdot (d_{\text{safe}} - \|\mathbf{p}_t - \mathbf{o}\|)^2

关键设计原则:损失必须平滑可微——离散的”碰撞/未碰撞”二值判断不可微,需要用 soft penalty 替代。

4.4 与VisFly-Lab的对比验证

VisFly-Lab在四个标准任务上对一阶RL与PPO进行了对比:

任务 PPO样本数 一阶RL样本数 效率提升
悬停 500K 5K 100×
轨迹跟踪 800K 20K 40×
降落 1M 30K 33×
竞速 2M 50K 40×

结论:一阶RL比PPO样本效率高1-2个数量级,且不需要价值函数网络,训练更稳定。

五、核心技术三:域随机化与传感器建模

5.1 域随机化参数空间

为了实现零样本Sim-to-Real迁移,E2E-Fly在训练过程中随机化以下物理参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
┌─────────────────────────────────────────────────────┐
│ 域随机化 │
├──────────────────────┬──────────────────────────────┤
│ 物理参数 │ 随机化范围 │
├──────────────────────┼──────────────────────────────┤
│ 质量 m │ [0.8m₀, 1.2m₀] │
│ 惯量 I │ [0.7I₀, 1.3I₀] │
│ 推力系数 C_T │ [0.85C_T₀, 1.15C_T₀] │
│ 电机时间常数 τ │ [0.5τ₀, 2.0τ₀] │
│ 空气密度 ρ │ [0.9ρ₀, 1.1ρ₀] │
│ 气动阻尼 D │ [0.5D₀, 2.0D₀] │
│ 电池电压 V │ [0.85V₀, 1.0V₀] │
├──────────────────────┴──────────────────────────────┤
│ IMU噪声 │
│ ├─ 加速度计: N(0, σ_acc²), σ_acc ∈ [0.01, 0.1] │
│ └─ 陀螺仪: N(0, σ_gyro²), σ_gyro ∈ [0.001, 0.01] │
└─────────────────────────────────────────────────────┘

5.2 域随机化的效果

域随机化的核心思想是:在仿真中见过足够多的”物理世界变体”,策略在真实世界中就不会对任何特定的物理参数过度依赖

数学上,域随机化优化的是一个鲁棒策略

θ=argminθEϕPΦ[Lϕ(πθ)] \theta^* = \arg\min_\theta \mathbb{E}_{\phi \sim \mathcal{P}_\Phi} \left[ \mathcal{L}_\phi(\pi_\theta) \right]

其中 ϕ\phi 是物理参数,PΦ\mathcal{P}_\Phi 是参数分布,Lϕ\mathcal{L}_\phi 是在该物理参数下的任务损失。

实践经验:域随机化范围不是越大越好。范围太小起不到泛化效果,范围太大策略会过于保守(飞得太慢)。E2E-Fly通过实验确定了上述参数范围是最佳平衡点。

5.3 可微渲染(视觉策略)

当策略需要视觉输入(单目/深度相机)时,E2E-Fly支持接入可微渲染管线:

1
2
3
3D场景模型 → 可微渲染器 → 图像 → CNN特征 → 策略 → 控制指令
↑ ↑
梯度可穿 梯度可穿

但这种模式计算开销大,E2E-Fly在标准实验中使用的是状态观测(位置+速度+姿态+角速度),视觉策略作为扩展选项。

六、核心技术四:零样本部署管线

6.1 模型导出流程

1
2
3
4
5
6
7
8
9
10
11
训练完成的策略 (JAX/PyTorch)

格式转换 → ONNX (中间表示)

量化 → FP32 → FP16/INT8

代码生成 → C++ 部署代码

机载芯片部署 → NVIDIA Jetson / STM32 / Raspberry Pi

零样本实飞 🚁

6.2 零样本迁移的关键

E2E-Fly实现零样本迁移的策略不是”让仿真更逼真”,而是让策略在仿真中学会应对不确定性

1
零样本迁移 = 高保真可微物理 + 域随机化 + 执行器建模 + 传感器噪声

具体来说:

  1. 可微物理确保策略学到的动力学与真实一致(基础模型准确)
  2. 域随机化让策略适应物理参数偏差(鲁棒性)
  3. 执行器建模(延迟+饱和)让策略学会真实电机的响应特性
  4. 传感器噪声让策略学会从带噪观测中做决策

关键洞察:E2E-Fly的策略输出的不是”理想电机转速”而是”考虑了执行器延迟的补偿控制指令”——这正是仿真训练的价值所在。

6.3 与传统部署的对比

方面 传统方法 E2E-Fly
仿真训练时间 数小时-数天 数分钟
实飞调试 需要数天实飞调参 零样本
迁移周期 2-4周 同一天
工程工作量 高(模块分别适配) 低(一键部署)
策略更新 每次需要完整的调试周期 重新训练→一键部署

七、实验结果分析

7.1 仿真实验结果

E2E-Fly在以下任务上进行了评估:

1. 悬停控制

指标 PID (基线) PPO E2E-Fly (一阶RL)
位置RMSE 0.08m 0.12m 0.06m
训练时间 N/A 3h 8min
样本数 N/A 500K 5K

2. 轨迹跟踪

指标 MPC (基线) PPO E2E-Fly (一阶RL)
跟踪RMSE 0.15m 0.22m 0.11m
训练时间 N/A 5h 15min
样本数 N/A 800K 20K

3. 避障飞行

指标 传统规划+控制 PPO E2E-Fly (一阶RL)
成功率 85% 78% 92%
训练时间 N/A 8h 25min
样本数 N/A 2M 50K

7.2 零样本迁移验证

E2E-Fly的关键卖点是从仿真训练到真机飞行的零样本迁移。实验结果:

  • 仿真中训练的策略(闭环训练 + 域随机化)
  • 直接部署到真机(不经过任何实飞微调)
  • 结果:首次飞行即稳定,性能与仿真中观测到的相当

与未使用域随机化的对比

条件 不域随机化 域随机化
仿真性能 中(略降)
首次实飞 ❌ 坠毁 ✅ 稳定
微调后性能 需要3-5次迭代 无需微调

八、技术对比与嫁接路径

8.1 传统模块化 vs E2E-Fly

维度 传统模块化制导 E2E-Fly
物理引擎 Python numpy 6DOF JAX可微6DOF
制导 PN/EPN(手写解析) 可学策略(端到端)
训练 N/A 一阶RL
迁移 零样本部署管线
视觉 可微渲染(可选)

8.2 嫁接路径

1
2
3
4
5
6
7
传统6DOF仿真 → 可微化(PyTorch)

用一阶RL训练制导策略(替代手写PN)

域随机化(物理参数范围基于截击机特性)

零样本部署到PX4飞控

最直接的收益

  1. 制导律优化:用一阶RL优化PN的导航比N,替代手写调参
  2. 时间节省:分钟级训练替代小时级调参
  3. 鲁棒性提升:域随机化让截击策略适应不同目标速度和机动

九、局限性与未来方向

9.1 当前局限

  1. 开源状态:E2E-Fly和VisFly-Lab尚未公开代码(arXiv 2026年4月,代码可能在审稿中)
  2. 视觉部分:可微渲染的性能和真实性仍有待提升
  3. 场景复杂度:目前验证的场景相对简单(悬停、跟踪、避障),复杂3D环境尚未评估
  4. 极端条件:高速/大风等极端工况的鲁棒性需进一步验证

9.2 未来方向

  1. E2E-Fly + GaussFly:结合3DGS场景表示,实现视觉端到端策略的Sim-to-Real
  2. E2E-Fly + MAVEN:引入元学习,适应截击机抛射后的动力学突变
  3. E2E-Fly + 可微参数辨识:用可微仿真自动从实飞数据辨识C_T(J)参数
  4. 编队端到端:拓展到多机协同截击

十、总结

E2E-Fly的核心贡献可以概括为:

维度 贡献
方法论 首次将可微物理+一阶RL+域随机化整合为四旋翼端到端训练平台
工程 提供从仿真训练到真机部署的完整管线,无需实飞微调
性能 样本效率比传统RL高1-2个数量级,分钟级训练
普适性 支持悬停、跟踪、降落、竞速、避障等多种任务

给读者的建议

  • 如果你在做四旋翼仿真,用可微物理替代传统仿真器是最立竿见影的改进
  • 如果你在调制导参数,用一阶RL优化替代手动调参可以直接提升性能
  • 如果你在做Sim-to-Real,域随机化+执行器建模是实现零样本迁移的核心

参考文献

[1] Sun, F., Li, F., et al. “E2E-Fly: An Integrated Training-to-Deployment System for End-to-End Quadrotor Autonomy.” arXiv:2604.12916, 2026.

[2] Li, F., Sun, F., et al. “VisFly-Lab: Unified Differentiable Framework for First-Order Reinforcement Learning of Quadrotor Control.” arXiv:2603.21123, 2026.

[3] Li, F., et al. “Simple but Stable, Fast and Safe: Achieve End-to-end Control by High-Fidelity Differentiable Simulation.” arXiv:2604.10548, 2026.

[4] Onoda, K., et al. “Does ‘Do Differentiable Simulators Give Better Policy Gradients?’ Give Better Policy Gradients?” arXiv:2604.18161, 2026.

[5] Su, Y., et al. “Vector Field Augmented Differentiable Policy Learning for Vision-Based Drone Racing.” arXiv:2603.08019, 2026.

[6] Zhang, Y., et al. “GaussFly: Contrastive Reinforcement Learning for Visuomotor Policies in 3D Gaussian Fields.” arXiv:2604.05062, 2026.

[7] Zhou, J., et al. “MAVEN: A Meta-Reinforcement Learning Framework for Varying-Dynamics Expertise in Agile Quadrotor Maneuvers.” arXiv:2603.10714, 2026.

[8] Kovalev, V., et al. “Trajectory-based actuator identification via differentiable simulation.” arXiv:2604.10351, 2026.

[9] Wu, T., et al. “Precise Aggressive Aerial Maneuvers with Sensorimotor Policies.” arXiv:2604.05828, 2026.

[10] Zhang, L., et al. “Vision-Based End-to-End Learning for UAV Traversal of Irregular Gaps via Differentiable Simulation.” arXiv:2604.02779, 2026.