SLAM的前世今生


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

前世

人類惆悵近千年的問題不是:我是誰,我要做什么,我要去哪里!而是:定位、定向、測速、授時

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

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

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

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

SALM是什么

SLAM的全稱是Simultaneous Localization and Mapping,即定位與制圖。SLAM和SFM有這千絲萬縷的聯系。

SFM(Structure From Motion),稱之為傳統三維重建,這是一門計算機視覺學科的分支,特點是把數據采集回來,離線慢慢處理。常見應用就是重建某建築物的3d地圖,比較炫的成果可見Building Rome in a day (—天重建羅馬城)。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM