主頁 > 軟體設計 > 一文徹底搞懂SLAM技術

一文徹底搞懂SLAM技術

2021-08-08 08:10:26 軟體設計

什么是SLAM?

SLAM (simultaneous localization and mapping),也稱為CML (Concurrent Mapping and Localization), 即時定位與地圖構建,或并發建圖與定位,

問題可以描述為:將一個機器人放入未知環境中的未知位置,是否有辦法讓機器人一邊逐步描繪出此環境完全的地圖,同時一邊決定機器人應該往哪個方向行進,

例如掃地機器人就是一個很典型的SLAM問題,所謂完全的地圖(a consistent map)是指不受障礙行進到房間可進入的每個角落,

SLAM最早由Smith、Self和Cheeseman于1988年提出,

由于其重要的理論與應用價值,被很多學者認為是實作真正全自主移動機器人的關鍵,

當你來到一個陌生的環境時,為了迅速熟悉環境并完成自己的任務(比如找飯館,找旅館),你應當做以下事情:

  • a.用眼睛觀察周圍地標如建筑、大樹、花壇等,并記住他們的特征(特征提取)

  • b.在自己的腦海中,根據雙目獲得的資訊,把特征地標在三維地圖中重建出來(三維重建)

  • c.當自己在行走時,不斷獲取新的特征地標,并且校正自己頭腦中的地圖模型(bundle adjustment or EKF

  • d.根據自己前一段時間行走獲得的特征地標,確定自己的位置trajectory

  • e.當無意中走了很長一段路的時候,和腦海中的以往地標進行匹配,看一看是否走回了原路(loop-closure detection),實際這一步可有可無,

以上五步是同時進行的,因此是simultaneous localization and mapping

圖片

離不開這兩類傳感器

目前用在SLAM上的Sensor主要分兩大類,激光雷達攝像頭

圖片

這里面列舉了一些常見的雷達和各種深度攝像頭,激光雷達有單線多線之分,角解析度及精度也各有千秋,

SICK、velodyne、Hokuyo以及國內的北醒光學、Slamtech是比較有名的激光雷達廠商,他們可以作為SLAM的一種輸入形式,

這里展示的就是一種簡單的2D SLAM,

圖片

這個小視頻是賓大的教授kumar做的特別有名的一個demo,是在無人機上利用二維激光雷達做的SLAM,

圖片

而VSLAM則主要用攝像頭來實作,攝像頭品種繁多,主要分為單目雙目單目結構光雙目結構光ToF幾大類,

他們的核心都是獲取RGB和depth map(深度資訊),

簡單的單目和雙目(Zed、leapmotion)我這里不多做解釋,我主要解釋一下結構光和ToF,

最近流行的結構光和TOF

結構光原理的深度攝像機通常具有激光投射器、光學衍射元件(DOE)、紅外攝像頭三大核心器件,

圖片

這個圖(下圖)摘自primesense的專利,

圖片

可以看到primesense的doe是由兩部分組成的,一個是擴散片,一個是衍射片,

先通過擴散成一個區域的隨機散斑,然后復制成九份,投射到了被攝物體上,根據紅外攝像頭捕捉到的紅外散斑,PS1080這個芯片就可以快速解算出各個點的深度資訊,

這兒還有兩款結構光原理的攝像頭,

圖片

圖片

第一頁它是由兩幅十分規律的散斑組成,最后同時被紅外相機獲得,精度相對較高,但據說DOE成本也比較高,

還有一種比較獨特的方案(最后一幅圖),它采用mems微鏡的方式,類似DLP投影儀,將激光器進行調頻,通過微鏡反射出去,并快速改變微鏡姿態,進行行列掃描,實作結構光的投射,(產自ST,ST經常做出一些比較炫的黑科技),

ToFtime of flight)也是一種很有前景的深度獲取方法,

傳感器發出經調制的近紅外光,遇物體后反射,傳感器通過計算光線發射和反射時間差或相位差,來換算被拍攝景物的距離,以產生深度資訊,

類似于雷達,或者想象一下蝙蝠,softkineticDS325采用的就是ToF方案(TI設計的),

但是它的接收器微觀結構比較特殊,有2個或者更多快門,測ps級別的時間差,但它的單位像素尺寸通常在100um的尺寸,所以目前解析度不高,

在有了深度圖之后呢,SLAM演算法就開始作業了,由于Sensor和需求的不同,SLAM的呈現形式略有差異,

