【泡泡機器人SLAM原創專欄-滑動窗算法】: Sliding Window Filter for SLAM

2021-02-19 泡泡機器人SLAM

這篇專題的idea主要來源於2006年Gabe Sibley的論文A Sliding Window Filter for SLAM,此論文詳細說明了SLAM後端優化的稀疏性的緣由,並提出了應用於slam中Sliding window filter算法,在進入主題之前,小編先向大家安利一波。

接下來,小編就給大家分享一下讀了論文之後的心得。老生常談地,先簡單說明一下slam這個問題的數學模型,機器人在運動過程中,通常會記錄大量pose,以及landmark,我們用x_p表達pose,用x_m表達landmark,那麼如果在運動過程中,有m個pose,n個landmark,整個向量可以寫成這樣的形式:



對於空間中的三維運動,一般pose是一個6維的向量(位置和姿態),landmark是一個三維的向量(位置),在這樣一次運動過程中,由於我們能獲得大量的pose和landmark,而且他們總是充滿了一些聯繫,因此,接下來的任務,就是對這樣的聯繫進行數學建模

Process Model

首先我們要建立pose之間的聯繫,一個簡單的方法自然就是使用運動學公式,我們可以通過慣性傳感器(IMU)測量到加速度(acceleration)和角速度(angular velocity),這樣通過積分以及給定的上一時刻的pose和速度(velocity),直接就可以算到當前的pose了,當然,其實也可以建立其他很複雜的關係,但是我們總是希望這個關係是馬爾科夫性的,也就是如果知道了上一時刻的pose,那麼當前的pose和上一時刻之前的pose信息是相互獨立的,或者說可以認為上一時刻的pose已經包含了之前pose的所有信息,這樣的模型也許並不那麼完美,比如說傳感器隨著時間精度有所變化等,可能得不到那麼完整的信息,導致模型不滿足馬爾科夫性,這是完全有可能的,但是我們也這樣去近似了,就認為當前狀態僅僅之和前一時刻的狀態有關,和更前面的狀態沒有關係,由此,我們有這樣一個抽象的模型:

其中u代表輸入,對於速度加速度模型可以理解為速度,如果建立了動力學模型,完全可以理解為力和力矩等,是一個給定的具體值,w代表噪聲(均值為0,方差為Q),如果我們把每個時刻的pose方程拼起來,那麼我們就愉快地得到了一個估計方程組(表達式):


由此,我們可以通過這個方程組,寫出整個x_p的分布,由於噪聲是滿足高斯分布的,所以整個x_p的分布也滿足高斯分布,如下:

Sensor Model
接下來讓我們建立landmark和pose之間的聯繫,可以想像的是,一個pose會對多個landmark進行觀測,同時同一個landmark可能被不同的pose觀測到,而且由於傳感器的不同,觀測方程可能千變萬化,近年火起來的視覺slam,就是把雷射傳感器換成了相機,用像素代表觀測值,從而想方設法得到landmark以及pose的估計,一個更加general的模型是這樣的一個方程:

這個代表的是在j位置對i觀測,z是觀測值,h是觀測函數,v是滿足均值為0方差為R的噪聲,你可以想像,每個pose都有大量觀測,如此多的觀測湊在一起,拼成了一個無比龐大的函數:


同樣的,由於噪聲滿足高斯分布,我們也可以寫出這個概率密度函數:


Model

有了這些玩意兒,我們是時候建一波把他們統一在一起的模型了。

首先,我們有一些先驗信息,比如說你大概猜了一下,機器人都有第一個pose在哪個地方,沿途看到了哪些路標,同時有一個不確信度,整個信息滿足高斯分布,如下:


其中Pi表示信息矩陣,那麼概率密度如下:


有了這些個概率,我們可以寫一個聯合概率密度:


根據貝葉斯公式,可以表示後驗概率為:


注意到分母和x無關,因此,可以寫出這樣一個公式:


那麼這個時候,我們定義一個函數g:



那麼我們用最大似然估計,可以得到一個能量方程(g2o上面那個):


於是,這個時候應該愉快地高斯牛頓了。具體推導我就不做了,最後可以得到一個類似這樣的方程:


