飞行模式基础概念:ArduPilot飞行模式分类与映射

好,咱们进入正题。飞行模式这东西,说白了就是告诉飞控:「现在你该听谁的,怎么飞」。我刚开始接触 ArduPilot 时,面对那一长串模式列表,说实话有点懵。但摸过几个项目后,你会发现它其实就三大类:手动、增稳、自动。搞懂这个,后面配置 SITL 就顺了。

一、三大模式家族

ArduPilot 的模式虽然多,但按控制权归属,可以分成三个阵营。我习惯用一张图来理解它们的关系:

ArduPilot 飞行模式分类总览 手动模式 ACRO / STABILIZE 增稳模式 ALT_HOLD / LOITER / POSHOLD 自动模式 AUTO / RTL / GUIDED 控制权:飞行员 → 飞控辅助 → 飞控全自动 特技飞行 / 调试 悬停 / 定点 / 定高 航线任务 / 一键返航 ⚠ 避坑: 手动模式下飞控不限制姿态角,新手切错模式容易炸机。SITL 里先练熟再上真机。

二、手动模式:飞控把控制权还给你

手动模式,就是飞控几乎不做干预。你摇杆打多少,舵面或电机就响应多少。典型代表是 ACRO 和 STABILIZE。

  • ACRO(特技模式):飞控只做角速率控制,不限制姿态角。你想翻跟头?随便翻。我当年调试一架固定翼时,切到 ACRO 做滚转测试,结果忘了回中,飞机直接倒扣下来……嗯,那次之后我养成了「切模式前先看摇杆位置」的习惯。
  • STABILIZE(自稳模式):飞控会帮你把飞机回平,但油门和偏航还是你直接控制。说白了就是「你松杆,它自己正过来」。适合新手入门,也适合做基础调试。
我的习惯:SITL 仿真里,我一般先用 STABILIZE 起飞,确认遥控器映射正确后,再切到其他模式测试。这样即使映射错了,飞机也不会乱窜。

三、增稳模式:飞控帮你「扶着」飞机

增稳模式,飞控开始接管部分控制权。它帮你保持高度、位置或航向。你想想看,如果你在飞航拍,肯定不希望飞机随风乱飘对吧?

模式 飞控做什么 你控制什么 典型场景
ALT_HOLD 锁定当前高度(气压计/声纳) 水平移动 + 偏航 定高悬停、航拍
LOITER 锁定位置 + 高度(GPS) 偏航(摇杆回中即悬停) 定点拍摄、等待指令
POSHOLD 锁定位置(光流/视觉) 偏航(无 GPS 也可用) 室内悬停、桥底飞行

这里有个坑:ALT_HOLD 依赖气压计。我在一次户外测试时,飞机从阴凉处飞到太阳底下,气压计受热漂移,高度直接掉了 2 米。所以后来我习惯在 SITL 里先模拟不同温度环境,看看飞控怎么反应。

四、自动模式:飞控全权接管

自动模式下,飞控按照预设逻辑或外部指令飞行。你基本可以「放手」了。

  • AUTO(自动航线):飞控按 Mission Planner 里上传的航点飞行。起飞、转弯、降落,全自动。我做过一个测绘项目,飞机在 AUTO 模式下飞了 40 分钟,我就在地面站喝咖啡盯着。
  • RTL(一键返航):飞控自动爬升到预设高度,然后直线飞回 Home 点,最后降落。这是最后的救命稻草。我曾经在 SITL 里故意让飞机飞远,然后切 RTL,看它能不能精准降回原点——结果偏了 3 米,后来发现是 GPS 模拟精度没调好。
  • GUIDED(引导模式):地面站或机载电脑发一个目标点,飞控就飞过去。常用于「指哪打哪」的场景,比如精准投送。
⚠ 重要提醒:自动模式不是「自动驾驶」。飞控不会避障(除非你装了额外传感器)。在 SITL 里测试 AUTO 航线时,记得先检查航点高度,别让飞机「撞山」。

五、模式切换逻辑:你拨开关,飞控响应

模式切换,说白了就是通过遥控器的一个通道(通常是 5 通道或 6 通道)告诉飞控:「现在我要用模式 X」。飞控收到信号后,根据你预设的映射表,切换到对应模式。

切换逻辑其实很简单:

  1. 遥控器拨动开关,改变某个通道的 PWM 值(比如 1000~2000)。
  2. 飞控读取这个 PWM 值,判断它落在哪个区间。
  3. 飞控切换到该区间对应的模式。

举个例子,我常用的 3 段开关映射:

开关位置 PWM 范围 映射模式
上 1900 ~ 2000 STABILIZE
中 1500 ~ 1600 LOITER
下 1000 ~ 1100 RTL

为什么这么设?因为 STABILIZE 是安全模式,万一切错了,飞机至少能自稳。LOITER 是常用悬停模式。RTL 是应急返航。这个顺序我用了好几年,没出过问题。

六、RC 通道与模式映射:在 Mission Planner 里配

映射配置在 Mission Planner 的 Config → Flight Modes 页面。操作步骤:

  1. 选择用于模式切换的 RC 通道(默认是 RC5)。
  2. 在 6 个模式槽里,分别选择你想要的模式。
  3. 调整每个槽对应的 PWM 区间(通常用默认就行)。
  4. 点击「Save Modes」写入飞控。

代码层面,参数是这样存的:

# 在参数列表里,模式映射参数格式:
# FLTMODE1 = 0    (STABILIZE)
# FLTMODE2 = 4    (ALT_HOLD)
# FLTMODE3 = 5    (LOITER)
# FLTMODE4 = 10   (AUTO)
# FLTMODE5 = 11   (RTL)
# FLTMODE6 = 15   (GUIDED)
# 对应的 PWM 区间由 FLTMODE_CH 和 RC5_MIN/MAX 决定

这里有个细节:模式槽的顺序和开关位置一一对应。如果你用 3 段开关,那只有前 3 个槽生效。我曾经见过有人把 6 个槽全填满,结果开关拨到中间,飞控切到了第 4 个模式——因为 PWM 区间没对齐。嗯,这种问题在 SITL 里一测就能发现。

我的调试技巧:在 SITL 里启动后,打开 Mission Planner 的「Flight Data」页面,切换到「Status」选项卡,看 RC5 的实时值。拨动开关,确认 PWM 值落在你预设的区间内。这一步花不了 1 分钟,但能省下后面排查问题的大把时间。

七、一张图总结模式切换流程

为了让你更直观地理解整个过程,我画了张流程图:

模式切换完整流程 遥控器拨动开关 RC5 通道 PWM 变化 飞控读取 PWM 值 匹配 FLTMODE 映射表 关键参数: • FLTMODE_CH = 5 • RC5_MIN = 1000 • RC5_MAX = 2000 • FLTMODE1 ~ 6 • FLTMODE1_PWM = 1000 • FLTMODE2_PWM = 1200 • ... 全部在 Mission Planner 里配

你看,整个链路其实不复杂。遥控器 → 通道 → 飞控 → 映射表 → 模式切换。只要每个环节的参数对得上,就不会出问题。