给定关于vx
,vy
和vz
轴的三个角速度x
,y
,z
,以每秒弧度为单位,从IMU的速率陀螺仪得出,我如何产生一个样本与下一个样本之间的整个旋转的等价四元数,即当前样本与先前样本之间的时间上的旋转积分dt
?
主要问题是这三个角速度是相互独立地测量的,但旋转不是可交换的。这意味着在积分过程中施加角速度的顺序会影响计算的四元数,就像将Euler角转换为四元数会根据Euler旋转的施加顺序产生不同的四元数一样(例如x
,然后y
,然后是z
,再加上其他顺序)。
[我认为正确的做法是将时间步长dt
分成多个较短的时间段样本,例如例如N=10
,然后将每个速度除以该数字,得到vx' = vx/N
,vy' = vy/N
,vz' = vz/N
,然后以最大到最小的顺序以旋转方式应用旋转N
次,以计算实际旋转在每种情况下都超过间隔dt/N
,并将其累积到最终旋转四元数中。
不过,在询问相关问题时,我看到了很多有关四元数导数的参考文献,我想知道是否有可能将角速度(欧拉角的导数)直接转换为四元数导数(同样,虽然可能遭受轴有序灵敏度),然后以某种方式积分四元数导数以转换回四元数跨越时间dt
。
似乎应该有一个“正确”的方法来执行此操作,因为每个使用速率陀螺仪的IMU都必须解决此问题。任何对此的见解将不胜感激!
我在Ashwin Narayan的this excellent post中找到了答案。
更新(1):rowan library在Python中实现必要的四元数求幂。