2. 六自由度运动学基础:坐标系定义与欧拉角
各位同学,今天我们来聊聊六自由度运动学里最基础、也最容易搞混的东西——坐标系。
说实话,我刚开始做飞行器设计那会儿,觉得坐标系嘛,不就是画几个箭头嘛,有什么难的?结果第一次做风洞数据对标,数据怎么都对不上,折腾了两天,最后发现是体轴系定义反了。嗯,从那以后,我再也不敢小看坐标系了。
2.1 为什么需要三种坐标系?
你想想看,一架飞机在天上飞,我们关心两件事:
- 它往哪儿飞?——这需要相对于地面的位置和速度
- 它姿态怎么样?——这需要相对于自身的角度和角速度
一套坐标系搞不定所有问题。所以,我们引入了三套坐标系:
- 地轴系——描述飞机相对于地面的位置和航迹
- 体轴系——描述飞机自身的姿态和转动
- 速度轴系——描述气流与飞机的相对关系
这三者之间通过欧拉角、迎角、侧滑角等参数相互转换。说白了,就是同一个物理量,在不同坐标系下有不同的表达方式。
核心思想:地轴系管位置,体轴系管姿态,速度轴管气动。三者缺一不可。
2.2 地轴系(地球坐标系)
地轴系,也叫惯性坐标系(近似)。我们通常取地面某一点为原点,比如跑道起点。
- X轴:指向正北(或正东,看习惯)
- Y轴:指向正东(或正北,与X垂直)
- Z轴:指向地心(即向下)
我个人习惯用北-东-地(NED)坐标系。为什么?因为高度是负的,算重力势能时直接取绝对值就行,省事。
小技巧:在仿真中,地轴系通常被认为是固定不动的。但如果你做的是长航时飞行,比如无人机巡航几小时,就得考虑地球自转了。不过那是后话,咱们先打好基础。
2.3 体轴系(机体坐标系)
体轴系固定在飞机上,原点在飞机重心。
- X轴:沿机身纵轴,指向机头
- Y轴:垂直于对称面,指向右翼
- Z轴:垂直于X-Y平面,指向机腹(向下)
这里有个坑,我踩过。体轴系的Z轴指向下,和地轴系的Z轴方向一致。但有些教材把Z轴指向上,那符号就全反了。做风洞数据对标时,力矩系数符号搞反,后果很严重。
注意:体轴系下的角速度(p, q, r)分别对应绕X、Y、Z轴的转动。p是滚转,q是俯仰,r是偏航。这个顺序别搞混了。
2.4 速度轴系(气流坐标系)
速度轴系,也叫风轴系。它的X轴始终指向来流方向。
- X轴:沿速度矢量方向,指向来流
- Y轴:垂直于X轴,指向右翼方向
- Z轴:垂直于X-Y平面,指向下
为什么需要速度轴系?因为气动力和力矩直接与来流方向相关。升力垂直于速度方向,阻力平行于速度方向。在体轴系下算气动力,还得先转换,多此一举。
我记得有一次做某型无人机的气动分析,风洞数据给的是速度轴系下的系数,而我仿真用的是体轴系。直接套用,结果升力系数差了20%。后来才发现,忘了做坐标变换。
2.5 欧拉角:连接地轴系与体轴系的桥梁
欧拉角,说白了就是描述飞机姿态的三个角度:
- 偏航角 ψ:绕Z轴转动(机头左右摆)
- 俯仰角 θ:绕Y轴转动(机头上下抬)
- 滚转角 φ:绕X轴转动(机身左右倾斜)
旋转顺序是:先偏航,再俯仰,最后滚转。这个顺序是约定俗成的,不能乱改。为什么?因为旋转不满足交换律,顺序不同,结果不同。
欧拉角转换矩阵(从体轴系到地轴系):
C = [cosθ·cosψ, sinφ·sinθ·cosψ - cosφ·sinψ, cosφ·sinθ·cosψ + sinφ·sinψ;
cosθ·sinψ, sinφ·sinθ·sinψ + cosφ·cosψ, cosφ·sinθ·sinψ - sinφ·cosψ;
-sinθ, sinφ·cosθ, cosφ·cosθ]
这个矩阵看着复杂,其实你只要记住:第一行对应地轴系X轴在体轴系下的投影,第二行对应Y轴,第三行对应Z轴。嗯,这样就好记多了。
2.6 迎角与侧滑角:连接体轴系与速度轴系
迎角(α)和侧滑角(β)是描述飞机相对于来流姿态的两个关键参数。
- 迎角 α:速度矢量在机体对称面内的投影与体轴X轴的夹角。抬头为正。
- 侧滑角 β:速度矢量与机体对称面的夹角。右侧滑为正。
我见过不少新手把迎角和俯仰角搞混。俯仰角是体轴X轴与水平面的夹角,而迎角是体轴X轴与速度矢量的夹角。飞机爬升时,俯仰角可能很大,但迎角不一定大——比如垂直爬升时,迎角可能接近0。
经验之谈:在做六自由度仿真时,我建议先把欧拉角算清楚,再算迎角和侧滑角。顺序别搞反了。因为欧拉角是姿态的基础,迎角侧滑角是气动力的输入。
2.7 知识体系总览
下面这张图,是我自己总结的坐标系与角度关系。你看一遍,应该就能理清脉络了。
2.8 避坑指南
最后,分享几个我踩过的坑,希望能帮你省点时间:
- 欧拉角奇异性:当俯仰角接近±90°时,偏航和滚转无法区分。这叫“万向锁”。做全姿态仿真时,建议用四元数代替欧拉角。
- 符号约定:不同文献、不同软件对角度正负的定义可能不同。做风洞数据对标前,先确认符号约定是否一致。
- 单位统一:角度用弧度还是度?我建议内部计算全用弧度,只在输入输出时转换。否则很容易出错。
我曾经在一次项目中,因为欧拉角转换矩阵写错了一个符号,导致仿真结果和试飞数据差了十万八千里。排查了整整三天,最后发现是sin和cos写反了。所以,写代码时一定要逐行验证,别偷懒。
好了,坐标系和欧拉角就讲到这里。这些东西看着简单,但真用起来,细节很多。建议你动手写个坐标转换的小程序,跑几个例子,感受一下。
公众号:蓝海资料掘金营,微信deep3321