转换本地四元转成全球(陀螺仪)(Translate Local quaternion rotatio

2019-10-19 17:43发布

我需要一种方式来获得欧拉角在从本地的全球参考框架旋转。 我使用C#,WPF 3D和陀螺仪。 我应该以同样的方式作为陀螺移动屏幕上的地球仪。 由于陀螺仪发送相对运动本身我需要使用四元数,以保持对象的状态和更新,但我坚持。 如果我做到以下几点:

                var qu=eulerToQ(Gyro.X,Gyro.Y,Gyro.Z);
                GlobalQu = Quaternion.Multiply(qu, GlobalQu);

IT在一个轴上旋转正常。 当我由A在一个方向上在彼此旋转,然后通过乙对象和陀螺仪的旋转是在相同方向上不再因为绝对旋转上述工程(相对于世界)。

例如:

                    var qu=eulerToQ(KeyboardValue1,KeyboardValue2,KeyboardValue3);
                    GlobalQu = qu;

这工作,因为我通过键盘总是在全球轴上增加了侧倾,俯仰,偏航即键盘值。 陀螺送当地的轴的旋转。

交换四元数旋转的顺序没有帮助

                    var qu=eulerToQ(Giro.X,Giro.Y,Giro.Z);
                    GlobalQu = Quaternion.Multiply(GlobalQu,qu);

Answer 1:

其实,这是正确的方式。 如果你乘globalQuaternion * newQuaternion你得到全球的旋转和newQuaternion * globalQuaternion那么你得到局部旋转。 我根本就在我生成四元数是错误的。



Answer 2:

你说你有一个陀螺仪。 它是一个物理陀螺仪? 一种陀螺仪,在与本身的,只能产生角速度信息。 连接到它那里的电子产生的角度,而不是角速率? 有十二个可能的欧拉角旋转的序列; 每个都具有不同的数学转换到四元数。 你只有十二机会一个一个角度,从您的陀螺仪来的顺序是一样的顺序,你eulertoQ功能。 这里是一个链接到欧拉四元数白纸我几年前写的。



文章来源: Translate Local quaternion rotation into global (gyro)