筆者在閑暇之余學習了SLAM相關的內容,深感機器人狀態估計領域的博大精深。今天,筆者就拋磚引玉,談談SLAM領域中的VIO(視覺慣性里程計)。
初始SLAM
SLAM(Simultaneous Localization and Mapping),是指搭載特定傳感器的主體,在沒有環境先驗信息的情況下,于運動過程中建立環境的模型,同時估計自己的運動。SLAM可以解決自主運動的兩大基本問題:
我在什么地方?——定位
周圍環境是什么樣子?——建圖
定位與建圖=內外兼修,定位側重對自身的了解,建圖側重對外在的了解。
為什么用VIO?
單目視覺SLAM無法解決尺度問題,而將IMU估計的位姿序列與相機估計的位姿序列進行對齊可以恢復出相機軌跡的真實尺度;
視覺SLAM一般取第一幀作為世界坐標系,而IMU中的加速度計測量值包括重力向量,可以根據其將估計的位姿轉換到垂直于地面的世界坐標系中;
IMU幀間積分得到的位姿可以預測出圖像幀在下一時刻的位姿以及特征點在下一幀圖像上的位置,并將其作為初值帶入非線性優化中,減少優化迭代次數;
IMU測量可以提高視覺SLAM在某些復雜場景的魯棒性,在于相機快速運動、動態障礙物、光線明暗變化明顯、環境中紋理缺失等導致圖像信息質量較差的情況下,利用IMU信息仍能得到有效的定位結果。
緊耦合的VIO
根據狀態向量中是否加入圖像特征信息來判斷是否為松緊耦合,如圖所示,在VIO中將圖像特征以及IMU的位置、方向、速度作為狀態,構建非線性優化問題進行求解,采用梯度下降的方法同時對圖像特征以及位置、方向、速度進行優化,從而得到對機器人狀態的最優估計。
VIO的框架
VIO過程可以用上圖進行表示,其中,為路標點,,,為三個時刻相機的位置點,,,為三個時刻IMU的位置點。由于IMU存在著高斯白噪聲以及導數服從高斯分布的偏置,相機也存在著光學畸變誤差、機械誤差等,因此無論是相機觀測到的數據還是IMU測量的數據都不可靠。因為相機觀測的數據以及IMU測量的數據具有一定的關聯性,基于此構建優化問題,便可以得到對真實路標點的最優估計,同時也可以得到對IMU或者相機(機器人本體)的最優估計。
基于以上原理,VIO的優化問題可以表示為:
以上三項分別為邊緣化的先驗信息、IMU的測量殘差、視覺的重投影誤差。其中,視覺的重投影誤差是指像素坐標(觀測到的投影位置)與3D點按照當前估計的位姿進行第二次投影得到的位置相比較得到的誤差。邊緣化的先驗信息是指邊緣化后的剩余變量更新后的殘差,具體的會在邊緣化一節進行分析。
邊緣化
要講邊緣化,首先大家要知道實際使用中SLAM的優化方法,它并不是對所有的觀測進行優化,而是會構建一個窗口,只對窗口內觀測到的狀態值進行優化,這樣可以大大的減少計算量以及優化的時間。但是由于在移動過程中,會不斷的觀測到新的狀態,因此需要讓構建的窗口滑動起來,從而能夠包換最新觀測到的狀態,并且扔掉最早觀測到的狀態,這種優化方法叫做基于滑動窗口的優化方法。
但是,由于在連續的一些時刻中,相機可能會觀測到用一個路標點,所以不能簡單的扔掉之前觀測到的狀態值,需要其信息全部傳遞到之后的狀態中。簡單的說,這是一個求邊際概率的問題,形如:
b可以指代為需要扔掉的最早觀測到的狀態。通過求解邊際概率,最早觀測到狀態量信息便傳遞到了該滑動窗口剩余的狀態量中。此后,我們通過講最新觀測到的狀態量加入到滑動窗口中,便可以進行新一輪的非線性優化。
講到了這里,我想大家已經能夠理解邊緣化的先驗誤差是什么了吧,沒錯,他就是通過上述求解邊際概率方式更新后的誤差,該誤差加上最新觀測到的狀態量的誤差,也就是IMU的測量誤差以及相機的觀測誤差即可構建出上一節等式的優化問題。
寫到最后
VIO不僅包含上述的非線性優化問題,還有其他的一些問題:
首先是VIO的初始化,初始化的目的是為了恢復單目相機的尺度信息,求解IMU的偏置,IMU與相機之間的轉換關系,并將優化的坐標系轉換到世界坐標系下(可根據重力加速度為g得到z軸)。
除了初始化,還有回環檢測問題,基于優化的方法依舊會有誤差,尤其是長時間運轉后,因此可以通過檢測觀測到路標點是否之前已經觀測到,構建回環,從而增強優化問題的約束,避免陷入局部極小值點,保證結果的最優性。
最后,就是建圖模塊了,根據優化后的狀態量(機器人本體的位姿以及路標點的位置)可以構建出地圖,從而用于機器人的導航。
-
SLAM
+關注
關注
23文章
424瀏覽量
31833 -
VIO
+關注
關注
0文章
11瀏覽量
10143 -
IMU
+關注
關注
6文章
312瀏覽量
45753
原文標題:VIO從入門到精通(放棄)
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論