第二章 坐标系与运动学基础

各位同学,今天我们来聊聊坐标系和运动学。说实话,这部分内容看起来有点枯燥,但它是整个多目标航迹规划的基石。你想想看,连飞机在哪儿、往哪儿飞都说不清楚,还谈什么路径规划?

我个人习惯把坐标系比作「语言的语法」。没有统一的语法,你说你的、我说我的,信息就乱套了。在无人机领域,我们至少得掌握三种「语法」:地心地固、北东地、还有机体坐标系。

2.1 常用坐标系

2.1.1 地心地固坐标系(ECEF)

这个坐标系,说白了就是把地球当成一个椭球体。原点在地心,Z轴指向北极,X轴指向本初子午线与赤道的交点,Y轴按右手定则确定。

我在项目中遇到过一个问题:用GPS数据直接做局部路径规划,结果飞机在极地附近飘得离谱。为什么?因为GPS给的是经纬高,而ECEF才是真正的笛卡尔坐标系。你拿经纬度直接算距离,误差会随着纬度升高而放大。

关键点:ECEF是全局坐标系,适合做长距离航迹规划。但它的数值变化范围大(几千公里量级),做局部规划时精度不够。

2.1.2 北东地坐标系(NED)

NED坐标系,原点通常选在无人机起飞点或地面站位置。X轴指向北,Y轴指向东,Z轴指向地心(也就是「下」)。

嗯,这里要注意:NED是右手坐标系,但Z轴向下。很多新手会搞混,以为Z轴向上。我曾经因为这个错误,让一架无人机在仿真里直接「钻地」了——想想都后怕。

NED坐标系的好处是:数值范围小(通常几公里内),计算方便。我建议在做局部避障和编队飞行时,优先使用NED。

2.1.3 机体坐标系(Body Frame)

机体坐标系是固定在无人机身上的。原点在质心,X轴指向机头,Y轴指向右翼,Z轴指向下(符合右手定则)。

这个坐标系有什么用?说白了,所有传感器(IMU、磁力计、空速管)测量的数据,都是机体坐标系下的。你要把加速度、角速度转换到NED或ECEF,才能做导航。

坐标系 原点 典型用途 我踩过的坑
ECEF 地心 全球导航、长航程规划 极地附近精度下降
NED 起飞点/地面站 局部规划、编队控制 Z轴方向容易搞反
Body 无人机质心 传感器测量、姿态控制 IMU数据需先校准

2.2 坐标变换

坐标变换,说白了就是「翻译」。把机体坐标系下的数据翻译成NED,再把NED翻译成ECEF。翻译的「词典」就是旋转矩阵。

2.2.1 旋转矩阵

三维空间中的旋转,可以用3x3的旋转矩阵表示。绕X轴、Y轴、Z轴的旋转矩阵分别是:

// 绕Z轴旋转(偏航角 ψ)
R_z(ψ) = [cosψ  -sinψ  0]
         [sinψ   cosψ  0]
         [0      0     1]

// 绕Y轴旋转(俯仰角 θ)
R_y(θ) = [cosθ   0   sinθ]
         [0      1   0   ]
         [-sinθ  0   cosθ]

// 绕X轴旋转(滚转角 φ)
R_x(φ) = [1   0      0   ]
         [0   cosφ  -sinφ]
         [0   sinφ   cosφ]

完整的机体→NED变换,需要按Z-Y-X顺序旋转:

R_b2n = R_z(ψ) * R_y(θ) * R_x(φ)

我的小技巧:写代码时别自己手算旋转矩阵,直接用现成的库(比如Eigen、NumPy的scipy.spatial.transform)。我见过太多人因为手算时符号搞错,导致飞机「翻跟头」。

2.2.2 四元数

旋转矩阵有个问题:万向锁。当俯仰角接近±90°时,偏航和滚转无法区分。这时候,四元数就派上用场了。

四元数 q = [w, x, y, z],其中 w 是实部,x、y、z 是虚部。它没有奇点,而且插值平滑。我个人习惯在姿态估计和路径平滑时用四元数,只在最终输出时转成欧拉角。

警告:四元数必须归一化!我刚开始做飞控时,忘了归一化,结果姿态估计越飘越远。检查了三天才发现是这个问题。

2.3 刚体运动学模型

有了坐标系和变换,我们终于可以描述无人机的运动了。刚体运动学,说白了就是研究「位置、速度、姿态、角速度」之间的关系。

2.3.1 位置与速度

在NED坐标系下,位置 p = [p_n, p_e, p_d]^T,速度 v = [v_n, v_e, v_d]^T。它们的关系很简单:

p_dot = v

嗯,就这么简单。但要注意:这里的 p_d 是高度(向下为正),而通常我们说的「高度」是向上为正。所以转换时要加个负号。

2.3.2 姿态与角速度

姿态用欧拉角表示:Φ = [φ, θ, ψ]^T。角速度 ω = [p, q, r]^T(机体坐标系下)。

它们的关系稍微复杂一点:

Φ_dot = W(Φ) * ω

其中 W(Φ) = [1,  sinφ*tanθ,  cosφ*tanθ]
            [0,  cosφ,      -sinφ     ]
            [0,  sinφ/cosθ,  cosφ/cosθ]

看到 tanθ 了吗?当 θ = ±90° 时,tanθ 无穷大。这就是万向锁的数学本质。所以,如果你要做全姿态飞行(比如特技无人机),千万别用欧拉角做积分。

2.3.3 完整的运动学模型

把位置和姿态合在一起,就是6自由度刚体运动学模型:

状态量: x = [p_n, p_e, p_d, φ, θ, ψ]^T
输入量: u = [v_n, v_e, v_d, p, q, r]^T

状态方程:
p_dot = v
Φ_dot = W(Φ) * ω

这个模型是路径规划的基础。你想想看,规划器要生成一条轨迹,本质上就是在找一条满足这个运动学约束的路径。

核心思想:路径规划不是画一条线那么简单。你得保证无人机能飞出来——速度不能太大、姿态不能太陡、角速度不能超限。这些约束,都藏在运动学模型里。

2.4 本章小结

好了,我们来捋一捋:

  • 三种坐标系:ECEF(全球)、NED(局部)、Body(传感器)
  • 坐标变换:旋转矩阵(直观但万向锁)、四元数(无奇点但需归一化)
  • 运动学模型:位置-速度、姿态-角速度,6自由度刚体

说实话,这些内容看起来是基础,但我在实际项目中见过太多因为坐标系搞错而炸机的案例。有一次,一个团队把机体坐标系的加速度直接当成NED坐标系的加速度用,结果无人机一飞就偏——还好是在仿真里发现的。

所以,我的建议是:每次做坐标变换时,都画个图确认一下方向。别嫌麻烦,这比炸机后返厂维修省事多了。

坐标系与运动学基础 - 知识体系 地心地固 (ECEF) 原点:地心 用途:全球导航 注意:极地精度下降 北东地 (NED) 原点:起飞点 用途:局部规划 注意:Z轴向下 机体坐标系 原点:质心 用途:传感器测量 注意:需校准 旋转矩阵 四元数 刚体运动学模型 (6-DOF) 位置运动学:p_dot = v 姿态运动学:Φ_dot = W(Φ) * ω 路径规划 生成可行轨迹 冲突检测 判断是否碰撞 编队控制 多机协同飞行 坐标系是基础,运动学是桥梁,最终服务于路径规划与冲突解决

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