四元數矩陣與 so(3) 左右雅可比
我們知道,單位四元數 q 和 so(3) 向量 (即 rotation vector)的對應關係為:
, in which
當 很小時,可以近似表達為:
四元數小量和李代數小量有很簡單的對應關係,所以在使用四元數的優化問題中,往往也取 小量作為更新量,例如 OKVIS [1]。
具體到優化過程中,使用李群李代數(如預積分論文 [2])和使用四元數之間還是有區別的。使用李群李代數,在 residual 推導時會用到 so3 的左雅可比或右雅可比;使用四元數,會用到四元數矩陣(或共軛四元數矩陣)。不過既然兩者使用的小量一致,那四元數矩陣和 so3 的左右雅可比的關係如何呢?
之所以有這個疑問,是因為 Xingyin 兄在博客里指出 [3],OKVIS 代碼中使用了預積分,代碼和預計分論文里的思路一致。不過實際上,雖然預積分流程一致,兩者在雅可比推導上有所不同:預積分使用 so3 的右雅可比;OKVIS 使用四元數矩陣。所以,我們有必要把這兩者的關係釐清。
四元數矩陣
兩個旋轉疊加,可以表達為兩個四元數相乘,或者一個 4*4 矩陣與一個四元數相乘:
這裡的 為四元數矩陣, 為共軛四元數矩陣:
,
兩種矩陣對於求導非常方便:
現在,假設有個一個待估計的旋轉量 q ,其更新方式為 , 為 so3 小量。假定有 q 的測量量 ,定義誤差函數 :
則其相對於更新量的雅可比為
即
so(3) 雅可比
據 Barfoot [4],若 的左雅可比為 ,右雅可比為 :
於是,假設有待估計量 C,更新方式為 , 為 so3 小量。假定有 C 的測量量 ,定義誤差函數 :
則其相對於更新量的雅可比為:
討論
我們來比較一下 和 。
首先,
如果可以認為誤差函數 很小,則
另一方面,據 Barfoot [4],有
如果可以認為誤差函數很小,即 ,則 ,於是
。
可以看到,當可以認為誤差函數很小時, 和 是相等的。這其實很好理解,因為當 很小時, 估計成立,所以 實際上就表示同一個量,都是誤差旋轉量的李代數,推導出來的雅可比自然就一樣了,我們只是通過不同的途徑去算同一個量而已。這個例子的價值在於,展示了四元數矩陣和 so3 雅可比之間的具體關係,即:
如果有可以認為很小的 so3 量,如某個誤差函數 ,則
上面用的是右擾動模型;如果使用左擾動,可類似地得到 。
尾聲
如果 不能認為很小, 與 的關係是怎樣?並不複雜。區別僅在於此時 的估計不能成立, 和 不能當作一個量而已;但它們之間的相互關係是已知的: 。在上面的演算中,我們實際上得到的結果是
可以證明:
。
代入過程就不貼了。
參考文獻
[1] S. Leutenegger, S. Lynen, M. Bosse, R. Siegwart, P. Furgale, 「Keyframe-based visual-inertial odometry using nonlinear optimization」, Int. Journal of Robotics Research (IJRR), 2014.
[2] C. Forster, L. Carlone, F. Dellaert and D. Scaramuzza, "On-Manifold Preintegration for Real-Time Visual--Inertial Odometry," in IEEE Transactions on Robotics, vol. 33, no. 1, pp. 1-21, Feb. 2017.
[3] OKVIS IMU 誤差公式代碼版本
[4] T. Barfoot, State Estimation for Robotics.
推薦閱讀:
TAG:機器人 | 同時定位和地圖構建SLAM | 視覺慣性里程計VIO |