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 步:

  1. PWM 采样:飞控以 50Hz(每 20ms)的频率读取模式通道的 PWM 值。
  2. 模式解码:根据预设的 PWM→模式映射表,把 PWM 值转换成模式编号。
  3. 切换条件检查:飞控检查当前状态是否允许切入目标模式。比如从自稳切到悬停,需要 GPS 锁星数 ≥ 6 颗、HDOP ≤ 2.0。
  4. 模式激活:如果条件满足,飞控执行模式切换——重置状态机、初始化控制律、更新参数引用。

我画了一张流程图,帮你直观理解这个过程:

ArduPilot 模式切换底层逻辑流程图 模式切换底层逻辑流程图 RC 信号输入 PWM 采样(50Hz) 模式解码(PWM→模式编号) 切换条件检查(GPS/传感器/状态) 条件满足? 拒绝切换,保持原模式 模式激活(状态机重置+控制律初始化) 说明: • 整个流程在 20ms 内完成 • 条件不满足时飞控不会切换

你看,整个流程其实很快——从你拨动开关到模式生效,通常不超过 40ms(两个控制周期)。但这里有个关键点:条件检查。

ArduPilot 在切换模式前会做一系列安全检查。比如:

  • 从自稳切到悬停:检查 GPS 是否健康、罗盘是否校准、EKF 是否收敛
  • 从悬停切到任务:检查航点是否有效、地理围栏是否配置
  • 从任何模式切到返航:检查起飞点是否记录、GPS 是否可用

如果条件不满足,飞控会拒绝切换,并在 GCS 上输出一条错误消息。我见过最典型的场景是:飞友在室内切 LOITER 模式,飞控拒绝切换,但他没看地面站消息,强行起飞——结果飞机漂移撞墙。

避坑指南:养成「切模式前看 GCS 消息」的习惯。Mission Planner 底部的状态栏会显示「Mode change rejected: GPS not ready」之类的提示。别忽视它。

另外,模式切换还有一个容易被忽略的细节——模式优先级。ArduPilot 内部给每个模式分配了一个优先级编号。当多个模式切换请求同时到达时(比如你同时拨了两个开关),飞控会按优先级处理。优先级高的模式会覆盖优先级低的。

举个例子。你同时把模式开关拨到了「自稳」位置,但飞控检测到 RC 信号丢失,触发了「失控保护」——这时失控保护模式(通常是 RTL 或降落)的优先级高于你的手动切换。飞控会执行失控保护,忽略你的开关位置。

嗯,说到这我想起一个项目经历。当时我们在做一架物流无人机,客户要求「任何时候拨动返航开关都必须立即返航」。但测试中发现,如果飞机正在执行 AUTO 任务,拨返航开关后飞控会先完成当前航点再切换。后来我们在代码里把返航模式的优先级调高,才解决了这个问题。

核心总结:模式切换不是简单的「开关映射」,而是一个包含采样、解码、条件检查、优先级仲裁的完整流程。理解这个流程,你才能准确预测飞控的行为,避免在空中出现意外。