标准轨迹规划:基于能量高度的参考轨迹生成方法
各位工程师朋友,今天我们来聊聊终端制导里一个绕不开的话题——能量管理。说白了,就是怎么让飞行器在末端阶段,既不掉得太快,也不飞得太飘。
我个人习惯把这个问题拆成两步:先规划一条参考轨迹,再设计控制器去跟踪它。今天重点讲第一步——基于能量高度的参考轨迹生成。
为什么是能量高度?
你想想看,飞行器在末端飞行时,动能和势能是不断转换的。单纯看高度或者速度,都只能反映问题的一半。能量高度(Energy Height)这个概念,把两者统一起来了。
能量高度定义:
E_h = h + V²/(2g)
其中 h 是几何高度,V 是速度,g 是重力加速度。
单位是米,物理意义很直观——相当于把动能折算成势能,看总能量相当于多高的高度。
我在项目中遇到过这样的情况:某次试飞,单纯按高度规划轨迹,结果速度偏大,末端拉飘严重。后来换成能量高度规划,问题一下就解决了。嗯,这里要注意——能量高度不是万能的,但它确实比单一变量更鲁棒。
参考轨迹生成的核心逻辑
基于能量高度的轨迹生成,说白了就是回答一个问题:给定当前能量高度,应该对应什么样的几何高度和速度?
我一般分三步走:
- 建立能量高度-航程关系——确定从当前位置到目标点,能量高度应该怎么衰减
- 设计能量高度-高度剖面——把能量高度映射回几何高度
- 反算速度剖面——由能量高度和几何高度,反推出期望速度
实战小技巧:我个人习惯先画一张能量高度-航程的曲线图。斜率太陡说明能量消耗太快,末端可能拉不起来;太平缓则可能能量过剩,需要额外耗能手段。
标准轨迹生成流程
下面这张图是我自己总结的流程,你一看就明白:
具体怎么设计能量高度剖面?
这里我分享一个工程上常用的方法——分段线性化。为什么用分段线性?因为简单、可靠、调试方便。
假设飞行器从初始点(R₀, E_h₀)飞到目标点(R_f, E_h_f),中间可以设置若干个关键点:
| 航程 R (km) | 能量高度 E_h (km) | 说明 |
|---|---|---|
| R₀ = 100 | E_h₀ = 35 | 初始点,能量充足 |
| R₁ = 60 | E_h₁ = 20 | 中间过渡,开始减速 |
| R₂ = 20 | E_h₂ = 8 | 末端准备,能量较低 |
| R_f = 0 | E_h_f = 0.5 | 目标点,保留少量能量 |
有了这些点,线性插值就能得到任意航程处的期望能量高度:
// 伪代码示例
function get_Eh_ref(R):
for i = 0 to N-1:
if R_i <= R <= R_{i+1}:
// 线性插值
k = (E_h_{i+1} - E_h_i) / (R_{i+1} - R_i)
E_h_ref = E_h_i + k * (R - R_i)
return E_h_ref
return E_h_f // 超出范围则取目标值
注意:我曾经在这个环节吃过亏——分段点设得太少,轨迹不平滑;设得太多,又容易过拟合。一般3-5个分段点就够用了,具体要看飞行器的机动能力。
从能量高度到几何高度
有了期望的能量高度,下一步就是把它拆成几何高度和速度。这里有个自由度——同一能量高度可以对应不同的(h, V)组合。
我常用的策略是:先定高度剖面,再反算速度。高度剖面一般设计成航程的平滑函数,比如:
h_ref(R) = h_f + (h_0 - h_f) * (R / R_0)^n
其中 n 是形状参数,n=1 是线性,n>1 是下凸(末端拉平),n<1 是上凸(末端陡降)。
然后速度就由能量高度公式反算:
V_ref(R) = sqrt( 2 * g * (E_h_ref(R) - h_ref(R)) )
避坑指南:我曾经遇到过反算出的速度小于失速速度的情况。解决办法很简单——在规划能量高度剖面时,就要保证 E_h_ref(R) - h_ref(R) 始终大于一个安全阈值。
工程实现中的几个要点
- 实时性:参考轨迹生成是在线进行的,计算量不能太大。分段线性+查表法是最稳妥的。
- 平滑性:如果轨迹的一阶导数不连续,控制器会抖。我习惯在分段点用三次样条做平滑过渡。
- 鲁棒性:实际飞行中能量消耗和理论值总有偏差。建议在能量高度剖面中预留5%-10%的余量。
嗯,今天就先聊到这里。能量高度这个方法,说白了就是把一个二维问题降成一维来解。你上手试试,会发现它比想象中更实用。
公众号:蓝海资料掘金营,微信deep3321