SLAM的前世此生

SLAM技術已經蓬勃發展起來,這裏綜述性地介紹下SLAM的主體知識。SLAM的主體技術很少,難點在於細節。來源是:技術分享.ppthtml

前世

人類惆悵近千年的問題不是:我是誰,我要作什麼,我要去哪裏!而是:定位、定向、測速、授時前端

定位是說物體在地球上的方位,定向是物體前進的方向,測速是物體的運行速度,授時是運動經歷的時長。而定位和定向就是咱們要討論的話題。算法

古代智慧的中國人們提出了夜觀天象,基於遙遠恆星的方位推斷自身所處的位置,進而演變出一門博大精深的學科「牽星術」。後端

直到1964年,美國人完全打破了你們的遊戲規則,創建了全球定位系統GPS。多說幾句,GPS是給出物體相對於地心座標系的經緯度以及相對於水平面的高度(三維信息),且GPS是狹義相對論的應用實例(衛星和地面的時間同步)。網絡

GPS軍用的P碼能夠達到1-2米級精度,開放給大衆使用的CA碼也可以實現5-10米級的精度。至此已基本上解決了室外的定位和定姿問題,可是室內怎麼辦?室外怎麼優化位姿?app

SALM是什麼

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可使用大量不一樣的硬件
  • SALM是一個概念不是算法
  • SLAM包含多步,每一個模塊都有多種算法

因此,SLAM有一堆分支。可是整個SLAM框架能夠分爲前端和後端。根據不一樣的前端配置採用不一樣的後端策略,後端也提出了衆多的算法理論

前端:涉及傳感器的選擇以及傳感器數據處理。好比里程計時間戳和Lidar點雲時間戳的對齊等。按傳感器功能,機器人的兩個主要模塊:

  1. 移動系統:里程計、GPS、IMU慣導等
  2. 測量系統:Laser、sonar、vision等

移動系統中的傳感器能夠選擇一種或多重,甚至「沒有」(參考視覺里程計VO,根據圖片三維重建,反推攝像機位置,可是計算量大),通常SLAM硬件都會有一兩種。

測量系統中,Laser激光精度高,就是價格昂貴,32線程一個30萬左右,並且有些場景不適合。聲吶雷達價格便宜,技術成熟,就是精度差,水下等特殊場景普遍採用。攝像機信息量豐富直觀,但處理量大,對光照敏感。vision又分單目雙目等,可見前端方案組合的多樣性。

後端:綜合前端信息,優化位姿。涉及數學知識較多。

常見的slam算法:vslam、rgbd-salm、monoslam、orb-slam等

SLAM的通常過程

因爲運動估計傳感器(移動系統)獲得的位姿一般具備較大的偏差,於是咱們但願使用測量系統獲得的周圍環境信息來優化位姿。

一個完整的處理過程以下:

  1. 機器人使用觀測系統測量地標相對於機器人的距離和角度。
  2. 運動一段距離後,達到新的位置,機器人經過運動方程預測新位置。
  3. 在新的位置,經過觀測系統從新測量各個地標的距離和角度。
  4. 如此反覆
    image

R表示機器人,五角星表示地標。地標的選擇是一個研究方向,簡單的有特徵點(靜止點),更魯棒更高級的是線段,平面均可以做爲地標。路標還會涉及到路標的更新。

利用預測值和觀測值計算系統狀態——卡爾曼濾波。

線性KF方程

image

u和z是硬件能夠提供的,上述中x爲系統狀態:[x_{r},y_{r},z_{r}]表示robot的位置,\theta_{r}表示robot的姿態(四元組或者3個角度值),[x_{n},y_{n}]爲地標的位置

image

u表示速度/加速度/角加速度等值。z表示測量系統獲得的地標相對機器人的距離、角度。w和v表示噪聲。

由此,能夠根據上一時刻狀態和當前時刻觀測量更新獲得當前時刻狀態。這也是卡爾曼濾波所擅長的。

EKF

KF濾波是線性方程,可是距離等顯然不是線性的,所以,SLAM中其實用的最多的是EKF(Extended Kalman Filter)。

image

EKF實質是把差值認爲是線性的,思想仍是用線性系統代替非線性系統。計算能夠參考《An Introduction to the Kalman Filter》。

目前,也有一些slam採用了粒子濾波PF,PF是基於馬爾科夫蒙特卡洛方法的抽樣濾波,適用非線性系統。PF中要維持全部的可能狀態,對資源消耗大。

上述漸進式的匹配方式,存在累計偏差。若是有一幀錯誤,後續又基於這個錯誤的位置,後果不堪設想。因此最好和前面多幀進行對比(預測方程基於前面多個時刻)。

image

後端Graph-based SLAM

SLAM借鑑SFM中的捆集優化思想,21世紀走向了圖優化的道路。

優化方法和濾波器方法有根本上的不一樣。它並非一個迭代的過程,而是考慮過去全部幀中的信息。經過優化,把偏差平均分到每一次觀測當中。

image

Graph-based SLAM是沒法計算的,圖的聯結數目巨大,可是其實這是一個稀疏的,正是這個稀疏性,使得優化思路成爲了現實。這裏要感謝稀疏代數的發展,網上有不少優化庫可解上述目標函數。

閉環檢測

新來一幀數據,如何判斷它在已有序列中是否出現過。

  1. 新幀的位置,若是回到歷史位置附近;
  2. 幀的特徵和歷史關鍵幀特徵類似(經常使用)。

不用第一種:科學家認爲前一種依靠有噪聲的位置來減小位置的噪聲,有點循環論證的意思。第二種就是:幀幀匹配。

image

在沒有閉環的狀況下,[k,k+t]這一段數據進行圖優化,若是閉環出現(如綠色),就要把歷史數據也考慮進來,入冊能夠顯著減小累計偏差。

注意:閉環檢測的引入是爲了減小偏差的,不少場景很難出現閉環這種狀況,可是人們有意設計了這種情況,好比掃機器人開啓前期,走一段路就繞回來,爲得即是製造閉環。

SLAM的應用

  • 掃地機器人,這簡直就是SLAM的代言人,除了定位+製圖,還須要引入路徑規劃。
  • 室內移動機器人
  • 無人機
  • 無人駕駛

等等,I am anywhere! SLAM也即將開啓超體時代。Google的cartographer也給SLAM添了一把火。

參考

《SLAM for Dummies》

http://www.leiphone.com/news/201605/5etiwlnkWnx7x0zb.html

http://blog.csdn.net/lcj_cjfykx/article/details/46407875

https://www.zhihu.com/question/51348391/answer/125439374

相關文章
相關標籤/搜索