然而,這個不是重點,重要的是對hessian的認識,請看下圖:


看起來是不是很酷?左邊第一個是雅可比矩陣,有顏色部分是有數據的,其他都是0,左邊第二塊是整個hessian矩陣的長相,它正好等於傳感器給你的(觀測模型)+運動過程中建立的(運動模型)+先驗信息。
為啥會長這個樣子呢?其實很簡單,注意觀測模型,其實正好是稀疏BA的矩陣,它反映了pose和point之間的連接,第二個反映了pose和pose之間的連接(可以看到這個塊塊比第一個左上角的塊塊大,其實是把連接放進去了),第三個反映了對地圖的未知性(看右下角,認為point之間可能是有關聯的),以及對第一幀的預測,還有地圖的預測,具體公式推導,請自行進行,並不難。

The Sliding Window Filter

我想,最後是時候上算法了,講了這麼多,我想大家對slam問題的數學模型也有一定的了解了,但是其實有一個比較大的問題,即大規模運動和觀測總會跪,什麼意思呢,雖然slam有很好的稀疏性,有強大的g2o作為後端優化的神器,但是數據總不能沒有限制地增大增大再增大,所以,這個時候,如果我們有一個將計算複雜程度限制甚至固定的方法,這樣是不是很酷呢?

Marginalization

這個算法的核心就是邊緣化了,什麼是邊緣化呢,簡單說,邊緣化就是利用shur補減少優化參數,從而提升計算性能。shur補是啥呢?是時候上一波維基百科:




以上,均為維基百科對舒爾補的解釋,實際上,使用shur補,就是計算了餘留參數在準備remove的參數下的條件概率。所以說,每marg一次,就會代入一些交叉項信息,請看下圖,這是論文上的原圖


我不想去翻譯著些英文,就大致說明一下是怎麼回事

marg了最老的一幀,那麼你需要在首先在這一幀上看到的landmark之間建立起聯繫,並且需要建立和被marg的那一幀上看到的landmark與那一幀聯繫的所有幀之間的聯繫(由於有馬爾可夫性,所以一般就是下一幀和上一幀之間的聯繫),最後可以直接marg掉點

下面那個網格是從動態貝葉斯網的觀點看這個原理,我不想多做說明,至於marg的具體操作,其實就是做一次舒爾補罷了。這就是小編這次想給大家分享的所有內容,希望大家喜歡!!

【版權聲明】泡泡機器人SLAM的所有文章全部由泡泡機器人的成員花費大量心血製作而成的原創內容,希望大家珍惜我們的勞動成果,轉載請務必註明出自【泡泡機器人SLAM】微信公眾號,否則侵權必究!同時,我們也歡迎各位轉載到自己的朋友圈,讓更多的人能否進入到SLAM這個領域中,讓我們共同為推進中國的SLAM事業而努力!

【注】商業轉載請聯繫劉富強(liufuqiang_robot@hotmail.com)進行授權。普通個人轉載,請保留版權聲明,並且在文章下方放上「泡泡機器人SLAM」微信公眾帳號的二維碼即可。


