SLAM技術已經蓬勃發展起來,這裏綜述性地介紹下SLAM的主體知識。SLAM的主體技術很少,難點在於細節。來源是:技術分享.ppthtml
人類惆悵近千年的問題不是:我是誰,我要作什麼,我要去哪裏!而是:定位、定向、測速、授時!前端
定位是說物體在地球上的方位,定向是物體前進的方向,測速是物體的運行速度,授時是運動經歷的時長。而定位和定向就是咱們要討論的話題。算法
古代智慧的中國人們提出了夜觀天象,基於遙遠恆星的方位推斷自身所處的位置,進而演變出一門博大精深的學科「牽星術」。後端
直到1964年,美國人完全打破了你們的遊戲規則,創建了全球定位系統GPS。多說幾句,GPS是給出物體相對於地心座標系的經緯度以及相對於水平面的高度(三維信息),且GPS是狹義相對論的應用實例(衛星和地面的時間同步)。網絡
GPS軍用的P碼能夠達到1-2米級精度,開放給大衆使用的CA碼也可以實現5-10米級的精度。至此已基本上解決了室外的定位和定姿問題,可是室內怎麼辦?室外怎麼優化位姿?app
SLAM的全稱是Simultaneous Localization and Mapping,即定位與製圖。SLAM和SFM有這千絲萬縷的聯繫。框架
SFM(Structure From Motion),稱之爲傳統三維重建,這是一門計算機視覺學科的分支,特色是把數據採集回來,離線慢慢處理。常見應用就是重建某建築物的3d地圖,比較炫的成果可見Building Rome in a day (—天重建羅馬城)。iphone
SLAM是自動化控制學科的分支,提起SLAM就要提到ROS,網上開源的SLAM技術通常也都是和ROS集成在一塊兒的。ROS是機器人操做系統,用一堆各式各樣的傳感器組裝好一套硬件,採集各個傳感器的數據,傳送給ROS的處理節點(軟件節點)。ROS會並行調度這些節點,這些節點有接受處理某類傳感器信號的,有重合處理各項數據的,有展現結果/執行策略的。函數
因此學習SLAM就要簡單瞭解下ROS,推薦找本入門書翻翻,一天就差很少啦。SLAM要作到的是實時!要作到的是低運算量!學習
總結即是:兩者的數學理論類似,所屬學科不一樣,應用側重點不一樣。更直接點,如今的情況是:SFM提供了理論支撐,SLAM真正融入了人們生活。
另外一個問題是:SLAM和圖像算法是什麼關係?
SLAM同步構建周圍世界的3d地圖,並肯定robot所在的位置和方向。16年ICCV大會最後總結致辭:
SLAM是和ConvNets和Deep Learning互補的算法。SLAM專一於幾何問題, Deep Learning主要解決感知與識別。
若是想讓機器人走到冰箱而不撞牆,你須要SLAM;若是要識別冰箱內的物體,你須要卷積網絡。
固然,深度學習的興起,也會給SLAM/SFM提供新的養料。
首先明確三個問題:
因此,SLAM有一堆分支。可是整個SLAM框架能夠分爲前端和後端。根據不一樣的前端配置採用不一樣的後端策略,後端也提出了衆多的算法理論。
前端:涉及傳感器的選擇以及傳感器數據處理。好比里程計時間戳和Lidar點雲時間戳的對齊等。按傳感器功能,機器人的兩個主要模塊:
移動系統中的傳感器能夠選擇一種或多重,甚至「沒有」(參考視覺里程計VO,根據圖片三維重建,反推攝像機位置,可是計算量大),通常SLAM硬件都會有一兩種。
測量系統中,Laser激光精度高,就是價格昂貴,32線程一個30萬左右,並且有些場景不適合。聲吶雷達價格便宜,技術成熟,就是精度差,水下等特殊場景普遍採用。攝像機信息量豐富直觀,但處理量大,對光照敏感。vision又分單目雙目等,可見前端方案組合的多樣性。
後端:綜合前端信息,優化位姿。涉及數學知識較多。
常見的slam算法:vslam、rgbd-salm、monoslam、orb-slam等
因爲運動估計傳感器(移動系統)獲得的位姿一般具備較大的偏差,於是咱們但願使用測量系統獲得的周圍環境信息來優化位姿。
一個完整的處理過程以下:
R表示機器人,五角星表示地標。地標的選擇是一個研究方向,簡單的有特徵點(靜止點),更魯棒更高級的是線段,平面均可以做爲地標。路標還會涉及到路標的更新。
利用預測值和觀測值計算系統狀態——卡爾曼濾波。
u和z是硬件能夠提供的,上述中x爲系統狀態:表示robot的位置,
表示robot的姿態(四元組或者3個角度值),
爲地標的位置
u表示速度/加速度/角加速度等值。z表示測量系統獲得的地標相對機器人的距離、角度。w和v表示噪聲。
由此,能夠根據上一時刻狀態和當前時刻觀測量更新獲得當前時刻狀態。這也是卡爾曼濾波所擅長的。
KF濾波是線性方程,可是距離等顯然不是線性的,所以,SLAM中其實用的最多的是EKF(Extended Kalman Filter)。
EKF實質是把差值認爲是線性的,思想仍是用線性系統代替非線性系統。計算能夠參考《An Introduction to the Kalman Filter》。
目前,也有一些slam採用了粒子濾波PF,PF是基於馬爾科夫蒙特卡洛方法的抽樣濾波,適用非線性系統。PF中要維持全部的可能狀態,對資源消耗大。
上述漸進式的匹配方式,存在累計偏差。若是有一幀錯誤,後續又基於這個錯誤的位置,後果不堪設想。因此最好和前面多幀進行對比(預測方程基於前面多個時刻)。
SLAM借鑑SFM中的捆集優化思想,21世紀走向了圖優化的道路。
優化方法和濾波器方法有根本上的不一樣。它並非一個迭代的過程,而是考慮過去全部幀中的信息。經過優化,把偏差平均分到每一次觀測當中。
Graph-based SLAM是沒法計算的,圖的聯結數目巨大,可是其實這是一個稀疏的,正是這個稀疏性,使得優化思路成爲了現實。這裏要感謝稀疏代數的發展,網上有不少優化庫可解上述目標函數。
新來一幀數據,如何判斷它在已有序列中是否出現過。
不用第一種:科學家認爲前一種依靠有噪聲的位置來減小位置的噪聲,有點循環論證的意思。第二種就是:幀幀匹配。
在沒有閉環的狀況下,[k,k+t]這一段數據進行圖優化,若是閉環出現(如綠色),就要把歷史數據也考慮進來,入冊能夠顯著減小累計偏差。
注意:閉環檢測的引入是爲了減小偏差的,不少場景很難出現閉環這種狀況,可是人們有意設計了這種情況,好比掃機器人開啓前期,走一段路就繞回來,爲得即是製造閉環。
等等,I am anywhere! SLAM也即將開啓超體時代。Google的cartographer也給SLAM添了一把火。
《SLAM for Dummies》
http://www.leiphone.com/news/201605/5etiwlnkWnx7x0zb.html