飞行模式基础概念:ArduPilot飞行模式分类与映射
好,咱们进入正题。飞行模式这东西,说白了就是告诉飞控:「现在你该听谁的,怎么飞」。我刚开始接触 ArduPilot 时,面对那一长串模式列表,说实话有点懵。但摸过几个项目后,你会发现它其实就三大类:手动、增稳、自动。搞懂这个,后面配置 SITL 就顺了。
一、三大模式家族
ArduPilot 的模式虽然多,但按控制权归属,可以分成三个阵营。我习惯用一张图来理解它们的关系:
二、手动模式:飞控把控制权还给你
手动模式,就是飞控几乎不做干预。你摇杆打多少,舵面或电机就响应多少。典型代表是 ACRO 和 STABILIZE。
- ACRO(特技模式):飞控只做角速率控制,不限制姿态角。你想翻跟头?随便翻。我当年调试一架固定翼时,切到 ACRO 做滚转测试,结果忘了回中,飞机直接倒扣下来……嗯,那次之后我养成了「切模式前先看摇杆位置」的习惯。
- STABILIZE(自稳模式):飞控会帮你把飞机回平,但油门和偏航还是你直接控制。说白了就是「你松杆,它自己正过来」。适合新手入门,也适合做基础调试。
三、增稳模式:飞控帮你「扶着」飞机
增稳模式,飞控开始接管部分控制权。它帮你保持高度、位置或航向。你想想看,如果你在飞航拍,肯定不希望飞机随风乱飘对吧?
| 模式 | 飞控做什么 | 你控制什么 | 典型场景 |
|---|---|---|---|
| ALT_HOLD | 锁定当前高度(气压计/声纳) | 水平移动 + 偏航 | 定高悬停、航拍 |
| LOITER | 锁定位置 + 高度(GPS) | 偏航(摇杆回中即悬停) | 定点拍摄、等待指令 |
| POSHOLD | 锁定位置(光流/视觉) | 偏航(无 GPS 也可用) | 室内悬停、桥底飞行 |
这里有个坑:ALT_HOLD 依赖气压计。我在一次户外测试时,飞机从阴凉处飞到太阳底下,气压计受热漂移,高度直接掉了 2 米。所以后来我习惯在 SITL 里先模拟不同温度环境,看看飞控怎么反应。
四、自动模式:飞控全权接管
自动模式下,飞控按照预设逻辑或外部指令飞行。你基本可以「放手」了。
- AUTO(自动航线):飞控按 Mission Planner 里上传的航点飞行。起飞、转弯、降落,全自动。我做过一个测绘项目,飞机在 AUTO 模式下飞了 40 分钟,我就在地面站喝咖啡盯着。
- RTL(一键返航):飞控自动爬升到预设高度,然后直线飞回 Home 点,最后降落。这是最后的救命稻草。我曾经在 SITL 里故意让飞机飞远,然后切 RTL,看它能不能精准降回原点——结果偏了 3 米,后来发现是 GPS 模拟精度没调好。
- GUIDED(引导模式):地面站或机载电脑发一个目标点,飞控就飞过去。常用于「指哪打哪」的场景,比如精准投送。
五、模式切换逻辑:你拨开关,飞控响应
模式切换,说白了就是通过遥控器的一个通道(通常是 5 通道或 6 通道)告诉飞控:「现在我要用模式 X」。飞控收到信号后,根据你预设的映射表,切换到对应模式。
切换逻辑其实很简单:
- 遥控器拨动开关,改变某个通道的 PWM 值(比如 1000~2000)。
- 飞控读取这个 PWM 值,判断它落在哪个区间。
- 飞控切换到该区间对应的模式。
举个例子,我常用的 3 段开关映射:
| 开关位置 | PWM 范围 | 映射模式 |
|---|---|---|
| 上 | 1900 ~ 2000 | STABILIZE |
| 中 | 1500 ~ 1600 | LOITER |
| 下 | 1000 ~ 1100 | RTL |
为什么这么设?因为 STABILIZE 是安全模式,万一切错了,飞机至少能自稳。LOITER 是常用悬停模式。RTL 是应急返航。这个顺序我用了好几年,没出过问题。
六、RC 通道与模式映射:在 Mission Planner 里配
映射配置在 Mission Planner 的 Config → Flight Modes 页面。操作步骤:
- 选择用于模式切换的 RC 通道(默认是 RC5)。
- 在 6 个模式槽里,分别选择你想要的模式。
- 调整每个槽对应的 PWM 区间(通常用默认就行)。
- 点击「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 里一测就能发现。
七、一张图总结模式切换流程
为了让你更直观地理解整个过程,我画了张流程图:
你看,整个链路其实不复杂。遥控器 → 通道 → 飞控 → 映射表 → 模式切换。只要每个环节的参数对得上,就不会出问题。