四元数与空间旋转息息相关,本文先探讨空间旋转。
空间旋转
空间旋转有向量旋转和坐标系旋转,二者本质相同,只是不同的表现形式。关于空间旋转的描述方式主要有三种:旋转矩阵、欧拉角、四元数。
旋转矩阵
二维平面的旋转矩阵
二维平面旋转比较简单,仅放上一张图不做过多说明。
三维空间旋转矩阵
三维空间的任意旋转可以分解为绕z、y、x轴的依次旋转,绕z、y、x轴的旋转矩阵分别为:
举个简单的栗子:
根据这三个矩阵就可以求出绕任意轴的旋转矩阵了,R = R1 * R2 * R3。
欧拉角
欧拉角描述空间旋转有静态和动态两种。静态的是绕静止的惯性坐标系三个轴进行旋转(如上所说的三维空间旋转矩阵);而动态的在旋转过程中旋转坐标轴会发生变化,除了第一次旋转是绕惯性系的坐标轴进行之外,后续两次旋转都是动态的,并且前面旋转的角度对后面的旋转轴是有影响的,轴的顺序一般为z、y、x,以下给出两个关于动态欧拉角的动图:
四元数
四元数概念
根据我自己的理解,四元数就是对复数的扩充。
复数:w + i * x
四元数:w + i * x + j * y + k * z
四元数中的i,j,k均为复数,且满足i ^ 2=j ^ 2=k ^ 2=-1,ij=k、ji=-k、jk=i、kj=-i、ki=j、ik=-j。
四元数的表示
q = w+ix+jy+kz = (w,(x,y,z))
四元数的性质
四元数表征空间旋转
假设存在一根旋转轴u,有一个绕u轴旋转σ角度的这么一个旋转存在,那这时候代表这个旋转的四元数是这样子的:
其中u是旋转轴的单位向量,q是一个单位四元数。
它对任何向量施加以下算子运算后可以得到该向量绕u轴旋转σ角度后的向量:
旋转矩阵、欧拉角、四元数之间的转换
可以自行上网查找,在此不做赘述。
总结
欧拉角:非常直观,我们可以很容易理解它的意思,也能想象出对应的空间位置,但是存在万向锁现象,导致后面有很多数学问题。
旋转矩阵:旋转矩阵有9个元素,计算繁杂,尤其是求微分时,而且也不直观。
四元数:没有奇点,能表征任何旋转关系,而且表示简单,只有四个元素,计算量小,但是不直观。
参考
【1】https://zhuanlan.zhihu.com/p/79894982
【2】https://blog.csdn.net/qq_37130462/article/details/78123509?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160576322319725222429288%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160576322319725222429288&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-1-78123509.pc_first_rank_v2_rank_v28&utm_term=%E5%9B%9B%E5%85%83%E6%95%B0&spm=1018.2118.3001.4449