簡體   English   中英

如何在傳感器四元數和3d相機四元數之間進行轉換?

[英]How to convert between sensor quaternion and 3d camera quaternion?

我使用getQuaternionFromVector()從Android的Sensor.TYPE_ROTATION_VECTOR融合傳感器獲得四元數。 我想用那個四元數控制我的Rajawali應用程序的相機。

我從傳感器獲得的值(w,x,y,z)是(手機在橫向,直視前方):

  • 北:(0.5,0.5,-0.5,0.5)
  • 東:(0.71,0,-0.71,0)
  • 南:(0.5,-0.5,-0.5,-0.5)
  • 西:(0,0.71,0,0.71)

我需要將這些值轉換為這些正確的值:

  • 北:(1.0,0,0,0)
  • 東:(0.71,0,0.71,0)
  • 南:(0,0,1,0)
  • 西:( - 0.71,0,0.71,0)

通過一些試驗和錯誤,我已經找到了解決方案,但我還有一些方法。 如果我首先相對於Y軸旋轉90度,並且相對於X軸旋轉-90度:

Quaternion a = new Quaternion(Vector3.Y, 90);
a.multiply(q);
Quaternion b = new Quaternion(Vector3.X, -90);
b.multiply(a);

我得到的價值是:

  • 北:(1,0,0,0)
  • 東:(0.71,-0.71,0,0)
  • 南:(0,-1,0,0)
  • 西:(0.71,0.71,0,0)

結果是北方是正確的,向東是向上的,向西是向下的,向南是向上的。 我注意到軸承與螺距混合(我改變了設備的間距,相機的軸承也發生了變化,並且切換器)。

有關如何修改傳感器四元數以匹配預期的四元數值的任何建議? 如何更改它以使傳感器軸承改變攝像機軸承而不改變俯仰?

提前致謝!

管理以解決它。

public static Quaternion transform(Quaternion q) {
    Quaternion a = new Quaternion(Vector3.Y, 90).multiply(q);
    Quaternion b = new Quaternion(a.w, a.y, -a.x, -a.z);
    return b.multiply(new Quaternion(Vector3.Y, 90));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM