引言
emmm之前这篇文章 《终于理解,飞行姿态控制中,为什么要用旋转矩阵的方式不停地转换来获取姿态误差 》如今看来写并不清晰而且可能有错误。温故而知新,经过最近复习,现总结其旋转方式,并结合实际描述理论过程。
PS:
文中地理坐标系指NED,绕机体x轴旋转角度定为r(roll),绕y轴旋转角度定为p(pitch),绕z轴旋转角度定为y(yaw)
欧拉角
定义为:绕坐标轴的 旋转角
当用以表示姿态时,一般定义为:从初始坐标系按照某一顺序旋转一次,所旋转的角度。
特别注意:
1、旋转角不是与水平面或固定坐标系(地理坐标系)的夹角;
2、旋转角所绕的旋转轴是被旋转坐标系的轴,而不是固定坐标系(地理坐标系)的轴;
3、是有严格顺序的,一般都会先绕z轴旋转,其次再是yx(具体原因可了解万向锁);
特点:
1、直观,是一种符合人们直觉的姿态表示方法,因此无人机期望的姿态输入输出往往用姿态角表示;
2、
要解决的问题:
1、当机体产生角速度时,对应姿态角的变化如何?
这里就直接参考全权教授的书吧
2、当已知机体旋转的角度时,对应姿态角的变化如何?
例如:在第一次旋转后(初始位置一般就是地理坐标系,记为姿态0),根据ZYX的旋转顺序及旋转角度(r1,p1,y1),我们知道机体的姿态角度就可以直接表示为(r1,p1,y1),记为姿态1。随后机体在姿态0处,接着按zyx的旋转顺序旋转(r2,p2,y2),姿态2记为第二次旋转后的姿态.那么问,现在表示姿态2的话,其r,p,y值是多少呢?
答:不能直接相加。因为理论上根据欧拉角表示姿态角的定义为,按某一顺序旋转一次所得的角度,这里共旋转了两次。实际上,姿态0到姿态2经过一次旋转的角度也并不等于0到1加上1到2的角度。那么姿态2的姿态角的值应该怎么得到呢?(不依赖旋转矩阵等工具的话,我也不知道怎么求)
旋转矩阵
其实就是欧拉角旋转的矩阵形式,描述的旋转过程与欧拉角相同,都是按照某一顺序进行旋转的,一般会用T、C或R表示。
具体公式推导网上已经有很多了,就不多阐述了。一般过程如下:
总之,他描述的是,将一个坐标系的向量旋转到另一个坐标系进行表示,注意向量的矢量方向和模值都不会被改变。
那么回到欧拉角表述的第二个问题当中,有了旋转矩阵这个工具后,姿态2的姿态角应该怎么得到呢?
答:从0到1的姿态,我们根据角度值(r1,p1,y1)可以计算得到0→1的旋转矩阵C01。根据1→2的旋转角度(r2,p2,y2)可以计算得到1→2的旋转矩阵C12。那么0→2的旋转矩阵C02 = C12 × C01。这样根据C02矩阵的数值反解出(r,p,y)就可以得到姿态角了。
问:为什么C02 = C12 × C01?
答:设有一向量r,在姿态0坐标系下的表示为r0,在姿态1坐标系下的表示为r1,在姿态2坐标系下的表示为r2,根据旋转矩阵的定义有:
r1 = C01 × r0
r2 = C12 × r1
那么r2 = C12 × C01 × r0
因r2 = C02 × r0
所以C02 = C12 × C01
轴角与四元数
其实用法和旋转矩阵类似,只不过旋转方式不同。《四元数姿态总结》这篇是之前的用法总结,这里再阐述一下它的通俗理解。
四元数及轴角的旋转方式都是,坐标系绕着空间中的一个向量旋转一定角度,仅需要一次旋转。
问:这个空间向量以及旋转角度是怎么获取到的呢?
假设:还是以上面的假设为例,机体从姿态1→2,转过的姿态角为(r2,p2,y2),那么这个向量方向在机体上的表示就是(r2,p2,y2),旋转角就是这个转轴向量的模值。
答:有了转轴和转角就可以转换成四元数了,与旋转矩阵类似(只不过旋转的是坐标系,旋转矩阵的物理意义还是旋转的向量),这个四元数的意义即为将机体姿态1旋转到姿态2,记为q12。同理可以得到q01.那么,现在只需要q12*q01得到的新四元数就是q02了,然后根据q02的值,就可反解出欧拉角了。