简介:本文用入轨、变轨和飞往月球三个场景,讲解轨道力学、微分方程、制导导航与卡尔曼滤波在火箭飞行规划中的作用。读者将学会搭建简化的轨道数值模拟,计算入轨速度与霍曼转移速度增量,并掌握验证结果和排查误差的基本思路。
本教程要帮助读者完成一个简化的火箭轨道模拟。完成后,读者应能做到三件事:用牛顿万有引力定律描述火箭的运动,计算近地轨道所需的速度与逃逸速度,并用霍曼转移估算从一个轨道转移到另一个轨道的燃料代价。教程还会说明,实际飞行中如何用卡尔曼滤波估计位置与速度,以及如何用反馈控制修正偏差。
教程不涉及任何具体飞行器的内部参数,所有模型均为教学用途的通用简化模型,结果用于理解原理和验证方法,不能直接用于真实飞行决策。
本教程适合以下读者:
适用场景包括:课程实验、仿真原型搭建、算法教学和技术评审前的概念验证。
在开始之前,需要准备以下内容。
火箭在地球附近受到的主要作用力是地球引力。引力指向地心,大小与距离的平方成反比。因此,火箭在飞行中并不沿直线运动,而是持续受到向地心的加速度,运动轨迹会弯曲。
如果火箭的水平速度足够大,它下落的同时,地球表面也在“弯走”,火箭就会一直绕着地球运动,形成轨道。轨道的形状由速度大小和方向共同决定:
理解这一点是后续所有计算的基础。发射任务的核心问题,是如何在合适的位置把速度调整到合适的大小和方向。
用三维位置向量 r 和速度向量 v 描述火箭状态。以地心为原点,地球引力加速度可写为:
a = -μ · r / |r|^3
其中 μ = G·M 是中心天体的引力参数,地球的 μ 约为 398600 km^3/s^2。这个式子说明加速度方向指向地心,大小与距离的平方成反比。
把它写成一阶微分方程组,便于数值求解:
state = [x, y, z, vx, vy, vz]d(state)/dt = [vx, vy, vz, ax, ay, az]其中 (ax, ay, az) = -μ · (x, y, z) / (x²+y²+z²)^(3/2)
注意事项:如果发动机推力参与模拟,还需在加速度中加入推力项除以质量。教学模型可以先忽略推力,只模拟自由飞行段,这样更容易检验程序是否正确。
上述微分方程通常没有简单的解析解,需要用数值积分方法逐步推进。常用的做法是固定步长的四阶龙格-库塔法(RK4)。
function step(state, dt):k1 = f(state)k2 = f(state + dt/2 * k1)k3 = f(state + dt/2 * k2)k4 = f(state + dt * k3)return state + dt/6 * (k1 + 2*k2 + 2*k3 + k4)for t in range(0, T_end, dt):state = step(state, dt)record(t, state)
其中 f 为第二步得到的导数函数。步长 dt 决定精度与计算量。对于近地轨道,几十秒量级的步长通常能得到稳定结果。步长过大时,轨道会出现能量漂移,这一点会在验证环节体现。
这一步用公式得到两个关键速度,并与模拟结果对照。
圆轨道速度:v_circ = sqrt(μ / r)
逃逸速度:v_esc = sqrt(2μ / r)
以地球半径 6371 km 加上 200 km 高度计算,r 约为 6571 km,可得 v_circ 约为 7.8 km/s,v_esc 约为 11.0 km/s。这说明近地轨道水平速度约 7.8 km/s 是进入稳定圆轨道的基准值。速度低于该值,轨道会与地面相交;速度明显高于该值但低于逃逸速度,轨道变为椭圆;超过逃逸速度,火箭将脱离地球引力束缚。
在程序中,可以用轨道能量判断轨道类型:
energy = v²/2 - μ/renergy < 0 -> 束缚轨道(圆或椭圆)energy = 0 -> 抛物线轨道(临界逃逸)energy > 0 -> 双曲线轨道(脱离)
霍曼转移是两圆轨道、共面条件下的双脉冲转移方法,常用于估算从低轨道转移到更高轨道所需的燃料。其基本思路是:在起始圆轨道上加速一次,形成一个与目标轨道相切的椭圆;到达远地点后再加速一次,使轨道变圆。
设起始圆轨道半径为 r1,目标圆轨道半径为 r2,转移椭圆的半长轴为 a = (r1 + r2) / 2。
第一次加速量:
Δv1 = sqrt(μ/r1) · ( sqrt(2·r2 / (r1+r2)) - 1 )
第二次加速量:
Δv2 = sqrt(μ/r2) · ( 1 - sqrt(2·r1 / (r1+r2)) )
总速度增量为 Δv = Δv1 + Δv2。转移时间为半个椭圆周期:
t_transfer = π · sqrt(a³ / μ)
以近地轨道(约 6571 km)转移到地球同步轨道半径(约 42164 km)为例,总速度增量约为 3.9 km/s,转移时间约为 5.3 小时。读者可以用程序复算,并与该数值比较。
这里需要说明:霍曼转移是理想化的教学模型,忽略了月球引力等其他天体影响。早期载人登月任务的实际轨迹使用了更复杂的规划方法,但霍曼转移提供了理解“最省燃料”思路的起点:在满足起止条件的前提下,选择速度增量最小的转移路径。
真实飞行中,传感器的测量值含有噪声,模型本身也存在误差。卡尔曼滤波的作用,是把模型预测与测量值结合起来,得到比单独使用任何一方都更可靠的状态估计。
滤波器每个时刻包含两步:预测和更新。
初始化: x_hat = 初始状态估计P = 初始协方差Q = 过程噪声协方差R = 测量噪声协方差对每个时刻 k:# 预测x_pred = F · x_hatP_pred = F · P · F^T + Q# 更新K = P_pred · H^T · (H · P_pred · H^T + R)^(-1)x_hat = x_pred + K · (z_k - H · x_pred)P = (I - K · H) · P_pred
其中 F 为状态转移矩阵,H 为测量矩阵,z_k 为第 k 时刻的测量值,K 为卡尔曼增益。卡尔曼增益决定了更相信模型还是更相信测量:Q 越大越相信测量,R 越大越相信模型。
导航的第三个环节是控制。火箭在飞行中会根据估计状态与目标状态之间的误差调整姿态和推力,形成闭环反馈。
一个简化的比例-微分控制可以写为:
error = target_state - x_hatcommand = Kp * error + Kd * d(error)/dtcommand = saturate(command, max_limit)
其中 Kp 决定对偏差的响应强度,Kd 用于抑制振荡。命令需要加入饱和限制,因为实际推力和姿态调整能力都有上限。增益选择不当会导致两种典型问题:增益过小,修正缓慢,偏差长时间存在;增益过大,系统来回振荡甚至发散。
完成上述步骤后,可以通过以下方法判断程序是否正确。