1. 为什么固定翼飞控里藏着一个“能量管理大师”
玩过固定翼的小伙伴应该都有过这种体验:同样一架飞机,有人飞得丝滑得像在轨道上滑行,有人飞得油门忽大忽小、俯仰来回点头,远看就像在跳机械舞。以前你可能会归因于“手感不好”,但说实话,大多数时候问题出在飞控的“大脑”怎么理解飞行这件事上。
Pixhawk这类开源飞控里,固定翼的姿态控制和多旋翼完全是两个思路。多旋翼可以独立控制油门和姿态,因为四个电机直接对抗重力,动力响应快,姿态和推力基本解耦。但固定翼不一样,升力靠机翼、推力靠螺旋桨,油门往前顶、升降舵一拉,影响的往往是一个整体——速度变了、高度也变了、迎角还跟着变。所以如果你还用“油门管速度、升降舵管高度”这种朴素思路去调固定翼,很容易陷入一个死循环:速度掉了就推油门,推了油门飞机抬头,抬头了掉速度,然后又去压升降舵……最后飞控一直在“打架”。
这就是为什么Pixhawk的固定翼栈里有一个专门负责“统筹全局”的算法模块:TECS,全称Total Energy Control System,总能量控制系统。它不纠结于“油门控制什么、升降舵控制什么”这种传统分工,而是把飞机当成一个“能量体”来管理:油门管总能量,升降舵管能量的分配。思路简单,但解决的是固定翼飞行控制里最核心的那个问题——怎么让飞机又快又稳又省电地飞到你想要的高度和速度。
这篇文章我就从零开始拆这个算法,尽量用大白话加实操的方式,把TECS背后的能量逻辑、Pixhawk里到底怎么调、以及我踩过的那些坑一次讲清楚。适合刚接触固定翼调参的飞友,也适合看了半天源码还是似懂非懂的半资深玩家。
2. 先从能量守恒说起:飞机飞行的“账本”
要理解TECS,先得接受一个物理直觉:飞机在空中飞行,本质上是在不停地“花钱”和“赚钱”。这个钱就是机械能,或者说总能量。
2.1 总能量、势能和动能的关系
初中物理就学过,一个物体在高处有势能,有速度就有动能。飞机在空中的总能量,基本就等于重力势能加上动能:
- 势能部分:mgh,跟高度相关的能量,对应你爬升、下滑消耗或获得的能量。
- 动能部分:0.5mv²,跟空速相关的能量,对应飞机“冲”的能力。
两者的和,就是飞机当前的总能量。TECS最核心的假设就是:控制飞机飞行,本质上是控制这个总能量,以及总能量在“势能”和“动能”两种形式之间的分配。
生活化一点,你可以把总能量想象成你的银行存款。高度是“定期存款”,速度是“活期存款”。你要买房子(爬升),可能要把一部分活期转成定期;你要出国急用钱(加速),就得把定期取出来变活期。总金额(总能量)决定了你有没有钱,分配方式决定了你拿这笔钱干什么。
2.2 油门管总能量,升降舵管能量分配
这句话是TECS整个算法最精辟的总结,也是跟传统固定翼控制最大的区别。
传统思路是油门控速度、升降舵控高度。听起来合理,但会遇到前面说的耦合问题:你推油门,速度确实上去了,但多余的推力会让飞机抬头,高度也变了;你拉升降舵,高度确实上去了,但阻力增加,速度又掉了。如果飞控把速度和高度当成两个独立变量去控制,就会“你争我夺”。
TECS的思路则是:先算出一个“总能量误差”——比如飞机既想升高度又想加速,那总能量需求量就大,油门应该加;如果飞机只需要换一种能量形式,把高度转成速度,那总能量需求不变,油门不需要动,只需要升降舵配合完成能量形式的转换。
所以Pixhawk里的TECS模块,输出量非常“分工明确”:
- 油门指令:由总能量误差主导,决定飞机整体“赚不赚钱”。
- 俯仰角指令:由能量分配误差(势能跟动能的比例)主导,决定飞机“花多少钱在哪个账户里”。
这个思路的好处是自然解耦,两个控制环之间不会互相打架。
3. TECS算法核心逻辑拆解:Pixhawk里的“能量账房先生”
光懂能量守恒还不够,Pixhawk要真正把TECS跑起来,还得做一整套“记账、做预算、执行、纠偏”的流程。我把这套流程拆成几个关键环节,尽量简化,但保留了算法最基本的骨架。
3.1 需求侧:飞行任务要求多少能量?
TECS的输入非常简单,就两个核心期望值:
- 期望高度(由航线任务、航点或遥控指令决定)
- 期望空速(一般由固定巡航速度给定,或者根据飞行阶段切换)
有了期望高度,就能算出期望势能;有了期望空速,就能算出期望动能。两者相加就是当前飞行任务对飞机的“总能量需求”。
此时飞机实际也有一个高度和空速,对应实际势能和实际动能。TECS把两组一对比,得到两个核心差值:
- 总能量误差 = 期望总能量 - 实际总能量
- 能量分配误差 = 期望势能 - 实际势能 -(期望动能 - 实际动能)
别被公式吓到,本质上就是一本账:
- 总账亏了,就加钱(油门)。
- 定期账户和活期账户的比例不对,就调整分配方式(升降舵改变俯仰角)。
3.2 供给侧:油门如何根据“账本差额”调整
有了总能量误差,Pixhawk的TECS控制器会先做一步归一化处理:把误差转换成“等效的加速度误差”或者“等效爬升率误差”。因为不同飞机重量不一样,同样的误差需要的油门补偿也不同,归一化之后才好用一套固定参数去适应不同机型。
接着是PID式的修正逻辑。Pixhawk里TECS的油门环并不是简单比例控制,它有一组专门针对能量控制整定的增益参数,同时还会根据飞机的巡航油门做前馈。比如误差为0时,油门指令并不会回落到0,而是回到你设置的巡航油门附近,这一点特别重要——否则飞机平飞时油门会飘掉。
实际使用中,Pixhawk还会对油门变化率做限幅,避免“猛加油门、猛收油门”这种抽搐行为。比如在定高飞行遇到上升气流,飞机高度突然变化,能量误差突然出现,如果油门响应过于激进,整个飞行动力会非常难看,而且耗电。
3.3 分配侧:升降舵怎么决定“仰头”还是“低头”
这个环节是TECS最精妙的部分。算法不直接看“高度误差”去拉升降舵,而是看能量分配误差:
- 如果当前总能量充足,但速度偏低、高度偏高,说明能量过多地存在“高度账户”里,那就低头,把势能转化为动能。
- 如果当前总能量充足,但速度偏高、高度偏低,说明能量过多地存在“速度账户”里,那就抬头,把动能转化为势能。
换句话说,升降舵在TECS里,本质上是一个“能量形式转换器”的执行机构。这样做最大的好处是:转弯爬升时,飞控不会因为速度下降就猛推升降舵,而是先判断总能量够不够,如果够,那只是能量形式暂时错配,轻轻带一下杆就行;如果不够,升降舵和油门的动作方向会协调一致,共同挽救能量赤字。
Pixhawk对这个“分配”动作还加了一个速度保护逻辑:当空速过低接近失速速度时,TECS会“宁肯牺牲高度也保速度”。这就是为什么你在Pixhawk里能看到最小空速、失速保护之类的参数——它们最终都会通过能量分配逻辑影响俯仰指令,而不是单纯靠一个限幅。
3.4 输出侧:俯仰角、油门指令如何变成舵机动作
TECS输出的俯仰角指令,还要进入姿态控制层,由姿态控制器去控制升降舵实际偏转。而油门指令则直接传给混控器,变成油门舵机的PWM值。
这就形成了一条完整链路:期望高度和空速 → TECS计算总能量误差和能量分配误差 → 输出油门指令和俯仰角指令 → 姿态控制器输出升降舵指令 → 舵面动作。
理解这条链路很重要,因为后期调参时,你要分清楚问题出在哪一环:如果是高度保持不住但空速稳,大概率是TECS总能量环的油门增益问题;如果是俯仰振荡,可能是能量分配环节的俯仰增益过大;如果是舵面“抖舵”但飞行轨迹正常,那问题反而在姿态环。
4. Pixhawk里TECS参数逐项解读:从参数名到飞行手感
理论讲再多,最终都要落到Pixhawk地面站里那几个参数上。很多人一打开Mission Planner或者QGroundControl,看到一大片TECS开头、TECS结尾的参数就头大。我帮你把这些参数按功能分门别类,讲清楚每个是干什么的、调大了会怎样、调小了会怎样。
4.1 核心参数:TECS_SPDWEIGHT、TECS_PITCH、TECS_THR
这几个是出场率最高的参数,也是很多人第一个动的地方。
- TECS_SPDWEIGHT:这个参数控制“对速度的重视程度”。默认0.5表示等权对待高度和速度;大于0.5表示更重视速度保持,小于0.5更重视高度保持。实际飞行中,如果你发现飞机在气流扰动下速度波动大,可以适当调大;如果高度忽上忽下让人心慌,就调小。
- TECS_PITCH:俯仰角指令对能量分配误差的响应增益。调大了,升降舵对“高度-速度比例失衡”反应更激进,飞行动作更硬朗,但容易俯仰振荡;调小了,姿态柔和,但高度和速度恢复得慢。
- TECS_THR:油门环增益。影响总能量误差转换为油门指令的比例。调大了,加油门收油门更猛,能量恢复快但耗电大、动力冲击感强;调小了,动力响应“肉肉的”,遇到持续下沉气流容易掉高度。
从我的经验看,很多人一上来就乱调这三项,其实是没搞清楚它们各自管什么。先记住一句口诀:TECS_SPDWEIGHT管“偏科”,TECS_PITCH管“姿态响应”,TECS_THR管“动力响应”,分清了再动手。
4.2 经典参数组:TECS_TIME_CONST、TECS_RATE、TECS_SINK_MAX
这一组参数看起来冷门,但对飞行品质影响很大。
- TECS_TIME_CONST:总能量控制的时间常数,相当于整个TECS算法的“反应速度”。数值越小,系统响应越快,但容易振荡;数值越大,系统越迟钝,高度和速度恢复越慢。一般从5秒到10秒之间试,像飞翼这种小飞机可以偏小一点,大载重固定翼建议偏大。
- TECS_RATE:能量分配的时间常数,可以理解成“高度和速度之间相互转换”的快慢。这个参数决定了飞机从“速度偏低、高度偏高”状态恢复到平衡状态的节奏。调得太小,飞机会来回点头;调得太大,能量形式转换太慢,你会觉得飞机“反应慢半拍”。
- TECS_SINK_MAX:最大下沉率,单位m/s。这个参数在自动任务中特别重要,它限制了飞机在高度过高、需要下压时每分钟下降多少。设置太大,航线高度掉得快,速度容易冲高;设置太小,下降太磨叽,到达航点时高度偏高。
我调固定翼时习惯先把这几个参数设成比较保守的中间值,再根据实际飞行日志里的高度、空速曲线微调。
4.3 模式差异:TECS在自动、定高、返航里的表现差异
很多人不知道的是,Pixhawk的固定翼在不同飞行模式下,TECS参与度不一样:
- FBWA模式下:高度由遥控器油门控制,但TECS会接管升降舵来实现俯仰稳定,此时相当于“半个TECS”在工作。
- AUTO、GUIDED模式下:高度和空速都交给TECS全权管理,油门、俯仰都由它控制,这是考验TECS调参是否到位的主要场景。
- CRUISE模式:介于两者之间,油门仍然由TECS控制,但空速和高度可以由遥控器给定实时调整。
提这个是因为很多飞友在FBWA模式下飞得挺好,一切自动模式就露馅。这不是飞控坏了,而是FBWA模式下TECS只负责俯仰稳定,没有完全接管能量管理。真正检验TECS是否调好,要在自动航线里看高度保持曲线和空速曲线。
5. 保姆级实操调参流程:从仿真到实飞一次讲清
接下来这部分,是我个人认为全篇最“抄作业”价值最高的内容。我会按步骤走一遍从搭建仿真、到参数初步设定、再到实飞微调的完整流程,并把每一步的重点、判断依据说清楚。
5.1 第一步:用SITL仿真先跑通逻辑
在动真机之前,强烈建议先在Pixhawk的SITL(软件在环仿真)里把TECS调参流程跑一遍。原因很简单:真机调参有炸机风险,仿真里随便折腾。
SITL启动后,可以加载ArduPlane固件,配合Mission Planner地面站,在“模拟模式”里观察TECS相关曲线。仿真环境里最值得看的是:
- 高度通道上的阶跃响应,也就是把期望高度快速拉高50米,看飞机以多快的速度、多大的超调量爬升到目标高度。
- 空速通道上的响应,设定一个固定空速,看飞机从低速拉到巡航速度的过渡过程。
我在仿真里通常直接改参数、看曲线,几分钟就能把参数范围缩小到一个比较合理的区间,再拿到真机上微调,效率提升不止一倍。
5.2 第二步:真机试飞前的参数初始设定
仿真没问题后,在真机首轮试飞前,我会把TECS参数设成一套“保守起步值”:
| 参数 | 初始推荐值 | 说明 |
|---|---|---|
| TECS_SPDWEIGHT | 0.5 | 高度、速度等权 |
| TECS_PITCH | 1.0左右 | 中等增益 |
| TECS_THR | 0.5左右 | 避免动力响应过猛 |
| TECS_TIME_CONST | 6~8秒 | 反应稍平缓 |
| TECS_RATE | 4~5秒 | 能量分配适中 |
| TECS_SINK_MAX | 2.0 m/s | 下压不要太猛 |
注意这些不是“万能参数”,不同机型差异很大。飞翼这种舵面力矩大、推重比高的机型,增益可以偏大;大翼展滑翔机,时间常数要偏大,避免来回点头。
5.3 第三步:实飞日志判断TECS工作状态
实飞时,我通常会在自动模式里设计一组“阶梯高度变化”的航线:比如先定高100米平飞30秒,然后上到120米,再降到80米,每个阶段保持足够长的时间,方便观察稳态表现。
飞行结束后,把日志里这三组数据拉出来看:
- BAT.Angle(期望俯仰角)和ATT.Pitch(实际俯仰角):如果两者一直“缠斗”,说明俯仰增益偏大。
- TECS.hgt(期望高度)和GPS.Alt(实际高度):看超调量、恢复时间。
- CTUN.ThrOut(油门输出)和ARSPD.Airspeed(空速):如果油门一路“抽风”,说明TECS_THR或者限幅参数需要调整。
我在调一架小后拉机时,发现高度超调达到15%,明显偏大。排查后发现是TECS_PITCH增益偏高、TECS_TIME_CONST偏小导致系统反应过快。把时间常数从5秒改到8秒、增益小幅下调后,超调量降到5%以内,整个飞行手感“沉着”了很多。
5.4 第四步:针对飞行现象微调参数
实飞中最常见的就是两种现象——高度掉得多和速度波动大。
现象一:高度掉得多。自动航线平飞时高度慢慢下滑,空速却正常甚至偏快。这说明总能量不足,油门环有缺口,优先加大TECS_THR;如果加了油门后动力响应有点冲,再加一点TECS_TIME_CONST来平滑。
现象二:速度波动大。高度保持挺准,但空速忽高忽低,飞机像“喘气”。这说明能量分配环节在工作,但比例不合适。先调高TECS_SPDWEIGHT,让TECS更“在乎”速度,再看TECS_RATE是否偏小导致转换过快,适当增大。
如果两个现象同时存在,就从TECS_THR和TECS_TIME_CONST这对组合入手,多做几次飞行日志对比,每次只改一个参数,别一次动三四个。
6. 常见调参问题和排查技巧实录
这部分整理的是我在论坛、群聊和自己飞行中遇到的高频问题,都是那种“看了半天参数还是不知道改哪个”的情况。
6.1 飞机平飞时速度越飞越快,油门却还在增加
这个现象特别让人困惑。我先说一下原因:TECS的油门是“总能量”管理器,当飞机的实际空速高于期望空速时,说明动能账户“钱太多”。如果此时高度误差不大,正确的做法应该是通过升降舵把动能转成势能,而不是收油门。
如果速度越飞越快、油门还在加,最常见的原因是能量分配环节没起作用——可能是TECS_PITCH太小,或者飞控姿态限制导至俯仰指令被截断,无法抬头把动能转成势能。
排查思路:
- 看日志里TECS产生的期望俯仰角有没有持续为负或为零。
- 看是不是姿态权限里限制了俯仰角范围,导致TECS想抬头但抬不了。
有一次我在一架改装滑翔机上就遇到这个问题,折腾半天才发现是固定翼的姿态限制(Limits)里把最大俯仰角卡在10度,TECS想让飞机“抬头换能量”但权限不够,能量分配通道被堵死了。
6.2 定高模式下高度出现“呼吸效应”
“呼吸效应”是我自己起的名字,现象就是高度曲线像正弦波一样,有节奏地上升、下压、再上升。大多数情况下,控制周期稳定,但参数整定得偏“兴奋”,导致系统对误差的响应过于激进。
呼吸效应的排查思路:
- 先把日志里油门输出和俯仰角输出曲线拉出来,看两者是否存在一个固定的相位差。
- 如果油门先动、俯仰后追,说明TECS总能量环和能量分配环之间存在交互,大概率是TECS_TIME_CONST和TECS_RATE比例不合适。
- 尝试同时增大这两个时间常数,系统的“兴奋度”会下降,呼吸效应通常能缓解。
6.3 侧风环境下高度和速度控制变差
很多飞友发现,飞机一遇到风就“怂”,TECS表现大打折扣。其实不是TECS算法不支持侧风,而是侧风会让飞机的空速和地速产生偏差。TECS控制的是空速(动能来自空速,不是地速),但导航高度用的是GPS高度,两者更新频率和基准不同,会造成一定的控制延迟。
实战建议:
- 侧风大时,适当放宽对高度误差的容忍度,别指望飞控把高度锁死在一个点上。
- 把TECS_SPDWEIGHT稍微调高,优先保速度,避免进入失速边缘。
- 一定要在日志里同时看空速管数据和GPS地速,确认空速传感器在侧风环境下没有异常跳动。
如果你装的是非静压补偿的空速管,侧风大时气压波动可能让空速读数抖动,这时要先检查传感器数据质量,再调TECS参数,否则越调越乱。
6.4 调参前的最后检查清单
有一个习惯,我每次调TECS参数前都会过一遍清单,能省掉很多返工:
- 空速管是否堵塞、加热是否正常,确认空速数据平滑。
- 遥控器校准、油门行程是否正常,油门通道输出是否归零后还能满行程。
- 平飞配平是否做过,升降舵微调是否中立。
- 基于SITL仿真,记录当前一组参数对应的响应曲线,方便实飞后对比。
特别是空速计这一项,很多TECS“调不好”的问题其实根源在传感器。TECS计算动能的输入就靠空速,空速数据一塌糊涂,算法再牛也没用。
7. 能量思维改变了我对飞控调参的理解
最后说点个人体会。
我最早学TECS的时候,也是被满屏参数吓住了,一上来就想着“哪个参数能让飞机更稳”,结果调了半个月,飞机还是那个鬼样子。后来我强迫自己先不看参数,只去看能量公式和数据曲线,突然发现飞控“想说的话”其实很清楚:它不是在对高度和速度做零散的纠错,而是在对一个整体的能量账本做预算和结算。
有了这个视角,再看Pixhawk里TECS那一大堆参数,就不再是一个个孤立的数字,而是“预算多久结算一次”“没钱了加多少钱”“定期和活期的比例怎么腾挪”“紧急情况下先保哪个账户”的具体落地。调参变成了一种对飞行哲学的回应,而不是对着数字乱猜。
我个人的建议是:拿到一架新飞机,不要急着去复刻网上的参数。先用默认参数飞几个起落,带着能量视角去读日志,感受飞机在什么阶段能量富余、什么阶段能量亏空,再动参数。这样每改一个值,你都知道是在“调整哪一个账户的规则”,而不是碰运气。
TECS对固定翼来说,不是“可选优化”,而是真正让固定翼飞得安全、高效、聪明的地基。把这套能量思维吃透了,以后无论飞什么机型、用哪个飞控,底层逻辑都是相通的。