imu預積分 視覺慣性里程計的IMU預積分模型

2021-10-11 10:33:29 字數 3084 閱讀 8766

為什麼工程實踐中我們使用視覺與imu融合的解決方案即視覺慣性里程計(vio)來估計運動而不是簡單地使用視覺里程計(vo)。視覺慣性里程計的感測器主要包括相機和慣性測量單元(imu)兩種感測器各有優缺點,vio的優勢就在於imu與相機的互補性。

視覺感測器在大多數紋理豐富的場景中效果很好,但是遇到玻璃或白牆這樣特徵少的場景就很難有效工作了。儘管如此相機資料的優點在於資料基本不會有漂移。如果將相機放在原地固定,那麼估計的位姿也是固定不動的。

imu感測器本身也是有自身缺點的,比如imu長時間使用就會有非常大的累積誤差。但是在短時間內,其相對位移資料又有很高的精度,所以當視覺感測器失效時,融合imu資料,能夠提高定位的精度。imu雖然可以測得角速度和加速度,但這些量都存在明顯的漂移,使得積分兩次得到的資料就會存在很大誤差。如果將imu固定不動,其資料也會因為漂移的影響使得積分得到的位姿飄走。但是對於短時間內的快速運動,imu能夠提供相對準確的估計,這又剛好彌補了相機的缺點。相機運動過快時會出現模糊或者兩幀之間重疊區域太少無法匹配。

imu和相機就這樣相輔相成,因此現在很多slam演算法的研究都是融合相機和imu資料進行位姿估計。

一提到vio,相信很多人都會立刻想到乙個名詞——預積分。這也是希望接觸vio的研究者們最長看到的詞彙。那麼究竟預積分是怎麼回事,為什麼預積分在vio中這麼重要,就是接下來討論的重點了。

假設imu的真實值(客觀事實)為

表示旋轉四元數,從世界座標系到imu座標系,

表示世界座標系下的重力向量,

分別表示加速度計和陀螺儀的偏置和雜訊。

從上面的公式可以看出,我們讀的資料都不是客觀事實,是在客觀事實的基礎上疊加上感測器的誤差,也就是偏置和雜訊。

a 和 g 分別表示 acc 和 gyro,w 表示在世界座標系,b 表示imu體座標系。在後面的公式中會有很多下標,很容易混淆。

位移,速度和姿態(position, velocity, quaternion, i.e. pvq)對時間的導數可以寫成

四元數和角軸的轉換關係:假設某個旋轉運動的旋轉軸為單位向量

,繞該軸旋轉的角度為

,那麼它對應的單位四元數為:

當旋轉一段微小時間,即角度趨於0時,容易有:

其中 的方向表示旋轉軸,模長表示旋轉角度。角速度:

因此四元數時間導數:

中間穿插了一段四元數推導,現在繼續。

從第 i 時刻的pvq 對 imu的測量值進行積分得到第 j 時刻的pvq:

因為imu的取樣頻率高,通常為100hz - 1000hz,資料量非常大,在做優化的時候,不可能將如此多的資料都放到狀態變數中,因此通常的做法是每隔一段時間提取乙個資料,比如每隔1秒提取乙個。也就是上式中假如 i 是第一秒提取的imu資料,j 是第二秒提取的imu資料。基本過程就是:已知第 i 秒的pvq;第 i 秒和第 j 秒中間所有資料(如100個)以及我們已知的運動學知識積分,從第 i 秒一點一點積分得到第 j 秒的pvq。但是這樣在做後端優化的過程中,當我們進行迭代求解計算來更新和調整pvq的值時,一旦(比如第 1 秒)的pvq進行了調整,每乙個中間過程以及後面所有的軌跡都要重新再積分算一遍,如果是100hz,兩秒之間有100個採集資料,就要計算100次積分。有沒有什麼方法是可以不用如此牽一髮而動全身,擺脫冗繁的積分過程?預積分的目的就是嘗試將這100次積分過程變成只有1次積分,或者說用1個值來代替100個值,通過預積分模型的應用可以大大節省了計算量。

