2. 飞行模式全景与分类

飞控状态机的核心任务之一,就是把飞行员或任务系统的意图,翻译成一组明确的飞行模式,并保证模式之间的切换安全、可预期。理解飞行模式,不能只记名字,而要抓住三个维度:控制目标(飞控到底在稳定什么)、依赖条件(需要哪些传感器和外部数据)、切换约束(什么情况下能进、什么情况下必须退出)。本节按“从手动到全自动”的自主度梯度,梳理常见飞行模式的功能定义、适用场景与切换约束。

一、按自主度分层理解飞行模式

飞行模式可以看作一条从“人控为主”到“机控为主”的连续谱。自主度越高,飞控承担的控制回路越多,对传感器与定位数据的依赖也越强,失效时的风险传导路径也越长。

  • 手动模式(Manual / Acro):遥控杆量直接映射到舵面或电机转速,飞控不做姿态稳定,只做最基础的混控。适用于调试、特技飞行、传感器故障后的应急操控。约束:需要飞行员持续修正,无自稳能力。
  • 增稳模式(Stabilize / Angle):飞控内环稳定角速度,外环把杆量映射为目标姿态角。松杆自动回平。适用于视距内常规飞行、新手训练。约束:依赖IMU,姿态估计异常时增稳会发散。
  • 定高模式(AltHold):在增稳基础上,用气压计/激光测距闭环控制高度,油门杆变为升降速率指令。适用于航拍悬停、低空作业。约束:依赖气压计,强气流或地效区高度会漂移。
  • 定点模式(Loiter / PosHold):在定高基础上,用GNSS或光流+视觉闭环控制水平位置,松杆悬停。适用于精细航拍、巡检悬停。约束:依赖定位质量,GNSS失锁或多路径严重时会漂移。
  • 返航模式(RTL):自动爬升到安全高度,飞回Home点上方,再自动下降着陆或悬停。适用于失联、低电量、手动触发返航。约束:必须有有效Home点和定位,返航高度需高于航路障碍。
  • 自动航线模式(Auto / Mission):按预装航点序列飞行,支持航点动作(拍照、投掷、悬停)。适用于测绘、植保、巡检。约束:依赖航线文件与定位,任务中可暂停/继续。
  • 降落模式(Land):垂直下降并检测触地,自动上锁。适用于任务结束、返航末端。约束:下降过程中定位丢失仍可继续,但水平漂移风险上升。

二、模式切换的约束逻辑

模式切换不是简单的“按键即生效”,飞控状态机在切换前会做一系列前置条件检查。以从定点切到返航为例,典型检查包括:定位是否有效、Home点是否已记录、电池电压是否高于返航阈值、当前高度是否低于返航高度。任一条件不满足,切换请求会被拒绝或降级处理。

切换约束通常分三类:硬约束(不满足则禁止进入,如无定位禁止进入定点)、软约束(可进入但会告警,如低电量进入返航)、退出约束(满足则强制退出,如定位丢失自动从定点降级到定高)。理解这三类约束,是排查“为什么切不过去”或“为什么自己跳模式”的关键。

模式切换的优先级通常为:失效保护(Failsafe)> 返航/降落 > 自动航线 > 手动切换。当高优先级事件触发时,低优先级的模式请求会被忽略。

三、模式全景关系图

下图把常见飞行模式按自主度分层,并标出典型切换方向与依赖条件。实线表示常规切换,虚线表示失效保护触发的强制切换。

飞行模式自主度分层与切换关系 自主度递增 → 手动层 手动 / Acro 杆量直通舵面,无自稳 增稳层 增稳 / Angle IMU闭环,松杆回平 定高层 定高 / AltHold 气压计闭环,油门→升降速率 定位层 定点 / Loiter GNSS/光流闭环,松杆悬停 自动层 返航 RTL 自动航线 降落 Land 定位丢失→返航 低电量→降落 依赖:遥控链路 IMU 依赖:IMU 姿态估计 依赖:气压计 IMU 依赖:GNSS/光流 气压计 依赖:定位+Home 航线文件 常规切换 失效保护强制切换 模式依赖条件

四、切换约束的工程实现要点

在飞控代码中,模式切换通常由一个状态机管理器统一裁决。每个模式实现两个接口:can_enter() 返回是否允许进入,must_exit() 返回是否必须退出。状态机在每个控制周期轮询所有请求,按优先级选出当前模式。

// 伪代码:模式切换裁决逻辑
ModeRequest req = get_pilot_request();   // 飞行员请求
ModeRequest failsafe = check_failsafe(); // 失效保护检查

if (failsafe.active) {
    current_mode = failsafe.mode;        // 强制切换,忽略请求
} else if (req.mode != current_mode) {
    if (req.mode.can_enter()) {
        current_mode = req.mode;         // 允许切换
    } else {
        reject(req);                     // 拒绝并告警
    }
}

// 每个周期检查退出条件
if (current_mode.must_exit()) {
    current_mode = current_mode.fallback(); // 降级到安全模式
}

以定点模式为例,can_enter() 检查定位质量(HDOP、卫星数、光流置信度),must_exit() 在定位丢失超过阈值时返回真,降级到定高模式。返航模式的 can_enter() 额外检查Home点有效性和返航高度设置,must_exit() 在到达Home点上方后触发降落。

常见排障:如果飞机在定点模式下突然自己切到定高,优先检查GNSS卫星数和HDOP值;如果返航切不进去,检查Home点是否已记录、返航高度是否低于当前高度。这些约束在日志中通常有对应的拒绝原因码。

五、模式选择速查表

模式控制目标关键依赖典型场景主要退出条件
手动/Acro杆量直通遥控链路调试、特技切换或失联
增稳/Angle姿态角IMU视距飞行、训练姿态估计异常
定高/AltHold高度气压计+IMU航拍悬停气压计故障
定点/Loiter水平位置+高度GNSS/光流+气压计精细悬停、巡检定位丢失
返航/RTL航路+Home点定位+Home失联、低电量到达Home上方
自动航线航点序列定位+航线文件测绘、植保任务完成或中断
降落/Land垂直下降高度估计任务末端触地检测

掌握这张全景图后,面对任何一款飞控,都可以用同样的框架去拆解它的模式体系:先看自主度分层,再看每层的依赖条件,最后看切换约束和失效降级路径。这样在配置参数、排查异常、设计任务时,就能快速定位问题出在哪一层。