大家好,欢迎来到IT知识分享网。
摘要 攻角与俯仰角对应,侧滑角与偏航角对应,倾侧角与横滚角对应,但它们并不完全一样。攻角、侧滑角、倾侧角好像没有统一的名字,本文为了方便起见称它们为气动角。欧拉角定义在世界坐标系上,气动角定义在速度坐标系上。除了坐标系定义的区别以外还有细节上的不同,假如世界系与速度系重合,两者也并不完全一样。
欧拉角和气动角定义
- 横滚角 ϕ \phi ϕ 定义为本体系x轴所在铅垂面和本体系纵向对称面之间的夹角,沿x轴看去逆时针为正,也就是左倾为正。
- 俯仰角 θ \theta θ 定义为本体系x轴与世界系水平面(XOY平面)之间的夹角,沿y轴看去逆时针为正,也就是抬头为正。
- 偏航角 ψ \psi ψ 定义为本体系x轴在世界系水平面上的投影与世界系x轴之间夹角,沿z轴看去逆时针为正,也就是左偏为正。
再说气动角的定义,这里要引入跟速度相关的两个坐标系。半速度系和速度系的x轴都与飞行器速度方向相反,两个系的z轴分别位于世界系的铅垂面内朝上和本体系的纵向对称面内朝上,y轴都朝右。当飞行器速度方向始终朝前保持不变时,半速度系与世界系重合(只看方向不看原点坐标)。
- 攻角 α \alpha α 定义为速度方向在本体系纵向对称面(XOZ平面)上的投影与速度方向之间的夹角;
- 侧滑角 β \beta β 定义为速度方向与本体系纵向对称面之间的夹角;
- 倾侧角 σ \sigma σ 定义为半速度系和速度系的z轴之间的夹角,又称为速度滚转角。
- 有些场景还有总攻角的概念,总攻角定义为本体系和速度系的两个x轴之间的夹角,两个x轴所在的平面称作总攻角平面。
只从定义上难以看出欧拉角和气动角的区别,举个例子,当横滚角左偏90°的时候,此时飞机再抬头 α \alpha α,则此时的攻角就是 α \alpha α, 但因为机头仍然在水平面上,所以俯仰角仍然是0°。另一方面,侧滑角和和俯仰角都是向量和平面的夹角,而攻角和偏航角都有向量到平面的投影,只是向量和平面各不同。
欧拉角/气动角和旋转矩阵的转换
rol=arctan2(r32, r33); // 横滚角φ pit=arcsin(-r31); // 俯仰角θ yaw=arctan2(r21, r11); // 偏航角ψ
已知本体系到半速度系的旋转矩阵,求气动角的公式为
bank = arctan2(r32,r22) // 倾侧角σ attack = arctan2(r13, r11) // 攻角α sideslip = -arcsin(r12) // 侧滑角β
气动角的旋转顺序是,先绕本体系z轴旋转侧滑角,再绕本体系y轴旋转攻角,再绕世界系x轴旋转倾侧角,所以 R = R x R z R y R=R_xR_zR_y R=RxRzRy。旋转顺序如图所示,图中3次旋转均为正角度。
补充一个特殊姿态的欧拉角
import numpy as np ry = np.array([0, np.cos(0.15), np.sin(0.15)]) # 让旋转矩阵中y轴的z坐标很小 rz = np.array([np.cos(0.15), 0, np.sin(0.15)]) # 让旋转矩阵中z轴的z坐标也很小 e0 = 0.1 R = np.array([ # 另外构造旋转矩阵来旋转z轴 [1, 0, 0], [0, np.cos(e0), -np.sin(e0)], [0, np.sin(e0), np.cos(e0)], ]) rz = R @ rz # 旋转z轴使其与y轴垂直 rx = np.cross(ry, rz) # 右手坐标系构造x轴 R = np.array([rx, ry, rz]).T # xyz三轴组合成姿态旋转矩阵 roll = np.arctan2(R[2,1], R[2,2]) # 横滚角 print(roll)
这个姿态的横滚、俯仰、偏航角分别为 [ 0. , 1. , 0. ] [0.,\ 1.,\ 0.] [0., 1., 0.],但是直观上的欧拉角应该大致是 [ 1 0 ∘ , 8 0 ∘ , 1 0 ∘ ] [10^\circ,\ 80^\circ,\ 10^\circ] [10∘, 80∘, 10∘]。这也从侧面反映了欧拉角的万向节死锁现象。
再附一个纯坐标图,图中红绿蓝三条线分别代表本体系的XYZ轴。左边是欧拉角为0的参考姿态,右边是这个特殊姿态。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/137722.html