大致可以分為激光SLAM(也分2D和3D)和視覺SLAM(也分SparsesemiDenseDense)兩類,但其主要思路大同小異,

圖片

這個是Sparse(稀疏)的

圖片

這個偏Dense(密集)的

圖片

SLAM演算法實作的4要素

SLAM演算法在實作的時候主要要考慮以下4個方面吧:

  1. 地圖表示問題,比如dense和sparse都是它的不同表達方式,這個需要根據實際場景需求去抉擇

  2. 資訊感知問題,需要考慮如何全面的感知這個環境,RGBD攝像頭FOV通常比較小,但激光雷達比較大

  3. 資料關聯問題,不同的sensor的資料型別、時間戳、坐標系表達方式各有不同,需要統一處理

  4. 定位與構圖問題,就是指怎么實作位姿估計和建模,這里面涉及到很多數學問題,物理模型建立,狀態估計和優化

其他的還有回環檢測問題,探索問題(exploration),以及綁架問題(kidnapping),

640-3

這個是一個比較有名的SLAM演算法,這個回環檢測就很漂亮,但這個呼叫了cuda,gpu對運算能力要求挺高,效果看起來比較炫,

以VSLAM舉個栗子

圖片

我大概講一種比較流行的VSLAM方法框架,

整個SLAM大概可以分為前端和后端

前端

前端相當于VO(視覺里程計),研究幀與幀之間變換關系,

首先提取每幀影像特征點,利用相鄰幀影像,進行特征點匹配,然后利用RANSAC去除大噪聲,然后進行匹配,得到一個pose資訊(位置和姿態),同時可以利用IMU(Inertial measurement unit慣性測量單元)提供的姿態資訊進行濾波融合后端則主要是對前端出結果進行優化,利用濾波理論(EKF、UKF、PF)、或者優化理論TORO、G2O進行樹或者圖的優化,最終得到最優的位姿估計,

后端

后端這邊難點比較多,涉及到的數學知識也比較多,總的來說大家已經慢慢拋棄傳統的濾波理論走向圖優化去了,

因為基于濾波的理論,濾波器穩度增長太快,這對于需要頻繁求逆的EKF(擴展卡爾曼濾波器),PF壓力很大,

而基于圖的SLAM,通常以keyframe(關鍵幀)為基礎,建立多個節點和節點之間的相對變換關系,比如仿射變換矩陣,并不斷地進行關鍵節點的維護,保證圖的容量,在保證精度的同時,降低了計算量,

列舉幾個目前比較有名的SLAM演算法:PTAM,MonoSLAM, ORB-SLAM,RGBD-SLAM,RTAB-SLAM,LSD-SLAM

圖片

RGBD-SLAM

圖片

MonoSLAM

圖片

LSD-SLAM

圖片

所以大家如果想學習SLAM的話,各個高校提高的素材是很多的,比如賓大、MIT、ETH、香港科技大學、帝國理工等等都有比較好的代表作品,還有一個比較有前景的就是三維的機器視覺,普林斯頓大學的肖劍雄教授結合SLAM和Deep Learning做一些三維物體的分類和識別,實作一個對場景深度理解的機器人感知引擎,

圖片

http://robots.princeton.edu/talks/2016_MIT/RobotPerception.pdf

SLAM技術從最早的軍事用途(核潛艇海底定位就有了SLAM的雛形)到今天,已經逐步走入人們的視野,掃地機器人的盛行更是讓它名聲大噪,

同時基于三維視覺的VSLAM越來越顯主流,在地面/空中機器人VR/AR/MR汽車/AGV自動駕駛等領域,都會得到深入的發展,同時也會出現越來越多的細分市場等待挖掘,

圖片

SLAM技術的應用領域

1)室內機器人 掃地機要算機器人里最早用到SLAM技術這一批了,

國內的科沃斯、塔米掃地機通過用SLAM演算法結合激光雷達或者攝像頭的方法,讓掃地機可以高效繪制室內地圖智能分析和規劃掃地環境,從而成功讓自己步入了智能導航的陣列,

不過有意思的是,科沃斯引領時尚還沒多久,一大幫懂Slam演算法的掃地機廠商就開始陸陸續續地推出自己的智能導航,直到昨天雷鋒網還看到一款智能掃地機新鮮出爐,而這追逐背后的核心,大家都知道就是SLAM技術的應用,

圖片

