1. SLAM演算法解析
【嵌牛導讀】: SLAM(Simultaneous Localization and Mapping) 是業界公認視覺領域空間定位技術的前沿方向,中文譯名為「同步定位與地圖構建」,它主要用於解決機器人在未知環境運動時的定位和地圖構建問題。
【 嵌牛鼻子】: 有人就曾打比方,若是手機離開了 WIFI 和數據網路,就像無人車和機器人,離開了 SLAM 一樣。
【嵌牛正文】: 目前科技發展速度飛快,想讓用戶在 AR/VR、機器人、無人機、無人駕駛領域體驗加強,還是需要更多前沿技術做支持,SLAM 就是其中之一。實際上,有人就曾打比方,若是手機離開了 WIFI 和數據網路,就像無人車和機器人,離開了 SLAM 一樣。
在 VR/AR 方面,根據 SLAM 得到地圖和當前視角對疊加虛擬物體做相應渲染,這樣做可以使得疊加的虛擬物體看起來比較真實,沒有違和感。在無人機領域,可以使用 SLAM 構建局部地圖,輔助無人機進行自主避障、規劃路徑。在無人駕駛方面,可以使用 SLAM 技術提供視覺里程計功能,然後跟其他的定位方式融合。機器人定位導航方面,SLAM 可以用於生成環境的地圖。基於這個地圖,機器人執行路徑規劃、自主探索、導航等任務。
SLAM 技術的發展距今已有 30 余年的歷史,涉及的技術領域眾多。由於本身包含許多步驟,每一個步驟均可以使用不同演算法實現,SLAM 技術也是機器人和計算機視覺領域的熱門研究方向。
SLAM 的英文全程是 Simultaneous Localization and Mapping,中文稱作「同時定位與地圖創建」。SLAM 試圖解決這樣的問題:一個機器人在未知的環境中運動,如何通過對環境的觀測確定自身的運動軌跡,同時構建出環境的地圖。SLAM 技術正是為了實現這個目標涉及到的諸多技術的總和。
SLAM 技術涵蓋的范圍非常廣,按照不同的感測器、應用場景、核心演算法,SLAM 有很多種分類方法。按照感測器的不同,可以分為基於激光雷達的 2D/3D SLAM、基於深度相機的 RGBD SLAM、基於視覺感測器的 visual SLAM(以下簡稱 vSLAM)、基於視覺感測器和慣性單元的 visual inertial odometry(以下簡稱 VIO)。
基於激光雷達的 2D SLAM 相對成熟,早在 2005 年,Sebastian Thrun 等人的經典著作《概率機器人學》將 2D SLAM 研究和總結得非常透徹,基本確定了激光雷達 SLAM 的框架。目前常用的 Grid Mapping 方法也已經有 10 余年的歷史。2016 年,Google 開源了激光雷達 SLAM 程序 Cartographer,可以融合 IMU 信息,統一處理 2D 與 3D SLAM 。目前 2D SLAM 已經成功地應用於掃地機器人中。
基於深度相機的 RGBD SLAM 過去幾年也發展迅速。自微軟的 Kinect 推出以來,掀起了一波 RGBD SLAM 的研究熱潮,短短幾年時間內相繼出現了幾種重要演算法,例如 KinectFusion、Kintinuous、Voxel Hashing、DynamicFusion 等。微軟的 Hololens 應該集成了 RGBD SLAM,在深度感測器可以工作的場合,它可以達到非常好的效果。
視覺感測器包括單目相機、雙目相機、魚眼相機等。由於視覺感測器價格便宜,在室內室外均可以使用,因此 vSLAM 是研究的一大熱點。早期的 vSLAM 如 monoSLAM 更多的是延續機器人領域的濾波方法。現在使用更多的是計算機視覺領域的優化方法,具體來說,是運動恢復結構(structure-from-motion)中的光束法平差(bundle adjustment)。在 vSLAM 中,按照視覺特徵的提取方式,又可以分為特徵法、直接法。當前 vSLAM 的代表演算法有 ORB-SLAM、SVO、DSO 等。
視覺感測器對於無紋理的區域是沒有辦法工作的。慣性測量單元(IMU)通過內置的陀螺儀和加速度計可以測量角速度和加速度,進而推算相機的姿態,不過推算的姿態存在累計誤差。視覺感測器和 IMU 存在很大的互補性,因此將二者測量信息進行融合的 VIO 也是一個研究熱點。按照信息融合方式的不同,VIO 又可以分為基於濾波的方法、基於優化的方法。VIO 的代表演算法有 EKF、MSCKF、preintegration、OKVIS 等。Google 的 Tango 平板就實現了效果不錯 VIO。
總的來說,相比於基於激光雷達和基於深度相機的 SLAM,基於視覺感測器的 vSLAM 和 VIO 還不夠成熟,操作比較難,通常需要融合其他感測器或者在一些受控的環境中使用。
【轉51cto】
2. slam演算法是什麼
SLAM是Simultaneous localization and mapping縮寫,意為「同步定位與建圖」,主要用於解決機器人在未知環境運動時的定位與地圖構建問題。
Simultaneous Localization and Mapping (SLAM)原本是Robotics領域用來做機器人定位的,最早的SLAM演算法其實是沒有用視覺camera的(Robotics領域一般用Laser Range Finder來做SLAM)。
SLAM對實時性要求比較高,而要做到比較精確、穩定、可靠、適合多種場景的方案一般計算量相對較大,目前移動式設備的計算能力還不足夠支撐這么大的計算量,為了達到實時性能,往往需要在精確度和穩定性上做些犧牲。
因此在具體的應用中,往往需要根據移動設備所具有的感測器組合、計算能力、用戶場景等,選擇和深度定製合適的SLAM演算法。比如,無人駕駛汽車和手機端AR類應用的SLAM演算法就非常不同。
SLAM的典型應用領域
機器人定位導航領域:地圖建模。SLAM可以輔助機器人執行路徑規劃、自主探索、導航等任務。國內的科沃斯、塔米以及最新面世的嵐豹掃地機器人都可以通過用SLAM演算法結合激光雷達或者攝像頭的方法,讓掃地機高效繪制室內地圖,智能分析和規劃掃地環境,從而成功讓自己步入了智能導航的陣列。
VR/AR方面:輔助增強視覺效果。SLAM技術能夠構建視覺效果更為真實的地圖,從而針對當前視角渲染虛擬物體的疊加效果,使之更真實沒有違和感。VR/AR代表性產品中微軟Hololens、谷歌ProjectTango以及MagicLeap都應用了SLAM作為視覺增強手段。
無人機領域:地圖建模。SLAM可以快速構建局部3D地圖,並與地理信息系統(GIS)、視覺對象識別技術相結合,可以輔助無人機識別路障並自動避障規劃路徑,曾經刷爆美國朋友圈的Hovercamera無人機,就應用到了SLAM技術。
無人駕駛領域:視覺里程計。SLAM技術可以提供視覺里程計功能,並與GPS等其他定位方式相融合,從而滿足無人駕駛精準定位的需求。例如,應用了基於激光雷達技術Google無人駕駛車以及牛津大學MobileRoboticsGroup11年改裝的無人駕駛汽車野貓(Wildcat)均已成功路測。
以上內容參考:slam路徑規劃演算法 - CSDN
3. 本科畢業論文,選了基於slam的機器人演算法研究,請問該怎麼上手
學視覺slam十四講,把一些框架拿過來運行一下,再把框架之中的內容改成自己想要的即可。
機器人爆炸式增長的一個主要問題是不能在不同的機器人平台上重復使用代碼。然而,ROS中的硬體抽象層及其消息服務允許創建可用於許多不同機器人平台的新代碼。而且,ROS提供了一套穩定的機器人軟體包,公認的SLAM評估方法都依賴於機器人社區可用的標准數據集。
所有SLAM的結果都使用佔用網格作為最終輸出,使用地圖相似性的性能指標進行分析。 重點是放在地圖質量,而不是姿態估計誤差,因為映射輸出受到本地化問題的高度影響。
SLAM的典型應用領域:
地圖建模。SLAM可以輔助機器人執行路徑規劃、自主探索、導航等任務。國內的科沃斯、塔米以及最新面世的嵐豹掃地機器人都可以通過用SLAM演算法結合激光雷達或者攝像頭的方法,讓掃地機高效繪制室內地圖,智能分析和規劃掃地環境,從而成功讓自己步入了智能導航的陣列。
國內思嵐科技(SLAMTEC)為這方面技術的主要提供商,SLAMTEC的命名就是取自SLAM的諧音,其主要業務就是研究服務機器人自主定位導航的解決方案。
4. 激光雷達SLAM演算法
機器人研究的問題包含許許多多的領域,我們常見的幾個研究的問題包括:建圖(Mapping)、定位(Localization)和路徑規劃(Path Planning),如果機器人帶有機械臂,那麼運動規劃(Motion Planning)也是重要的一個環節,SLAM需要機器人在未知的環境中逐步建立起地圖,然後根據地區確定自身位置,從而進一步定位。
ROS系統通常由大量節點組成,其中任何一個節點均可以通過發布/訂閱的方式與其他節點進行通信。舉例來說,機器人上的一個位置感測器如雷達單元就可以作為ROS的一個節點,雷達單元可以以信息流的方式發布雷達獲得的信息,發布的信息可以被其他節點如導航單元、路徑規劃單元獲得。
ROS的通信機制:
ROS(機器人操作系統)中SLAM的一些功能包,也就是一些常用的SLAM演算法,例如Gmapping、Karto、Hector、Cartographer等演算法。我們不會去關注演算法背後的數學原理,而是更注重工程實現上的方法,告訴你SLAM演算法包是如何工作的,怎樣快速的搭建起SLAM演算法。
地圖 : ROS中的地圖很好理解,就是一張普通的灰度圖像,通常為pgm格式。這張圖像上的黑色像素表示障礙物,白色像素表示可行區域,灰色是未探索的區域
地圖在ROS中是以Topic的形式維護和呈現的,這個Topic名稱就叫做 /map ,由於 /map 中實際上存儲的是一張圖片,為了減少不必要的開銷,這個Topic往往採用鎖存(latched)的方式來發布。地圖如果沒有更新,就維持著上次發布的內容不變,此時如果有新的訂閱者訂閱消息,這時只會收到一個 /map 的消息,也就是上次發布的消息;只有地圖更新了(比如SLAM又建出來新的地圖),這時 /map 才會發布新的內容。 這種方式非常適合變動較慢、相對固定的數據(例如地圖),然後只發布一次,相比於同樣的消息不定的發布,鎖存的方式既可以減少通信中對帶寬的佔用,也可以減少消息資源維護的開銷。
Gmapping ,Gmapping演算法是目前基於激光雷達和里程計方案裡面比較可靠和成熟的一個演算法,它基於粒子濾波,採用RBPF的方法效果穩定,許多基於ROS的機器人都跑的是gmapping_slam。
gmapping的作用是根據激光雷達和里程計(Odometry)的信息,對環境地圖進行構建,並且對自身狀態進行估計。因此它得輸入應當包括激光雷達和里程計的數據,而輸出應當有自身位置和地圖。
論文支撐:R-LINS: A Robocentric Lidar-Inertial State Estimator for Robust and Efficient Navigation
6軸 IMU:高頻,聚焦自身運動,不採集外界環境數據
3D LiDAR:低頻,聚焦車體運動,採集外界環境數據
R-LINS使用以上兩種感測器來估計機器人的運動姿態, 對於任一感測器而言,單獨的依靠自己的數據是很難實現地圖構建的, 比如純雷達模型使用的感測器是激光雷達,可以很好的探測到外界的環境信息。但是,同樣的,也會受到這些信息的干擾,再長時間的運算中會產生一定的累計誤差。為了防止這種誤差干擾到後續的地圖構建中,需要使用另一種感測器來矯正機器人自身的位姿信息, 即IMU感測器,IMU感測器由於是自身運動估計的感測器,所以,採集的都是自身運動的姿態信息。可以很好的矯正激光雷達里程計的位姿信息。所以,通常使用激光雷達和慣導來進行數據融合,實現姿態信息的矯正。
一共分為三大塊:
5. 自動駕駛是怎樣工作的SLAM介紹
SLAM是機器人或車輛建立當前環境的全局地圖並使用該地圖在任何時間點導航或推斷其位置的過程。
SLAM常用於自主導航,特別是在GPS無信號或不熟悉的地區的導航。本文中我們將車輛或機器人稱為「實體」。實體的感測器會實時獲得周圍環境的信息,並對信息進行分析然後做出決策。
SLAM是一種時間模型,它的目標是從復雜的信息中計算出一系列狀態,包括預期環境,距離,以及根據之前的狀態和信息得出的路徑 。有許多種狀態,例如,Rosales和Sclaroff(1999)使用狀態作為行人邊界框的3D位置來跟蹤他們的移動。Davison 等人(2017)使用單目相機的相機位置,相機的4D方向,速度和角速度以及一組3D點作為導航狀態。
SLAM一般包含兩個步驟,預測和測量。為了准確表示導航系統,SLAM需要在狀態之間以及狀態和測量之間進行學習。SLAM最常用的學習方法稱為 卡爾曼濾波 。
卡爾曼濾波是一種用於狀態估計的貝葉斯濾波類型。它是一種遞歸演算法,作為系統中不確定性的函數,使預測可以隨著時間的推移進行校正。不確定性表示為當前狀態估計和先前測量之間的權重,稱為卡爾曼增益。該演算法將實體先前的狀態,觀測和控制輸入以及當前的觀測和控制輸入作為輸入。過濾器包括兩個步驟:預測和測量。預測過程使用運動模型,可以根據給定的先前位置和當前的輸入估計當前位置。測量校正過程使用觀察模型,該模型基於估計的狀態,當前和歷史觀察以及不確定性來對當前狀態進行最終估計。
第一步涉及了時間模型,該模型基於先前的狀態和一些雜訊生成預測。
公式1. 預測模型。μ表示狀態的平均變化向量。ψ是狀態數量的矩陣,將當前狀態與先前的平均值相關聯。ε是轉換雜訊,可以確定當前狀態與前一個狀態的緊密相關程度。
第二步是「校正」預測。感測器收集自主導航的測量值。有兩類感測器:外感測器器和內感測器(proprioceptive)。外感測器從外部環境中收集信息,包括聲納,距離激光,相機和GPS。在SLAM中,這些是觀察值。內感測器利用編碼器,加速度計和陀螺儀等設備收集系統內部信息,如速度,位置,變化和加速度。在SLAM中,這些是單元控制,感測器結果輸入到實體中進行計算。這些感測器各有利弊,但相互組合可以產生非常有效的反饋系統。
公式2. μₘ表示測量平均向量。Φ是狀態數量的將測量的平均值與當前狀態相關聯。εₘ是測量雜訊,通常以協方差Σₘ分布。
卡爾曼增益增強了測量的可信性。例如,如果相機失焦,我們就不會對拍攝內容的質量報太大期望。卡爾曼增益較小意味著測量對預測的貢獻很小並且不可靠,而卡爾曼增益較大則正好相反。
公式 3.卡爾曼增益計算,Σ₊是預測的協方差。
更新過程如下:
公式4. 使用卡爾曼增益的卡爾曼濾波學習過程。圖片來自Simon JD Prince(2012)。
雖然這種方法非常有用,但它還存在一些問題。卡爾曼濾波假定單模態分布可以用線性函數表示。解決線性問題的兩種方法是擴展卡爾曼濾波器(EFK)和無跡卡爾曼濾波器(UFK)。EFK使用泰勒展開來逼近線性關系,而UFK使用一組質量點近似表示正態,這些質量點具有與原始分布相同的均值和協方差。一旦確定了質量點,演算法就通過非線性函數傳遞質量點以創建一組新的樣本,然後將預測分布設置為正態分布,均值和協方差等效於變換點。
由卡爾曼濾波強加的單模分布假設意味著不能表示其他狀態假設。粒子濾波是解決這些問題的常用方法。
粒子濾波允許通過空間中的粒子來表示多個假設,高維度需要更多粒子。每個粒子都被賦予一個權重,該權重表示其所代表的狀態假設中的置信度。預測從原始加權粒子的采樣開始,並從該分布中采樣預測狀態。測量校正根據粒子與觀測數據的一致程度(數據關聯任務)來調整權重。最後一步是對結果權重進行歸一化,使總和為1,因此它們是0到1的概率分布。
因為粒子的數量可以不斷增多,因此對該演算法的改進集中在如何降低采樣的復雜性。重要性采樣和Rao-Blackwellization分區是常用的兩種方法。
下圖來自Fuentes-Pacheco, J., Ruiz-Ascencio, J., & Rendón-Mancha, J. M. (2012)的論文「Visual simultaneous localization and mapping: a survey」,總結了到2010年的SLAM中的一些方法。他們的研究分為幾個方面。核心方案是使用學習演算法,其中一些在上文討論過。地圖的類型是捕獲環境幾何屬性的度量圖,或者是描述不同位置之間的連接的拓撲圖。
在線跟蹤中最常用的功能是顯著特徵和標記。標記是在環境中由3D位置和外觀描述的區域(Frintrop和Jensfelt,2008)。顯著特徵是由2D位置和外觀描述的圖像區域。深度學習技術通常用於在每個時間點描述並檢測這些顯著特徵,以向系統添加更多信息。檢測是識別環境中的顯著元素的過程,描述是將對象轉換為特徵向量的過程。
應用SLAM的方案有兩種,一種是回環檢測(loop closure),另一種是「機器人綁架(kidnapped robot)」。回環檢測是識別已經訪問過的任意長度的循環偏移,「機器人綁架」不使用先前的信息去映射環境。
SLAM是自主導航中常用的狀態時間建模的框架。它主要基於概率原理,對狀態和測量的後驗和先驗概率分布以及兩者之間的關系進行推斷。這種方法的主要挑戰是計算復雜。狀態越多,測量越多,計算量越大,在准確性和復雜性之間進行權衡。
[1] Fuentes-Pacheco, J., Ruiz-Ascencio, J., & Rendón-Mancha, J. M. (2012). Visual simultaneous localization and mapping: a survey. Artificial Intelligence Review, 43(1), 55–81. https://doi.org/10.1007/s10462-012-9365-8
[2] Durrant-Whyte, H., & Bailey, T. (2006). Simultaneous localization and mapping: Part I. IEEE Robotics and Automation Magazine, 13(2), 99–108. https://doi.org/10.1109/MRA.2006.1638022
[3] T. Bailey and H. Durrant-Whyte (2006). 「Simultaneous localization and mapping (SLAM): part II,」 in IEEE Robotics & Automation Magazine, vol. 13, no. 3, pp. 108–117. doi: 10.1109/MRA.2006.1678144
[4] Simon J. D. Prince (2012). Computer Vision: Models, Learning and Inference. Cambridge University Press.
[5] Murali, V., Chiu, H., & Jan, C. V. (2018). Utilizing Semantic Visual Landmarks for Precise Vehicle Navigation.
[6] Seymour, Z., Sikka, K., Chiu, H.-P., Samarasekera, S., & Kumar, R. (2019). Semantically-Aware Attentive Neural Embeddings for Long-Term 2D Visual Localization. (1).
[7] Fuentes-Pacheco, J., Ruiz-Ascencio, J., & Rendón-Mancha, J. M. (2012). Visual simultaneous localization and mapping: a survey. Artificial Intelligence Review, 43(1), 55–81. https://doi.org/10.1007/s10462-012-9365-8
6. SLAM演算法是什麼意思
乎
SLAM可以通過多種方法實現,首先其可以在多種不同的硬體上實現。其次,SLAM更像是一個概念而不是一個演算法
7. slam演算法是什麼
slam演算法是實現機器人定位、建圖、路徑規劃的一種演算法。SLAM是同步定位與地圖構建(Simultaneous Localization And Mapping)的縮寫,最早由Hugh Durrant-Whyte 和 John J.Leonard自1988年提出。
其實SLAM更像是一個概念而不是一個演算法,它本身包含許多步驟,其中的每一個步驟均可以使用不同的演算法實現。主要用於解決移動機器人在未知環境中運行時即時定位與地圖構建的問題。
SLAM技術的核心步驟:
大體上而言,SLAM包含了感知、定位、建圖這三個過程。
感知:機器人能夠通過感測器獲取周圍的環境信息。
定位:通過感測器獲取的當前和歷史信息,推測出自身的位置和姿態。
建圖:根據自身的位姿以及感測器獲取的信息,描繪出自身所處環境的樣貌。
8. 學習SLAM需要哪些預備知識
開始做SLAM(機器人同時定位與建圖)研究已經近一年了。從一年級開始對這個方向產生興趣,到現在為止,也算是對這個領域有了大致的了解。然而越了解,越覺得這個方向難度很大。總體來講有以下幾個原因:
入門資料很少。雖然國內也有不少人在做,但這方面現在沒有太好的入門教程。《SLAM for mmies》可以算是一篇。中文資料幾乎沒有。
SLAM研究已進行了三十多年,從上世紀的九十年代開始。其中又有若干歷史分枝和爭論,要把握它的走向就很費工夫。
難以實現。SLAM是一個完整的系統,由許多個分支模塊組成。現在經典的方案是「圖像前端,優化後端,閉環檢測」的三部曲,很多文獻看完了自己實現不出來。
自己動手編程需要學習大量的先決知識。首先你要會C和C++,網上很多代碼還用了11標準的C++。第二要會用Linux。第三要會cmake,vim/emacs及一些編程工具。第四要會用openCV, PCL, Eigen等第三方庫。只有學會了這些東西之後,你才能真正上手編一個SLAM系統。如果你要跑實際機器人,還要會ROS。
當然,困難多意味著收獲也多,坎坷的道路才能鍛煉人(比如說走著走著才發現Linux和C++才是我的真愛之類的。)鑒於目前網上關於視覺SLAM的資料極少,我於是想把自己這一年多的經驗與大家分享一下。說的不對的地方請大家批評指正。
這篇文章關注視覺SLAM,專指用攝像機,Kinect等深度像機來做導航和探索,且主要關心室內部分。到目前為止,室內的視覺SLAM仍處於研究階段,遠未到實際應用的程度。一方面,編寫和使用視覺SLAM需要大量的專業知識,演算法的實時性未達到實用要求;另一方面,視覺SLAM生成的地圖(多數是點雲)還不能用來做機器人的路徑規劃,需要科研人員進一步的探索和研究。以下,我會介紹SLAM的歷史、理論以及實現的方式,且主要介紹視覺(Kinect)的實現方式。
9. slam演算法是什麼
slam演算法是解決一個機器人在未知的環境中運動,如何通過對環境的觀測確定自身的運動軌跡,同時構建出環境的地圖的問題方法。
SLAM技術正是為了實現這個目標涉及到的諸多技術的總和。SLAM技術涵蓋的范圍非常廣,按照不同的感測器、應用場景、核心演算法,SLAM有很多種分類方法。
slam演算法應用
在 VR/AR 方面,根據 SLAM 得到地圖和當前視角對疊加虛擬物體做相應渲染,這樣做可以使得疊加的虛擬物體看起來比較真實,沒有違和感。在無人機領域,可以使用 SLAM 構建局部地圖,輔助無人機進行自主避障、規劃路徑。
在無人駕駛方面,可以使用 SLAM 技術提供視覺里程計功能,然後跟其他的定位方式融合。機器人定位導航方面,SLAM 可以用於生成環境的地圖。基於這個地圖,機器人執行路徑規劃、自主探索、導航等任務。
10. slam演算法是什麼
slam演算法是實現機器人定位、建圖、路徑規劃的一種演算法。
Simultaneous Localization and Mapping (SLAM)原本是Robotics領域用來做機器人定位的,最早的SLAM演算法其實是沒有用視覺camera,Robotics領域一般用Laser Range Finder來做SLAM。
其中一個原因是SLAM對實時性要求比較高,而要做到比較精確、穩定、可靠、適合多種場景的方案一般計算量相對較大,目前移動式設備的計算能力還不足夠支撐這么大的計算量,為了達到實時性能,往往需要在精確度和穩定性上做些犧牲。
演算法:
指解題方案的准確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。
也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。