四元數計算要防止低階錯誤

2021-09-02 02:05:07 字數 616 閱讀 3053

在導航程式,特別是慣性導航程式中,常常會用到四元數的更新計算。

四元數更新的公式為:

q[0]=q[0]+0.5*dt*(-wx*q[1]-wy*q[2]-wz*q[3]);

q[1]=q[1]+0.5*dt*(+wx*q[0]-wy*q[3]+wz*q[2]);

q[2]=q[2]+0.5*dt*(+wx*q[3]+wy*q[0]-wz*q[1]);

q[3]=q[3]+0.5*dt*(-wx*q[2]+wy*q[1]+wz*q[0]);

很多教材裡也是類似的寫法。有的人就直接這樣寫到了程式裡。

但是這個寫法是錯誤的。

解決的辦法大約有2類。一類方法是先用把計算的結果賦值到臨時變數中,等待4個數都計算完了,再把臨時變數賦值給四元數。第二種方法,就是利用一些矩陣計算的庫,把這段**寫成乙個整體的q=r*q矩陣計算,這樣就能保證計算結束之後同步更新四元數。

這是乙個很低階的錯誤,但是照著教材公式寫**的時候很容易出問題,我已經見過至少2個人這樣寫了。這種錯誤很難自己發現。

建議教材不要把四元數計算公式像這樣寫為4個分立公式,而是寫成乙個整體矩陣計算公式,以免誤導。

四元數乘法計算

關於兩個四元數的乘法,網上查了一大堆,沒乙個說明白的。我就想知道給我兩個四元數,我該怎麼算出來它們的乘積。這麼簡單的需求都沒法找到答案,實在對不起四元數的江湖地位。要想計算四元數的乘法,首先需要知道四元數常見的表示方法 其中複數式 向量式和三角式基本是一回事,都是把四元數寫成乙個標量和乙個向量的和的...

四元數旋轉的計算

最近剛好又用到四元數,又深感生疏。複習一下記錄記錄。情形 對於三維向量p,繞著某軸v旋轉 角度 1.先考慮p垂直於v的情況 p所在的旋轉平面的另乙個軸為 v q,在這個旋轉平面內,使用二維情況下的旋轉公式就可以得到結果了 p cos p sin v q 2.v為任意方向的情況 把p分解為平行於v和垂...

ros要學習的四元數初探

把四元數看做乙個標量和乙個3維向量的組合。實部w表示標量,虛部表示向量標記為v或三個單獨的分量 x,y,z 則四元數可以記為 w,v 或 w,x,y,z 也可以計為 v,w 或 x,y,z w 任意乙個四元數可以表示為 q x,y,z,w xi yj zk w 其中,虛部規則 i 2 j 2 k 2...