陀螺仪

如有类同,纯属抄袭

https://krasjet.github.io/quaternion/quaternion.pdf //四元数书

https://blog.csdn.net/liulong1567/article/details/46420285   //Unity中的四元数解释

https://blog.csdn.net/u010203716/article/details/72837331 //陀螺仪移动图片

https://blog.csdn.net/qq_36834256/article/details/99678862  //欧拉角和四元数详解

陀螺仪:角动量。提供平衡。把旋转的陀螺安装在支架上,无论支架怎么移动,陀螺的旋转轴方向始终不会改变,因此相对更为稳定。

四元数: 

我们都知道向量,向量是用来形容一个二维空间的轨迹与方向,形象化地表示为带箭头的线段。四元数则表示为在一个四维空间的轨迹与方向。

QBA 到 QAC  = QBC   类似2维度获取相对的偏移量: 向量AC = 向量AB + 向量BC

 

欧拉角:如果两个轴重合时,则会失去一个自由度,即万向锁问题。

四元数其实就是定义了一个有三个虚部的复数w+xi+yj+zk;记法[w,(x,y,z)]。

虚数: x轴上的数位实数,则y轴上肯定又一个数与之对应,则这个数就是虚数。真实不存在的数字。

   对于i、j、k本身的几何意义可以理解为一种旋转关系,其中i旋转代表 XY平面中X轴正向向Y轴正向的旋转,j旋转代表ZX平面中Z轴正向向X轴正向的旋转,k旋转代表YZ平面中Y轴正向向Z轴正向的旋转,-i、-j、-k分别代表i、j、k旋转的反向旋转。

四元数 xyzw的取值范围是[-1,1],物体并不是旋转一周就所有数值回归初始值,而是两周。

初始值: (0,0,0,1)
        沿着y轴旋转:180°(0,1,0,0) 360°(0,0,0,-1)540°(0,-1,0,0) 720°(0,0,0,1)
        沿着x轴旋转:180°(-1,0,0,0) 360°(0,0,0,-1)540°(1,0,0,0) 720°(0,0,0,1)
        无旋转的写法是Quaternion.identify。

 在unity3d中, quaternion 的乘法操作 (operator  * ) 有两种操作:
     (1) quaternion * quaternion , 例如 q = t * p; 这是将一个点先进行t 操作旋转,然后进行p操作旋转.
     (2)  Quaternion * Vector3, 例如 p : Vector3, t : Quaternion , q : Quaternion;    q = t * p; 这是将点p 进性t 操作旋转;
     我进行的是第2种操作,即对一个向量进行旋转;
     首先 ,Quaternion 的基本数学方程为 : Q = cos (a/2) + i (x * sin(a/2)) + j (y * sin(a/2)) + k(z * sin(a/2))    (a 为旋转角度)
      Q.w = cos (angle / 2) 
      Q.x = axis.x * sin (angle / 2) 
      Q.y = axis.y * sin (angle / 2)  
      Q.z = axis.z * sin (angle / 2)
     我们只要有角度就可以给出四元数的四个部分值,例如我想要让点M=Vector3(o,p,q) 绕x轴顺时针旋转90度;那么对应的quaternion数值就应该为:
     Q : Quaternion;
     Q.x = 1 * sin(90度/2) = sin(45度) = 0.7071
     Q.y = 0;
     Q.z = 0;
     Q.w = cos(90度/2) = cos (45度) = 0.7071
     Q = (0.7071, 0 , 0 , 0.7071);
     m = Q * m;         (将点m 绕 x轴(1,0,0) 顺时针旋转了90度)

 

四元数的乘法:

QBA = QBA * QAC

 

四元数的偏移量:

四元数的表现形式:负号表示反向旋转。

 这是 A 到 B 的四元数表示,由四个元素组成的数组。我主要讲一些实现方法,里面有一些名词的含义,需要大家找其它的资料慢慢参透

我们再来看一个公式,x、y、z轴的偏移量分别为:

                      

                                 公式二

由该公式我们看得出,只要知道一个四元数的值, 我们就能算出 A 到 B 的x、y、z轴的偏移量。

我们从陀螺仪传感器获得的四元数数据,是相对于手机平放在桌面的 xyz 轴的偏移量,我们需要转换成相对上一个位置的偏移量,然后根据偏移量更换相应的图片。

现在我们看一下,怎么获取相对的偏移量:

在平面二维向量中,我们知道向量的运算: 向量AC = 向量AB + 向量BC

    公式三

 

那么在四元数中,我们假设从传感器获取到

第一个 四元数为 

假设A点原点,即手机平放在桌面水平位置上。第二个四元数为:

我们需要得到四元数:

这样才能算出B 到C 的相对 xyz 轴相对位移。通过下面公式可以得到

        

          

                                               公式四

 

  现在知道 

  由下面公式可以得到:

                            公式五

  从A到B的 四元数 转换成 B到A 的四元数公式,只需把第二、第三、第四个元素取负。

知道了

我们用 公式四 得出 ,然后通过公式二求出 xyz 轴的偏移量。

 

四元数 x 轴的偏移量 与 欧拉角的俯仰角θ(pitch)类似操作。
四元数 y 轴的偏移量 与 欧拉角的滚转角Φ(row)类似操作。
四元数 z 轴的偏移量 与 欧拉角的偏航角ψ(yaw)类似。

 

在移动端比较常用到 x、y轴偏移量,就是手机左右摇摆与前后摇摆间的偏移。

手机的坐标系:

  

当手机左右摇摆时(绕 y轴旋转),得到变化的 (yaw),范围为 (-90 to 90)

当手机前后摇摆时(绕x轴旋转),得到变化的 (pitch),范围为 (-180 to 180)

当手机横屏转换成竖屏或竖屏转换成横屏时(绕 z 轴旋转),即得到变化的 (Row)。

Patch围绕X轴,Yaw围绕Y轴,Roll围绕Z轴

 

如下图: A点是定点原点。手机刚开始获取的四元数是 QAC,上一次获取的四元数是QAB.现在求QBC,  因为 QBC = QBA * QAC. 中QAC是已知的,而QBA是QAB取反(从A到B的 四元数 转换成 B到A 的四元数公式,只需把第二、第三、第四个元素取负) 。求得的是四维空间中四元数相对的偏移量。

我们都知道向量,向量是用来形容一个二维空间的轨迹与方向,形象化地表示为带箭头的线段。四元数则表示为在一个四维空间的轨迹与方向。

QBA 到 QAC  = QBC   类似2维获取相对的偏移量: 向量AC = 向量AB + 向量BC

 

欧拉角: 

欧拉角定义为:用来描述刚体在三维欧几里得空间的取向,对于任何参考系,一个刚体的取向,是依照顺序,从这参考系,做三个欧拉角的旋转而设定的。确定定点,转动刚体位置的3个一组独立角参量。

https://blog.csdn.net/andrewfan/article/details/60981437

刚开始的时候,我使用传感器提供的姿态角,也称为欧拉角:pitch yaw roll 来显示。这种 姿态角/欧拉角 比较常用在航空上,无人机技术应该也使用到了这个技术点。我用飞机的模型来展示一下这三个角,就一目了然了(不同作者使用不同的坐标系,使用哪种坐标系,个人而定。):

 

1、俯仰角θ(pitch):围绕Y轴旋转的。

                         图二

2、偏航角ψ(yaw):围绕Z轴旋转的角度。

                        图三

3、滚转角Φ(roll):围绕X轴旋转的角度。

 

 

万向锁: 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Debug_horizon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值