2. 飞行模式全景与分类
飞控状态机的核心任务之一,就是把飞行员或任务系统的意图,翻译成一组明确的飞行模式,并保证模式之间的切换安全、可预期。理解飞行模式,不能只记名字,而要抓住三个维度:控制目标(飞控到底在稳定什么)、依赖条件(需要哪些传感器和外部数据)、切换约束(什么情况下能进、什么情况下必须退出)。本节按“从手动到全自动”的自主度梯度,梳理常见飞行模式的功能定义、适用场景与切换约束。
一、按自主度分层理解飞行模式
飞行模式可以看作一条从“人控为主”到“机控为主”的连续谱。自主度越高,飞控承担的控制回路越多,对传感器与定位数据的依赖也越强,失效时的风险传导路径也越长。
- 手动模式(Manual / Acro):遥控杆量直接映射到舵面或电机转速,飞控不做姿态稳定,只做最基础的混控。适用于调试、特技飞行、传感器故障后的应急操控。约束:需要飞行员持续修正,无自稳能力。
- 增稳模式(Stabilize / Angle):飞控内环稳定角速度,外环把杆量映射为目标姿态角。松杆自动回平。适用于视距内常规飞行、新手训练。约束:依赖IMU,姿态估计异常时增稳会发散。
- 定高模式(AltHold):在增稳基础上,用气压计/激光测距闭环控制高度,油门杆变为升降速率指令。适用于航拍悬停、低空作业。约束:依赖气压计,强气流或地效区高度会漂移。
- 定点模式(Loiter / PosHold):在定高基础上,用GNSS或光流+视觉闭环控制水平位置,松杆悬停。适用于精细航拍、巡检悬停。约束:依赖定位质量,GNSS失锁或多路径严重时会漂移。
- 返航模式(RTL):自动爬升到安全高度,飞回Home点上方,再自动下降着陆或悬停。适用于失联、低电量、手动触发返航。约束:必须有有效Home点和定位,返航高度需高于航路障碍。
- 自动航线模式(Auto / Mission):按预装航点序列飞行,支持航点动作(拍照、投掷、悬停)。适用于测绘、植保、巡检。约束:依赖航线文件与定位,任务中可暂停/继续。
- 降落模式(Land):垂直下降并检测触地,自动上锁。适用于任务结束、返航末端。约束:下降过程中定位丢失仍可继续,但水平漂移风险上升。
二、模式切换的约束逻辑
模式切换不是简单的“按键即生效”,飞控状态机在切换前会做一系列前置条件检查。以从定点切到返航为例,典型检查包括:定位是否有效、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点上方后触发降落。
五、模式选择速查表
| 模式 | 控制目标 | 关键依赖 | 典型场景 | 主要退出条件 |
|---|---|---|---|---|
| 手动/Acro | 杆量直通 | 遥控链路 | 调试、特技 | 切换或失联 |
| 增稳/Angle | 姿态角 | IMU | 视距飞行、训练 | 姿态估计异常 |
| 定高/AltHold | 高度 | 气压计+IMU | 航拍悬停 | 气压计故障 |
| 定点/Loiter | 水平位置+高度 | GNSS/光流+气压计 | 精细悬停、巡检 | 定位丢失 |
| 返航/RTL | 航路+Home点 | 定位+Home | 失联、低电量 | 到达Home上方 |
| 自动航线 | 航点序列 | 定位+航线文件 | 测绘、植保 | 任务完成或中断 |
| 降落/Land | 垂直下降 | 高度估计 | 任务末端 | 触地检测 |
掌握这张全景图后,面对任何一款飞控,都可以用同样的框架去拆解它的模式体系:先看自主度分层,再看每层的依赖条件,最后看切换约束和失效降级路径。这样在配置参数、排查异常、设计任务时,就能快速定位问题出在哪一层。