4. 主流工具链选型
起飞和降落,是无人机飞行中最容易出问题的两个阶段。我见过太多新手在SITL仿真里飞得挺好,一到了起飞和降落就手忙脚乱。说白了,这两个阶段涉及模式切换、高度判断、地面效应,任何一个环节没处理好,飞机就可能翻跟头。
这一章,咱们就把起飞和降落彻底讲透。手动怎么起?自动怎么起?降落的逻辑是什么?万一出事了怎么紧急处理?你跟着我走一遍,心里就有底了。
核心要点:起飞和降落不仅仅是“油门拉起来”和“油门收回去”。它们背后是飞控的状态机在控制——从地面到空中,再从空中回到地面,每一步都有严格的逻辑判断。
4.1 手动起飞流程
手动起飞,是每个飞手的基本功。在SITL仿真里,我建议你先把手动起飞练熟,再去碰自动起飞。为什么?因为手动起飞能让你直接感受油门响应和姿态变化,这对理解飞控行为很有帮助。
手动起飞的标准流程,其实就四步:
- 解锁(Arm)—— 通过遥控器或MAVLink指令解锁电机。解锁后,螺旋桨开始低速旋转。
- 推油门至50%以上—— 油门低于50%时,飞控认为你还在做地面检查。超过50%,飞控开始增加电机转速,飞机离地。
- 离地后调整姿态—— 飞机刚离地时容易晃动,你需要用摇杆稳住。我个人习惯是离地后先悬停半秒,确认姿态稳定再继续爬升。
- 切换至Loiter或AltHold模式—— 到达安全高度后,切换到定高或悬停模式,让飞控接管高度保持。
小技巧:在SITL里练习手动起飞时,可以先把油门曲线调得柔和一些。用RC3_MIN和RC3_MAX参数调整油门行程范围,让油门响应不那么灵敏。我曾经在仿真里把油门曲线设得太陡,结果一推油门飞机直接窜到10米高,吓我一跳。
手动起飞最容易犯的错误是什么?油门推得太快。你想想看,飞机在地面时,螺旋桨产生的气流会被地面反弹回来,这叫“地面效应”。地面效应会让飞机在离地瞬间获得额外的升力,如果你油门推得太猛,飞机就会突然弹跳起来。嗯,这里要注意——离地后稍微收一点油门,抵消地面效应的影响。
4.2 自动起飞逻辑(Takeoff命令)
自动起飞,说白了就是飞控帮你完成整个起飞过程。你只需要发一个Takeoff命令,设定目标高度,剩下的交给飞控。
在SITL里,自动起飞的流程是这样的:
- 飞控收到
Takeoff命令后,先检查飞机是否已解锁。如果没解锁,命令会被拒绝。 - 解锁后,飞控自动将油门推到起飞油门值(由
TKOFF_THR_MIN和TKOFF_THR_MAX参数控制)。 - 飞机离地后,飞控以
TKOFF_RAMP_TIME参数设定的速率,平滑增加油门,使飞机以恒定爬升率上升。 - 到达目标高度后,飞控自动切换至
Loiter模式,保持位置和高度悬停。
这里有个关键参数——MIS_TAKEOFF_ALT。这个参数定义了自动起飞的目标高度。我遇到过有人把这个参数设成0,结果飞控起飞后直接悬停在离地0米的位置,相当于没飞起来。所以,MIS_TAKEOFF_ALT至少要设成2米以上,留出安全空间。
自动起飞 vs 手动起飞:
| 对比项 | 手动起飞 | 自动起飞 |
|---|---|---|
| 操作方式 | 遥控器油门杆 | MAVLink命令 / 任务指令 |
| 油门控制 | 飞手手动控制 | 飞控自动控制 |
| 爬升率 | 由飞手决定 | 由参数TKOFF_RAMP_TIME决定 |
| 适用场景 | 测试、特技飞行 | 任务飞行、航线规划 |
| 风险 | 操作失误易炸机 | 参数设置不当可能失控 |
在SITL里测试自动起飞,我建议你用mission planner的Action选项卡,直接发送Takeoff命令。你也可以在航线任务里插入一个NAV_TAKEOFF航点,让飞机在任务开始时自动起飞。
# 通过MAVLink发送Takeoff命令(目标高度10米)
# 使用pymavlink库
from pymavlink import mavutil
master = mavutil.mavlink_connection('udp:127.0.0.1:14550')
master.wait_heartbeat()
# 发送Takeoff命令
master.mav.command_long_send(
master.target_system,
master.target_component,
mavutil.mavlink.MAV_CMD_NAV_TAKEOFF,
0, # 确认
0, # 俯仰角(默认0)
0, # 偏航角(默认0)
0, # 无效
0, # 无效
0, # 纬度(默认当前位置)
0, # 经度(默认当前位置)
10 # 目标高度(米)
)
警告:自动起飞前,一定要确保GPS定位正常(3D Fix),且EK3_*参数配置正确。如果GPS信号不好,飞控可能无法保持位置,飞机起飞后会漂移。我在一次仿真测试中忘了检查GPS状态,结果飞机起飞后直接往北漂了50米,差点撞到虚拟的建筑物。
4.3 降落模式(Land)
降落模式,是飞控自动完成降落的过程。你切换到Land模式后,飞控会以预设的下降率(由LAND_SPEED参数控制)降低高度,直到触地。
降落模式的逻辑其实挺有意思的:
- 飞控先以恒定下降率下降,同时保持位置(GPS或光流)。
- 当高度低于某个阈值(默认0.5米)时,飞控进入“地面检测”阶段。
- 飞控通过加速度计检测是否触地。如果检测到触地,飞控会自动降低油门至0,并锁定电机。
- 如果飞控长时间检测不到触地(比如降落在软草地上),它会以更低的下降率继续下降,直到触地。
这里有个坑——LAND_SPEED参数。这个参数控制下降率,单位是厘米/秒。默认值是50(即0.5米/秒)。如果你把这个值设得太大,飞机会快速砸向地面;设得太小,降落过程会很长。我个人习惯设成30-40厘米/秒,既保证降落速度,又不会太猛。
经验之谈:在SITL里测试降落时,可以观察STATUSTEXT消息。飞控在降落过程中会输出类似Land: started、Land: descending、Land: detecting ground、Land: landed的状态信息。这些信息对调试很有帮助。
4.4 紧急降落
紧急降落,是当飞机出现严重故障时的保命手段。比如GPS丢失、电池电压过低、或者飞控检测到传感器异常。
ArduPilot提供了几种紧急降落方式:
| 方式 | 触发条件 | 行为 |
|---|---|---|
| Land模式 | 手动切换 | 以正常下降率降落,保持位置 |
| RTL(返航) | 信号丢失 / 手动切换 | 先返航到家点,再自动降落 |
| 紧急降落(EKF Failsafe) | EKF定位异常 | 立即下降,不保持位置 |
| 紧急解锁(Disarm) | 严重故障 / 手动触发 | 直接锁定电机,自由落体(慎用) |
我最常用的是RTL。在SITL里,你可以通过遥控器上的一个开关来触发RTL。我个人习惯把RTL设在一个容易够到的开关上,一旦发现异常,立刻拨过去。
但要注意——RTL不是万能的。如果GPS信号丢失,RTL无法返航。这时候你需要用Land模式,让飞机在当前位置上空直接降落。我曾经在一次仿真中模拟了GPS丢失,然后切换到Land模式,飞机稳稳地降落在了原地。嗯,这个测试很有必要做一遍。
紧急情况下的操作顺序:
- 先尝试切换至Land模式,让飞机在当前位置上空降落。
- 如果Land模式无效(比如飞控完全失控),尝试紧急解锁(Disarm)。
- 紧急解锁后,电机会立即停转,飞机自由落体。这是最后的手段,只适用于即将撞到人群或重要设施的情况。
在SITL里,我建议你专门花时间练习紧急降落流程。反复模拟GPS丢失、电池故障、电机失效等场景,直到形成肌肉记忆。
4.5 本章小结
起飞和降落,是无人机飞行的“头”和“尾”。手动起飞让你掌握油门和姿态的配合;自动起飞让你理解飞控的状态机逻辑;降落模式让你学会安全回收;紧急降落则是你的最后一道防线。