4. 飞行模式基础概念:什么是飞行模式、模式切换的触发机制、模式与状态机的关联
各位同学,今天我们正式进入飞行模式的世界。说实话,我见过不少开发者,代码写得挺溜,但一问到“飞行模式到底是什么”,就开始含糊其辞。这其实是个很要命的事——你连模式都没搞懂,怎么敢让飞机上天?
4.1 什么是飞行模式
飞行模式,说白了就是无人机在某一时刻的“行为准则”。它告诉飞控:你现在该干什么,怎么干,遇到意外怎么办。
举个例子。你让飞机悬停,它就得死守当前位置,GPS飘了它也得拉回来。你让它返航,它就得先爬升到安全高度,然后直线飞回家。同样是飞,不同模式下的“脾气”完全不一样。
我个人习惯把飞行模式分成三大类:
- 手动模式:飞手直接控制油门、俯仰、横滚、偏航。飞控只做最基本的姿态稳定,不干预位置。
- 辅助模式:飞控接管部分控制。比如定高模式,飞控帮你稳住高度,你只管前后左右。
- 全自动模式:飞控完全自主飞行。比如航线飞行、自动返航、降落。飞手基本就是监工。
核心要点:飞行模式本质上是飞控内部一组控制律和约束条件的集合。切换模式,就是切换这组规则。
我在项目中遇到过一件事。有个团队做植保无人机,手动模式下飞得好好的,一切到自动航线,飞机直接往地里扎。查了半天,原来是模式切换时高度参考系没对齐——手动模式用气压计,自动模式用GPS高度,差了十几米。嗯,从那以后,我每次做模式切换都会检查传感器源是否一致。
4.2 模式切换的触发机制
模式不会自己变。总得有个东西告诉飞控:“嘿,该换模式了。”这个“东西”就是触发机制。
常见的触发方式有四种:
| 触发方式 | 来源 | 典型场景 |
|---|---|---|
| 遥控器通道 | RC 接收机 | 飞手拨动开关,从自稳切到定高 |
| 地面站指令 | MAVLink 消息 | 地面站发送 MAV_CMD_DO_SET_MODE |
| 机载计算机 | 串口/网口 | 视觉识别到目标,自动切到跟踪模式 |
| 飞控内部逻辑 | 状态机 | 电池低压,自动切到降落模式 |
你想想看,遥控器通道是最直接的。飞手一拨开关,PWM值变了,飞控检测到变化,执行模式切换。但这里有个坑——我见过有人把模式开关设在了三段开关的中间档,结果拨快了,飞控没识别到,飞机直接失联。后来我建议他们用两段开关,或者加一个去抖延时。
地面站指令呢,走的是MAVLink协议。飞控收到MAV_CMD_DO_SET_MODE,解析出目标模式,然后执行切换。这个方式的好处是远程可控,坏处是——如果通信断了,你就只能干瞪眼。
我的建议:永远保留一个遥控器通道作为“安全模式”开关。地面站再可靠,也比不上你手里的遥控器。我曾经在演示时遇到过地面站死机,全靠遥控器切回悬停才保住飞机。
机载计算机触发,这个在高级应用里很常见。比如无人机跟踪车辆,视觉算法检测到目标,通过串口发一个MAVLink消息给飞控:“切到跟踪模式”。飞控收到后,执行相应的控制逻辑。
最后是飞控内部逻辑。这个最隐蔽,也最容易被忽略。比如电池电压低于3.5V,飞控自动切到RTL(返航降落)。你如果不知道这个逻辑,飞着飞着突然发现飞机自己往回飞了,别慌——看看电压。
4.3 模式与状态机的关联
好了,现在我们知道模式是什么,也知道怎么触发切换。但飞控内部是怎么管理这些模式的?答案是——状态机。
状态机,你可以把它想象成一个“交通指挥员”。它告诉你:当前在哪个模式,允许切换到哪些模式,切换时需要做什么。
我画了一张图,帮你理解这个关系:
你看这张图。手动、辅助、全自动三个模式是平级的,可以互相切换。但紧急模式比较特殊——它可以从任何模式进入,而且一旦进入,通常只能切回手动模式(故障恢复后)。
状态机的好处是什么?它让模式切换变得可预测、可管理。飞控不会乱切,也不会切到不该切的地方。
注意:状态机必须处理所有可能的切换路径。漏掉一条,就可能出事故。我曾经见过一个飞控,从自动模式切回手动时,忘了重置积分项,结果飞机一接手就猛抬头——差点翻掉。
在MAVLink协议里,模式切换是通过MAV_CMD_DO_SET_MODE命令实现的。飞控收到这个命令后,会检查当前状态机是否允许这个切换。如果允许,就执行;如果不允许,就返回一个拒绝码。
举个例子,假设飞机正在执行紧急降落,你突然发一个指令让它切到航线模式。飞控会怎么处理?它会检查状态机——嗯,紧急模式下不允许切到航线,只能切到悬停或手动。于是它拒绝你的指令,并返回MAV_RESULT_DENIED。
这个机制很重要。它保证了飞控不会因为误操作而进入危险状态。
4.4 小结
好了,这一章的内容就这些。我们讲了三个核心概念:
- 飞行模式:一组控制律和约束条件的集合,决定了无人机怎么飞。
- 模式切换触发机制:遥控器、地面站、机载计算机、飞控内部逻辑,四种方式各有优劣。
- 模式与状态机的关联:状态机管理模式的切换逻辑,保证飞控行为可预测、安全可靠。
下一章我们会深入MAVLink协议,看看模式切换在消息层面是怎么实现的。到时候我会带你看MAV_CMD_DO_SET_MODE的完整报文结构,以及飞控内部是怎么解析和执行的。
今天就到这里。有问题随时问我。