而另一個跟SLAM息息相關的室內移動機器人,因為目前市場定位和需求并不明確,我們目前只能在商場導購室內機器人和Buddy那樣的demo視頻里才能看到,國內Watchhhh SlamSlam Tech兩家公司都是做這方面方案提供的,以現實的觀點看,現在室內移動機器人市場定位和需求沒落地的時候,由方案商公司推動,商用室內移動機器人先行,這反而是一種曲線救國的發展方式,

2)AR 目前基于SLAM技術開發的代表性產品有微軟的Hololens,谷歌的Project Tango以及同樣有名的Magic Leap,后者4月20號公布它的新一代水母版demo后,國內的AR公司更加看到了這個趨勢,

比如進化動力近期就公布了他們的SLAM demo, 用一個小攝像頭實作VR頭顯空間定位,而易瞳去年10月雷鋒網去試用新品的時候,就發現已經整合SLAM技術了,國內其他公司雖然沒有正式公布,但我們可以肯定,他們都在暗暗研發這項技術,只等一個成熟的時機就會展現給大家,

圖片

進化動力CTO聶崇嶺向雷鋒網表示,如果用一個準確的說法

很多VR應用需要用到SLAM技術,定位只是一個feature,路徑記錄、3D重構、地圖構建都可以是SLAM技術的輸出,

3)無人機 國外的話,原來做 Google X Project Wing 無人機的創始人 MIT 機器人大牛 Nicholas Roy 的學生 Adam Bry 創辦的 Skydio,挖來了 Georgia Tech 的 Slam 大牛教授 Frank Dellaert 做他們的首席科學家,

國內大家非常熟悉的大疆精靈四避障用的雙目視覺+超聲波,一位大疆工程師徐梟涵在百度百家的撰文里坦率承認“P4里面呈現的主動避障功能就是一種非常非常典型的Slam的弱應用,無人機只需要知道障礙物在哪,就可以進行 Planning,并且繞開障礙物

當然Slam能做的事情遠遠不止這些,包括災區救援,包括探洞,包括人機配合甚至集群,所有的關于無人機的夢想都建立在Slam之上,這是無人機能飛(具有定位,姿態確定以后)的時代以后,無人機最核心的技術,”

圖片

而近期另一個號稱刷爆美國朋友圈的hover camera無人機,因為其創始人的的計算機視覺背景,正式把SLAM技術應用進來了,在介紹他們無人機的主要產品技術時,提到了

●SLAM(即時定位與地圖構建):通過感知自身周圍環境來構建3D增量式地圖,從而實作自主定位和導航,

4)無人駕駛 因為Google無人駕駛車的科普,很多人都知道了基于激光雷達技術的Lidar Slam,

Lidar Slam是指利用激光雷達作為外部傳感器,獲取地圖資料,使機器人實作同步定位與地圖構建

雖然成本高昂,但目前為止是最穩定、最可靠、高性能的SLAM方式,

圖片

另外,2011 年,牛津大學Mobile Robotics Group 首次向公眾展示他們的第一輛無人駕駛汽車野貓(Wildcat),這是一輛由 Bowler Wildcat 4X4 改裝而成的車,汽車頭頂的相機和激光能夠搜集資訊然后即時分析導航,已經成功通過了測驗,

2014 年,他們改裝的一輛 Nissan 的 Leaf 也成功路測,

Mobile Robotics Group主要研究領域是大規模的導航和對自然場景理解,

據稱,團隊所擁有的技術非常牛逼,其復雜和先進性遠遠超過一般的同步定位與地圖構建(SLAM)演算法,

可圈可點的是,對于無人駕駛技術,他們并沒有使用 GPS 或者是嵌入式的基礎設施(信標之類的),而是使用演算法來導航,包括機器學習和概率推理來建立周圍的地圖等,

—— The End ——

推薦好文 點擊藍色字體即可跳轉

? 沒想到靠股市,我差點成功逆襲

? 分享一下嵌入式 HarmonyOS 的學習思路

? 推薦一款我私藏已久的串口示波神器

? 一位老電子工程師的十年職場感悟

? 優雅地用宏實作環形緩沖區

歡迎轉發、留言、點贊、分享給你的朋友,感謝您的支持!

圖片

長按識別二維碼關注我

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/292396.html

標籤:其他

上一篇:Kubernetes 1.22發布:邁向新巔峰

下一篇:【論文解讀 WWW2019】|基于開放資料的因果推斷:社區環境特征如何影響居民健康?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more