第2章 导弹运动学基础:坐标系定义、坐标变换、导弹质心运动方程
各位同学,大家好。我是你们这门课的主讲。今天咱们聊点硬核的——导弹运动学基础。
说实话,我刚开始搞导弹制导的时候,觉得坐标系这东西太基础了,不就是几个轴嘛。结果第一次做半实物仿真,坐标系没对齐,导弹直接往反方向飞了。嗯,那次教训挺深刻的。所以,坐标系这东西,看似简单,但它是整个制导控制大厦的地基。地基歪了,楼盖得再漂亮也得塌。
2.1 为什么要定义坐标系?
你想想看,导弹在天上飞,它的位置、速度、姿态,总得有个参考吧?没有坐标系,你说“导弹往左飞”,那“左”是相对于谁的左?是相对于地面的左,还是相对于导弹机头的左?
所以,我们必须定义几套坐标系,把导弹的运动说清楚。我个人习惯,先把坐标系分清楚再写代码,能省掉后面80%的调试时间。
2.2 常用的几套坐标系
搞导弹制导,下面这几套坐标系你得烂熟于心:
2.2.1 地面坐标系(地系)
也叫惯性坐标系(近似)。原点通常选在发射点。OgXg轴指向目标方向(或正北),OgYg轴垂直向上,OgZg轴按右手定则确定。
说白了,这就是我们站在地面上看导弹飞行的“上帝视角”。
2.2.2 弹体坐标系(体系)
原点在导弹质心。ObXb轴沿弹体纵轴指向头部,ObYb轴在弹体对称平面内垂直于Xb轴向上,ObZb轴按右手定则确定。
这个坐标系是跟着导弹一起转的。我在做气动数据插值时,气动系数都是基于这个坐标系给的。
2.2.3 速度坐标系(速度系)
原点也在导弹质心。OvXv轴沿速度矢量方向,OvYv轴在弹体对称平面内垂直于速度矢量向上,OvZv轴按右手定则确定。
这个坐标系跟空气动力学关系最密切。升力、阻力都是在这个坐标系下定义的。
2.3 坐标变换——怎么从一套坐标系转到另一套?
坐标系定义好了,问题来了:导弹在弹体系下的姿态数据,怎么换算到地面系下?这就涉及到坐标变换了。
坐标变换的核心就是旋转矩阵。说白了,就是把一个向量从一个坐标系“掰”到另一个坐标系。
2.3.1 欧拉角与旋转矩阵
从地面系到弹体系,通常用三个欧拉角来描述:
- 偏航角 ψ:绕Yg轴旋转
- 俯仰角 θ:绕Z轴旋转(第一次旋转后的新Z轴)
- 滚转角 φ:绕X轴旋转(第二次旋转后的新X轴)
旋转顺序是:先偏航,再俯仰,最后滚转。这个顺序不能乱,乱了结果就完全不对了。
对应的旋转矩阵长这样:
// 从地面系到弹体系的旋转矩阵
// 旋转顺序:偏航 -> 俯仰 -> 滚转
// 输入:psi(偏航角), theta(俯仰角), phi(滚转角)
// 输出:3x3旋转矩阵 C_g2b
C_g2b[0][0] = cos(theta)*cos(psi);
C_g2b[0][1] = cos(theta)*sin(psi);
C_g2b[0][2] = -sin(theta);
C_g2b[1][0] = sin(phi)*sin(theta)*cos(psi) - cos(phi)*sin(psi);
C_g2b[1][1] = sin(phi)*sin(theta)*sin(psi) + cos(phi)*cos(psi);
C_g2b[1][2] = sin(phi)*cos(theta);
C_g2b[2][0] = cos(phi)*sin(theta)*cos(psi) + sin(phi)*sin(psi);
C_g2b[2][1] = cos(phi)*sin(theta)*sin(psi) - sin(phi)*cos(psi);
C_g2b[2][2] = cos(phi)*cos(theta);
2.3.2 从弹体系到速度系的变换
这个变换用到了攻角α和侧滑角β。攻角是速度矢量在弹体对称平面内与弹体纵轴的夹角,侧滑角是速度矢量与弹体对称平面的夹角。
变换矩阵如下:
// 从弹体系到速度系的旋转矩阵
// 输入:alpha(攻角), beta(侧滑角)
// 输出:3x3旋转矩阵 C_b2v
C_b2v[0][0] = cos(alpha)*cos(beta);
C_b2v[0][1] = sin(beta);
C_b2v[0][2] = sin(alpha)*cos(beta);
C_b2v[1][0] = -cos(alpha)*sin(beta);
C_b2v[1][1] = cos(beta);
C_b2v[1][2] = -sin(alpha)*sin(beta);
C_b2v[2][0] = -sin(alpha);
C_b2v[2][1] = 0;
C_b2v[2][2] = cos(alpha);
2.4 导弹质心运动方程
好了,坐标系有了,变换也会了。接下来就是导弹怎么飞的问题了。
导弹质心运动方程,说白了就是牛顿第二定律在导弹上的应用。F = ma,但这里的力是矢量,加速度也是矢量,而且是在旋转坐标系下。
2.4.1 在地面系下的质心运动方程
这个形式最简单,也最直观:
// 地面系下的质心运动方程
// 状态量:位置(x,y,z),速度(vx,vy,vz)
// 输入:合力(Fx,Fy,Fz),导弹质量m
dx/dt = vx;
dy/dt = vy;
dz/dt = vz;
dvx/dt = Fx / m;
dvy/dt = Fy / m;
dvz/dt = Fz / m;
这里的合力包括:推力、气动力(升力+阻力)、重力。注意,气动力通常是在速度系下给出的,需要先变换到地面系。
2.4.2 在弹道坐标系下的质心运动方程
实际工程中,我们更常用弹道坐标系(速度坐标系的一种变体)。为什么?因为气动力的表达式在这个坐标系下最简单。
弹道坐标系下的方程稍微复杂一点,因为要考虑坐标系的旋转:
// 弹道坐标系下的质心运动方程
// 状态量:速度V,弹道倾角theta_t,弹道偏角psi_t
// 输入:切向加速度at,法向加速度an,侧向加速度az
dV/dt = at;
d(theta_t)/dt = an / V;
d(psi_t)/dt = -az / (V * cos(theta_t));
2.5 本章知识体系总览
为了让大家有个整体概念,我画了张图,把本章的核心逻辑串起来:
transform_ground_to_body(psi, theta, phi),transform_body_to_velocity(alpha, beta)。这样主程序里调用起来清爽,也方便调试。我曾经在一个项目里,就是因为变换矩阵散落在各处,查bug查到怀疑人生。
2.6 小结
这一章我们聊了三件事:
- 坐标系定义:地面系、弹体系、速度系,各自的原点和轴向
- 坐标变换:欧拉角、攻角侧滑角,以及对应的旋转矩阵
- 质心运动方程:地面系形式和弹道坐标系形式
这些东西看着枯燥,但它们是后续所有制导律设计、控制系统分析的基础。你想想看,如果连导弹当前在哪儿、朝哪个方向飞都描述不清楚,还谈什么制导控制?
下一章,我们会在这个基础上,引入导弹的绕质心运动——也就是姿态动力学。到时候你会发现,坐标系变换会变得更加频繁,也更加重要。
公众号:蓝海资料掘金营,微信deep3321