相關焦點

  • 【泡泡機器人原創專欄】ORB_SLAM開發攻略(二):ORB-SLAM和markerless AR的結合
    orbslam地圖創建成功的同時,獲取orbslam地圖的坐標系,以及當前虛擬人物在markerlessAR的坐標系,做一次矩陣變換,讓虛擬人物出現到orbslam地圖坐標系的相同位置。此時markerlessAR的探測和跟蹤都停止。完全進入orbslam的跟蹤。幀率上升到10左右。
  • 【泡泡機器人原創專欄】ORB_SLAM開發攻略(四):SLAM多目標添加
    接著,當移動到卡片2所在位置時,基於圖像識別,識別卡片2,並且在卡片2的位置繪製虛擬物體導入slam坐標系。此時slam地圖中出現了兩個虛擬物體。如下圖:目前到此為止本系列文章主要改善了這些點:基於orbslam標準代碼做了MacOSX移植和iOS移植。優化了iOS詞典加載速度(代碼來自github fork的修改)基於預先卡片地圖,用戶可以不需要地圖初始化直接進入slam跟蹤,提高了用戶體驗。基於目標探測和跟蹤,實現了在slam地圖中基於不同卡片加入不同的虛擬物體。
  • 【泡泡機器人原創專欄】ORB_SLAM開發攻略(三):卡片地圖預先創建
    可以方便實現如下需求:在任意位置,放下卡片A,打開應用對準卡片A,卡片A對應的虛擬場景出現,同時slam對周圍的環境的特徵不斷增加到地圖中去。這裡卡片A起了以下幾個作用:當然缺點也是有的,程序打開時必須將攝像頭靠近離A相對近的距離,才能跟蹤地圖成功,繼續之後的動作。而且預先初始化導致程序加載時間更長。
  • 【泡泡機器人原創專欄】ORB_SLAM開發攻略(一): iOS及MacOSX下的ORB-SLAM移植
    但是slam效果非常好,Pose比較穩定和準確,重新定位時候也很容易,這一點對比PTAM還是有很大提升的。PTAM的重定位用的是基於縮略圖,而ORBSLAM用特徵BoW匹配可以更容易丟失後恢復。最後附上完整視頻地址(錄屏時幀率稍低):增加Mac版本對比(Mac版本非常流暢,2000點也完全沒有卡頓)補充:兩個視頻中,3D模型都出現在瓶子的上方。
  • 【泡泡機器人原創專欄-SLAM求職寶典】SLAM求職經驗帖(下)
    Numberical Linear Algebra(ceres slover推薦書籍http://ceres-solver.org/faqs.html)、Numerical OptimizationSLAM:Course on SLAM(Joan     Sola關於Graph-SLAM的教程)、State Estimation For Robotics(Tim.Barfoot)、概率機器人
  • 【泡泡機器人原創專欄-VIO系列】(一)如何理解SLAM中的First Estimate Jacobian
    此篇文章屬於泡泡機器人原創專欄的VIO系列中的第一篇,後面我們還會陸續對VIO的一些基礎知識以及高級知識進行一系列的科普介紹,希望大家看後能夠有所收貨。******以下為個人理解+跑火車部分******個人理解,能觀性是系統的固有特性,和採用EKF還是sliding window optimization的方法無關。
  • 【泡泡圖靈智庫】SLAM 領域國內外優秀實驗室匯總 3/3
    泡泡前言:泡泡機器人將分三期推薦 37 個 SLAM 領域國內外優秀實驗室(三期分別介紹:美洲,歐洲,澳洲+亞洲)排名不分先後。本文為第三期,獲取三期匯總的方式:    1.關注泡泡機器人微信公眾號。作者前言:     1. 個人關注點相對狹小,以下收集的實驗室肯定也不全面,僅供參考,也歡迎補充。同時以下排序不分先後,大致按不同國家進行分類,並挑選了部分代表性工作。     2.
  • 我手寫了個SLAM算法(二)!
    針對my_slam_gmapping進行了如下三部分的改變(1)嵌入雷射雷達運動畸變去除到my_slam_gmapping中(2)對my_slam_gmapping的結構調整說明3.1、my_slam_gmapping功能介紹my_slam_gmapping算法功能包除了圖片中劃掉的發布機器人姿態分布熵的topic和加入雷射雷達運動畸變去除模塊之外,其他功能還是gmapping算法一致。
  • 【泡泡圖靈智庫】Structure-SLAM:室內環境中的低漂移單目SLAM
    泡泡圖靈智庫,帶你精讀機器人頂級會議文章標題:Structure-SLAM: Low-Drift Monocular SLAM in Indoor Environments作者:Yanyan Li1,Nikolas Brasch1, Yida Wang1,Nassir Navab, Federico Tombari機構:Technical University
  • gradslam(∇SLAM)開源:論文、代碼全都有
    比如掃地機器人這類,就是依靠雷射雷達或攝像頭,再結合 SLAM 技術,才能清楚房間的角角落落是如何布局的,然後構建環境地圖,根據這些信息來規劃自己的打掃路徑。SLAM 賦予掃地機器人定位、路徑規劃等核心功能不過,發展多年以來,傳統的 SLAM 算法仍面臨端到端不可微的開放性問題,來自蒙特婁大學、卡內基梅隆大學的團隊在 ICRA 2020 發表的論文,則針對這一問題提出了解決辦法。
  • 【泡泡機器人】祝賀「全球人工智慧黑客馬拉松」暨泡泡機器人技術論壇——SLAM與AI的融合及未來在上海順利舉辦!附視頻回放連結!
    今天,泡泡機器人全球AI黑客馬拉松技術論壇在上海順利舉辦!
  • 有趣的圖解SLAM!
    這裡仍在之前my_slam_gmapping算法功能包的基礎之上進行解釋,特別說明的是該算法功能包又進行了一次大規模刪減,目前該算法功能包代碼量(含注釋、含雷射雷達運動畸變去除模塊)僅有3000餘行,已經非常非常適合閱讀。
  • 【泡泡機器人】關於ORB-SLAM中的Covisibility Graph 及 Essential Graph 的理解
    Covisibility 是一直在用的概念,而Essential Graph是orbslam自己提出的概念,為了減小全局迴環的計算量。當你自己實現SLAM時,也會碰到這些困難,並設計一些應對的策略,這些就是你的創新性。事實上,隨著SLAM時間的增長,如何控制圖的結構和優化的規模,仍是現在SLAM有待解決的一個問題。
  • SLAM綜述(3)-視覺與慣導,視覺與深度學習SLAM
    A multi-state constraint kalman filter for vision-aided inertial navigation. In Proceedings 2007 IEEE International Conference on Robotics and Automation, pages 3565–3572. IEEE, 2007.
  • SLAM綜述(2)-視覺SLAM
    Orb-slam: a versatile and accurate monocular slam system. IEEE transactions on robotics, 31(5):1147–1163, 2015. [2] Tong Qin, Peiliang Li, and Shaojie Shen.
  • 【泡泡機器人原創專欄】Visual Inertial ORB-SLAM代碼詳細說明
    歡迎大家再次回到泡泡機器人的課堂。
  • 【泡泡一分鐘】CDDT:可用於加速定位的快速2D光線投射近似法
    目前成熟的定位方案結合了光線投射(ray casting)和粒子濾波器,這使得算法的計算量很大,難以在計算資源受限的移動機器人上運行。我們提出了一種新的數據結構稱為壓縮方向距離變換(Compressed Directional Distance Transform)以加速二維柵格佔據地圖中的光線投射過程。
  • 【泡泡圖靈智庫】SLAM 領域國內外優秀實驗室匯總 1/3
    作者:吳豔敏這是泡泡圖靈智庫推送的第  篇文章,歡迎個人轉發朋友圈;其他機構或自媒體如需轉載,後臺留言申請授權。泡泡前言:泡泡機器人將分三期推薦 37 個 SLAM 領域國內外優秀實驗室(三期分別介紹:美洲,歐洲,澳洲+亞洲)排名不分先後。本文為第一期,獲取三期完整文檔方式:    1.
  • 【泡泡一分鐘】FlowFusion:基於光流的動態密集RGB-D SLAM
    每天一分鐘,帶你讀遍機器人頂級會議文章標題:FlowFusion: Dynamic Dense RGB-D SLAM Based on Optical Flow作者:Tianwei Zhang, Huayan Zhang, Yang Li, Y oshihiko Nakamura and Lei Zhang來源:2020 IEEE
  • 【泡泡一分鐘】使用學習的比例因子的矩陣縮放單目SLAM
    每天一分鐘,帶你讀遍機器人頂級會議文章標題:Metrically-Scaled Monocular SLAM using Learned Scale Factors作者:W.Nicholas Greene  Nicholas Roy來源:2020 IEEE International Conference on Robotics and Automation (ICRA)編譯:姚潘濤審核:柴毅,王靖淇這是泡泡一分鐘推送的第 676 篇文章,歡迎個人轉發朋友圈;其他機構或自媒體如需轉載,後臺留言申請授權