四元数的定义繁多,由凯里迪克森创建的一种定义我认为是比较有吸引力的。首先我们有两个复数, A = a + b i , C = c + d i A = a + bi, C = c + di A=a+bi,C=c+di. 现在增加一个自由度,令: Q = A + C j Q = A + Cj Q=A+Cj. 同时令: k = i j k = ij k=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!)
使用公式7所示的四元数,将实部和虚部分开。在slam中,我们使用四元数来表示三维旋转,所以一般的表示方法是(w,x,y,z)
// TODO
通过标准的乘积,去掉实数,然后假设两个相乘的纯四元数是一个,然后再假设他是一个单位四元数。最后推出来一个结论,不知道后面会不会有用。
纯虚四元数,就是“四元数可视化”中的那个三维球。
也就是多次与自己的乘积;从theta的定义可以看出,它并不是表示旋转角度,它只是一个定义而已。
纯四元数的指数,与四元数的指数一样,都被定义成了幂级数。
纯四元数的指数,恰好是一个新的四元数。而且是一个单位四元数。
当角度趋近于0的时候,这个新四元数就是单位四元数
因为对于一般四元数来说,可以拆分成实部和虚部,然后进行计算。
单位四元数的对数是纯虚四元数
//TODO 公式49没太明白是怎么来的。
一般四元数的对数。构造单位四元数。
四元数的t次方,利用log和exp把t次方拿到外面去,利用单位四元数的对数,是纯虚四元数。
公式53又利用了纯虚四元数的指数。