一、四元数定义与性质
1.1 定义
四元数的定义繁多,由凯里迪克森创建的一种定义我认为是比较有吸引力的。首先我们有两个复数,A=a+bi,C=c+diA = a + bi, C = c + diA=a+bi,C=c+di. 现在增加一个自由度,令:Q=A+CjQ = A + CjQ=A+Cj. 同时令:k=ijk = ijk=ij, 这样就生成了四元数空间。
从公式1的定义中可知,实数、虚数、实虚数组合,都是属于四元数的子空间。
值得注意的是,不同的作者会定义不同的四元数,有的人把实数虚数的位置放得不一样。matlab中的四元数采用的是本文作者定义的方式。eigen中也是作者的这种定义方式。ros中的稍微有点不同,在官网上还做了说明:ROS uses quaternions to track and apply rotations. A quaternion has 4 components (x,y,z,w). That’s right, ‘w’ is last (but beware: some libraries like Eigen put w as the first number!)
1.1.1 其他四元数的表示
使用公式7所示的四元数,将实部和虚部分开。在slam中,我们使用四元数来表示三维旋转,所以一般的表示方法是(w,x,y,z)
1.2 四元数性质
- 加减法
- 乘法,公式13给了四元数相乘的结果。
- 单位一
- 共轭
- 模长定义
- 逆
- 单位四元数,当为单位四元数时,共轭就是其逆
1.3 其他额外四元数性质
1.3.1 四元数换向器
// TODO
1.3.2 纯四元数的乘积
通过标准的乘积,去掉实数,然后假设两个相乘的纯四元数是一个,然后再假设他是一个单位四元数。最后推出来一个结论,不知道后面会不会有用。
纯虚四元数,就是“四元数可视化”中的那个三维球。
1.3.3 纯四元数的自然幂
也就是多次与自己的乘积;从theta的定义可以看出,它并不是表示旋转角度,它只是一个定义而已。
1.3.4 纯四元数指数
纯四元数的指数,与四元数的指数一样,都被定义成了幂级数。
纯四元数的指数,恰好是一个新的四元数。而且是一个单位四元数。
当角度趋近于0的时候,这个新四元数就是单位四元数
1.3.5
因为对于一般四元数来说,可以拆分成实部和虚部,然后进行计算。
1.3.6
单位四元数的对数是纯虚四元数
//TODO 公式49没太明白是怎么来的。
1.3.7
一般四元数的对数。构造单位四元数。
1.3.8
四元数的t次方,利用log和exp把t次方拿到外面去,利用单位四元数的对数,是纯虚四元数。
公式53又利用了纯虚四元数的指数。
有疑问的点
- 1. 1.2.7章节,公式32,单位四元数都可以写成这种形式,但是求出来的theta角度,只有原始欧拉角的一半?这是为什么呢
- 有没有可能这个theta角,就跟你理解的不是一个,是的,不是那个角度。公式38对此有说明