乙個簡單的公式就可以將積分模型轉為預積分模型。

也就是說,將

從 中分離出來,這樣做的好處就是可以將

放到積分運算之外。pvq積分公式中的積分項(姿態四元數)則變成相對於第 i 時刻的姿態(

),而不是相對於世界座標系的姿態(

):每次優化迭代的過程中,調整姿態都是相對於世界座標系調整,也就是調整

(在積分運算之外調整),而

相對不變,這樣就不用再重複計算積分了。我們把

改叫imu預積分。分別對應了位置,速度和姿態。

預積分量僅和imu測量值有關,它將一段時間內的imu資料直接積分起來就得到了預積分量。

下圖為imu和視覺感測器的模型,可以在一定程度上幫助理解。

imu相機模型

這裡使用mid-point方法,即兩個相鄰時刻k到 k+1的位姿是用兩個時刻的測量值

的平均值來計算:

一段時間內imu構建的預積分量作為測量值,對兩時刻之間的狀態量進行約束。

誤差中的位移,速度和偏置都是直接相減得到的,也就是測量值減估計值。第二行是四元數的旋轉誤差。

通過將積分模型轉化為預積分模型有效地減小了計算量,但是我們同時丟失了一些東西。當我們用1個結果代替(如100個)資料點的時候,我們就不知道這1個結果的不確定度了。在轉化之前,這100個資料點每乙個資料點的不確定度我們是知道的(因為imu資料作為測量值的雜訊方差我們能夠標定),但是這100個資料積分形成的預積分量的方差是多少呢?這就需要我們在得到imu預積分的結果之後,還要推導預積分量的協方差,需要知道imu雜訊和預積分量之間的線性遞推關係。

假設已知了相鄰時刻誤差的線性傳遞方程:

協方差矩陣可以通過遞推計算得到:

其中 是測量雜訊的協方差矩陣,方差從 i 時刻開始進行遞推,

。f,g為兩個是可見的協方差傳遞矩陣,

表示各時刻的誤差。 其中

以上結果的推導利用了李群李代數的知識,過程過於繁複,因此沒有在這裡展開推導過程,以上結果與主流vio開源**(vins-mono)中寫出的公式形式相同,讀者可以直接對應**中的部分來對照。如果有時間,我會再更新以上公式的推導過程。

以上就是預積分的簡要介紹,在vio開源框架(如vins-mono)中,imu預積分部分屬於前端部分,是在採集了imu資料之後就立刻進行的運算。在完整的vio系統中除前端外還有很多其他的部分,包括:初始化部分(即imu資料與相機資料的對齊)以及最重要的後端優化求解部分。而後端優化求解還包括很多內容,比如整體的目標函式如何構建,求解優化的過程中運用了滑動視窗的方法來保證狀態量的數量從而控制計算量等,隨著我個人學習進度的推進還會進行總結和整理。

視覺 慣性里程計 IMU預積分

1.introduction imu的輸出頻率很高 100 1khz 所以優化變數會快速增長,使得實時優化變得infeasible。christian forster提出用將兩幀影象間的imu取樣資料用預積分的方法變為乙個constraint,從而降低優化變數。對於兩幀影象間的standard im...

視覺慣性里程計中,速度的修正原理

只有視覺或者只有imu的資料的時候,絕對的速度都是乙個不可觀測量,但神奇的是,如果把兩者結合在一起,絕對速度就變成可觀測的了。原理可以大概這麼解釋 假設imu觀察到乙個加速度,那麼在加速之前和加速之後的量幀之間的移動距離的比例和絕對速度有關。速度需要至少三幀影象才能被觀測。視覺能直接觀察到三幀之間距...

imu 里程計融合 輪式編碼器與VIO的融合(一)

由於輪式機械人基本上都是在平面上運動的,這就會導致vio系統不可觀的自由度增加,比如說尺度。為了解決這一問題,就引用了編碼器,編碼器的引用會解決這些問題 1 所以呢,在輪式機械人上編碼器和vio的融合也成為了乙個研究的方向。該篇文章主要是做了三點的工作 1 imu與odometry的預積分,2 od...