2、飞行模式基础概念:什么是飞行模式、飞行模式与RC通道的关系、模式切换的底层逻辑
好,咱们正式开始聊飞行模式。很多新手拿到飞控,第一件事就是问:「我该用哪个模式飞?」其实在搞懂这个问题之前,你得先明白——飞行模式到底是什么。
2.1 什么是飞行模式
说白了,飞行模式就是飞控内部一套预先配置好的「行为规则集合」。它决定了飞控怎么解读你的摇杆输入、怎么控制电机、遇到干扰怎么处理。
举个例子。你切到定高模式,飞控就会自动维持当前高度。你推油门,它爬升;你松油门,它悬停。但如果你切到特技模式,飞控就把姿态控制权完全交给你——你推油门就是真推油门,飞机掉高度它不管。
我刚开始接触 ArduPilot 时,总觉得模式就是个「开关」。后来在项目里调试一架测绘无人机才发现,模式其实是飞控的「大脑分区」——每个模式都有一套独立的控制律、状态机和参数集。
核心理解:飞行模式 = 控制律 + 状态机 + 参数集 的三元组。切换模式,就是让飞控换一套「大脑」来工作。
ArduPilot 目前支持超过 30 种飞行模式。常用的有这些:
| 模式名称 | 缩写 | 核心行为 | 典型用途 |
|---|---|---|---|
| 自稳模式 | STABILIZE | 摇杆回中即水平,不控高度 | 手动飞行、新手练习 |
| 定高模式 | ALT_HOLD | 自动维持高度,水平自稳 | 航拍、巡检 |
| 悬停模式 | LOITER | 锁定位置+高度,GPS参与 | 定点拍照、等待指令 |
| 返航模式 | RTL | 自动飞回起飞点并降落 | 紧急情况、信号丢失 |
| 任务模式 | AUTO | 按预载航点自动飞行 | 测绘、植保、巡检 |
| 特技模式 | ACRO | 全手动角速率控制 | 花飞、3D飞行 |
嗯,这里要注意:每个模式对传感器依赖程度不一样。比如 LOITER 模式必须要有 GPS 信号,否则飞控会拒绝切入。我曾经在室内测试时忘了这点,切 LOITER 后飞机直接掉下来……从那以后我养成了习惯——切模式前先看传感器状态。
2.2 飞行模式与RC通道的关系
你可能会问:「飞控怎么知道我当前想用哪个模式?」答案是通过 RC 遥控器的通道。
ArduPilot 使用 RC 通道 5 到 8(默认是通道 5)作为模式切换通道。你拨动遥控器上的三段开关,飞控读到不同的 PWM 脉宽值,然后映射到对应的模式编号上。
具体映射逻辑是这样的:
PWM 值范围 → 模式编号
1000 ~ 1230 → 模式 0 (自稳)
1231 ~ 1460 → 模式 1 (定高)
1461 ~ 1690 → 模式 2 (悬停)
1691 ~ 1920 → 模式 3 (返航)
1921 ~ 2100 → 模式 4 (任务)
这个映射表在 Mission Planner 的「Flight Modes」页面里配置。你可以把任意模式分配给任意 PWM 区间。
我的习惯:把最安全的模式(自稳/悬停)放在开关最靠前的位置。万一在空中手忙脚乱,拨到最前面至少能稳住飞机。另外,我建议把返航模式放在最高段位,避免误触。
这里有个坑——不同遥控器的 PWM 输出范围不一样。Futaba 的 PWM 范围通常是 1100~1900,而 Spektrum 是 1100~1900 但中位在 1500。如果你不校准遥控器,飞控读到的 PWM 值可能落在两个区间的边界上,导致模式乱跳。
我曾经帮一个飞友排查问题,他的飞机在空中自己切模式。查了半天,发现是遥控器没校准,PWM 值漂移到了边界附近。校准后问题消失。
避坑指南:每次换遥控器或重新绑定接收机后,务必在 Mission Planner 里做一次 RC 校准。校准后检查每个开关位置对应的 PWM 值是否稳定在区间中间,不要靠近边界。
2.3 模式切换的底层逻辑
好,现在咱们深入一点——当你拨动开关时,飞控内部到底发生了什么?
整个过程可以拆成 4 步:
- PWM 采样:飞控以 50Hz(每 20ms)的频率读取模式通道的 PWM 值。
- 模式解码:根据预设的 PWM→模式映射表,把 PWM 值转换成模式编号。
- 切换条件检查:飞控检查当前状态是否允许切入目标模式。比如从自稳切到悬停,需要 GPS 锁星数 ≥ 6 颗、HDOP ≤ 2.0。
- 模式激活:如果条件满足,飞控执行模式切换——重置状态机、初始化控制律、更新参数引用。
我画了一张流程图,帮你直观理解这个过程:
你看,整个流程其实很快——从你拨动开关到模式生效,通常不超过 40ms(两个控制周期)。但这里有个关键点:条件检查。
ArduPilot 在切换模式前会做一系列安全检查。比如:
- 从自稳切到悬停:检查 GPS 是否健康、罗盘是否校准、EKF 是否收敛
- 从悬停切到任务:检查航点是否有效、地理围栏是否配置
- 从任何模式切到返航:检查起飞点是否记录、GPS 是否可用
如果条件不满足,飞控会拒绝切换,并在 GCS 上输出一条错误消息。我见过最典型的场景是:飞友在室内切 LOITER 模式,飞控拒绝切换,但他没看地面站消息,强行起飞——结果飞机漂移撞墙。
避坑指南:养成「切模式前看 GCS 消息」的习惯。Mission Planner 底部的状态栏会显示「Mode change rejected: GPS not ready」之类的提示。别忽视它。
另外,模式切换还有一个容易被忽略的细节——模式优先级。ArduPilot 内部给每个模式分配了一个优先级编号。当多个模式切换请求同时到达时(比如你同时拨了两个开关),飞控会按优先级处理。优先级高的模式会覆盖优先级低的。
举个例子。你同时把模式开关拨到了「自稳」位置,但飞控检测到 RC 信号丢失,触发了「失控保护」——这时失控保护模式(通常是 RTL 或降落)的优先级高于你的手动切换。飞控会执行失控保护,忽略你的开关位置。
嗯,说到这我想起一个项目经历。当时我们在做一架物流无人机,客户要求「任何时候拨动返航开关都必须立即返航」。但测试中发现,如果飞机正在执行 AUTO 任务,拨返航开关后飞控会先完成当前航点再切换。后来我们在代码里把返航模式的优先级调高,才解决了这个问题。
核心总结:模式切换不是简单的「开关映射」,而是一个包含采样、解码、条件检查、优先级仲裁的完整流程。理解这个流程,你才能准确预测飞控的行为,避免在空中出现意外。