第2章:坐标系与坐标变换

各位同学好,今天我们来聊聊坐标系与坐标变换。说实话,这是火控系统里最基础也最容易出错的地方。我见过不少项目,最后打不准靶子,追根溯源都是坐标系搞混了。

2.1 常用坐标系

火控系统里,坐标系有好几种。每种都有它的用途。我个人习惯把它们分成四类:地心、地理、载体、视线。咱们一个一个说。

2.1.1 地心坐标系

地心坐标系,说白了就是把地球中心当原点。X轴指向格林尼治子午线,Z轴指向北极,Y轴按右手定则确定。这个坐标系在远程制导里用得最多。

我记得有一次做弹道仿真,目标距离超过200公里。如果用地理坐标系算,误差会累积得很大。后来换成地心坐标系,问题就解决了。嗯,这里要注意:地心坐标系是惯性系的一种近似,精度要求高的时候要考虑地球自转。

2.1.2 地理坐标系

地理坐标系就是我们常说的经纬高。原点在载体所在位置的地球表面。X轴指向北,Y轴指向东,Z轴指向地心反方向(也就是天向)。

你想想看,飞机飞在天上,飞行员关心的是「我离地面多高」「我朝哪个方向飞」。这些信息用地理坐标系最直观。我在项目中遇到过,有些新手把地理坐标系和地心坐标系混用,结果导航数据全乱了。

2.1.3 载体坐标系

载体坐标系是固定在运动物体上的。比如飞机、导弹、坦克。原点在载体重心,X轴指向载体前方,Y轴指向右方,Z轴指向下方(或者上方,看具体定义)。

为什么要有载体坐标系?因为传感器都装在载体上。雷达测到的目标方位角、俯仰角,都是相对于载体坐标系的。你需要把这些数据转换到地理坐标系,才能做火控解算。

关键点:载体坐标系是「动」的,地理坐标系是「静」的。两者之间的转换,是火控系统最核心的计算之一。

2.1.4 视线坐标系

视线坐标系,也叫LOS坐标系。原点在探测器(比如雷达、红外)位置,X轴指向目标方向。这个坐标系在跟踪和制导里特别重要。

我曾经做过一个项目,需要把雷达测到的目标视线角转换成载体坐标系下的控制指令。当时没注意视线坐标系的定义,结果控制律算出来全是反的。嗯,这种坑踩过一次就记住了。

2.2 欧拉角与四元数

坐标系之间的旋转关系,可以用欧拉角或四元数来描述。这两种方法各有优劣,我建议你都要掌握。

2.2.1 欧拉角

欧拉角用三个角度来描述旋转:偏航角(ψ)、俯仰角(θ)、滚转角(φ)。顺序一般是Z-Y-X,也就是先偏航、再俯仰、最后滚转。

欧拉角的优点是直观。你一看就知道飞机转了多大角度。但缺点也很明显——有万向锁问题。当俯仰角接近±90度时,偏航和滚转就分不清了。

避坑指南:我曾经在仿真里用欧拉角做姿态插值,结果在俯仰角85度附近出现了奇异。后来改用四元数,问题就解决了。如果你的系统俯仰角可能超过±80度,建议别用欧拉角。

2.2.2 四元数

四元数是一个超复数,形式为 q = w + xi + yj + zk。它用四个参数描述旋转,没有奇异性。说白了,四元数就是欧拉角的「升级版」。

四元数的好处是:

  • 没有万向锁
  • 插值平滑
  • 计算效率高(只需要乘法和加法)

但缺点是不直观。你看到 q = [0.707, 0, 0.707, 0],很难想象它对应什么姿态。所以实际工程中,我一般用四元数做计算,用欧拉角做显示。

2.3 坐标变换矩阵

坐标变换矩阵,就是把一个坐标系下的向量,转换到另一个坐标系下。说白了,就是乘一个3x3的矩阵。

2.3.1 基本旋转矩阵

绕X轴旋转角度θ的矩阵:

R_x(θ) = [1,    0,      0    ]
         [0,  cosθ,  -sinθ ]
         [0,  sinθ,   cosθ ]

绕Y轴旋转角度θ的矩阵:

R_y(θ) = [ cosθ,  0,  sinθ ]
         [   0,   1,    0   ]
         [-sinθ,  0,  cosθ ]

绕Z轴旋转角度θ的矩阵:

R_z(θ) = [cosθ, -sinθ,  0]
         [sinθ,  cosθ,  0]
         [  0,    0,    1]

2.3.2 复合变换

实际工程中,很少只绕一个轴旋转。比如从载体坐标系到地理坐标系,需要先绕Z轴转偏航角,再绕Y轴转俯仰角,最后绕X轴转滚转角。

复合变换矩阵就是三个基本矩阵的乘积:

C_b^n = R_z(ψ) * R_y(θ) * R_x(φ)

注意顺序!矩阵乘法不满足交换律。先转偏航再转俯仰,和先转俯仰再转偏航,结果完全不同。

个人经验:我建议你在写代码时,把旋转矩阵的乘法顺序写清楚。比如用注释标明「先偏航、再俯仰、最后滚转」。这样半年后回头看代码,还能记得当初的思路。

2.3.3 四元数到旋转矩阵

如果你用四元数做计算,最后还是要转成旋转矩阵。转换公式如下:

R = [1-2(y²+z²),  2(xy-wz),   2(xz+wy)  ]
    [2(xy+wz),    1-2(x²+z²), 2(yz-wx)  ]
    [2(xz-wy),    2(yz+wx),   1-2(x²+y²)]

其中 q = [w, x, y, z] 是单位四元数。

2.4 实战中的注意事项

讲了这么多理论,最后说点实际的。我在火控系统开发中总结了几条经验:

  1. 统一坐标系定义:项目开始前,一定要把各坐标系的原点、轴向定义写清楚。不然不同模块之间数据对接,全是坑。
  2. 注意旋转方向:顺时针还是逆时针?右手定则还是左手定则?这些细节搞错了,整个系统都会偏。
  3. 验证变换矩阵:写完后用几个特殊角度测试一下。比如旋转0度应该得到单位矩阵,旋转90度应该得到正交矩阵。
  4. 考虑数值精度:长时间仿真时,四元数会因数值误差不再满足单位长度约束。需要定期归一化。

好了,这一章的内容就到这里。坐标系与坐标变换是火控系统的「地基」,地基不稳,上面盖的房子再漂亮也没用。下一章我们讲目标运动模型,到时候会用到今天学的知识。

有什么问题,欢迎课后交流。