第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));
💡 核心要点: 弹道倾角theta_t是速度矢量与水平面的夹角,弹道偏角psi_t是速度矢量在水平面上的投影与某个参考方向的夹角。这两个角跟欧拉角里的俯仰角、偏航角不是一回事,千万别搞混了。

2.5 本章知识体系总览

为了让大家有个整体概念,我画了张图,把本章的核心逻辑串起来:

第2章 导弹运动学基础 - 知识体系 地面坐标系 OgXgYgZg 弹体坐标系 ObXbYbZb 速度坐标系 OvXvYvZv 欧拉角 ψ, θ, φ 攻角/侧滑角 α, β 导弹质心运动方程 牛顿第二定律 + 坐标系旋转效应 地面系形式 直观,便于理解 状态量:x, y, z, vx, vy, vz 弹道坐标系形式 工程常用,气动力简单 状态量:V, θt, ψt 核心:坐标系定义 → 坐标变换 → 运动方程建立
📌 个人经验: 我建议大家在写仿真代码时,先把坐标系变换封装成独立的函数。比如 transform_ground_to_body(psi, theta, phi)transform_body_to_velocity(alpha, beta)。这样主程序里调用起来清爽,也方便调试。我曾经在一个项目里,就是因为变换矩阵散落在各处,查bug查到怀疑人生。

2.6 小结

这一章我们聊了三件事:

  1. 坐标系定义:地面系、弹体系、速度系,各自的原点和轴向
  2. 坐标变换:欧拉角、攻角侧滑角,以及对应的旋转矩阵
  3. 质心运动方程:地面系形式和弹道坐标系形式

这些东西看着枯燥,但它们是后续所有制导律设计、控制系统分析的基础。你想想看,如果连导弹当前在哪儿、朝哪个方向飞都描述不清楚,还谈什么制导控制?

下一章,我们会在这个基础上,引入导弹的绕质心运动——也就是姿态动力学。到时候你会发现,坐标系变换会变得更加频繁,也更加重要。


公众号:蓝海资料掘金营,微信deep3321