简化可视SLAM应用程序的开发
簡化可視SLAM應用程序的開發
Easing the development of visual SLAM applications
同步定位和映射(SLAM)描述了一個設備(如機器人)使用傳感器數據構建其周圍環境的圖像并同時確定其在該環境中的位置的過程。有許多不同的方法來實現SLAM,無論是在軟件算法方面,還是在使用的傳感器方面,其中可能包括相機、聲納、雷達、激光雷達和使用慣性測量單元(IMU)的基本位置數據。
廉價和小型攝像機的可用性推動了單目視覺SLAM系統的流行,該系統使用單一的標準攝像頭來執行定位和地圖繪制功能。這樣視覺SLAM系統可以在各種各樣的機器人身上找到,包括火星探測器和著陸器、農業領域的野外機器人、無人機,還有可能,自動駕駛車輛。在GPS不可用的情況下,例如在室內區域或大城市,由于建筑物的阻礙,GPS的精度會降低,因此可視SLAM系統也具有優勢。
本文描述了視覺SLAM的基本過程,包括目標識別、跟蹤和糾錯所涉及的模塊和算法。討論了將SLAM計算和功能卸載到專用DSP上的優點,并使用CEVA-SLAM SDK開發工具包來說明遵循此開發路線可以獲得的好處。
Direct and Feature-based SLAM
直接和基于特征的SLAM
有許多不同的方法來實現視覺SLAM,但都使用相同的整體方法,通過連續的攝像機幀跟蹤設定點來三角化它們的3D位置,同時利用這些信息來近似攝像機的姿態。并行地,SLAM系統不斷地使用復雜的算法來最小化投影點和實際點之間的差異——重投影誤差。
視覺SLAM系統可以分為直接式和基于特征的,根據它們使用接收到的圖像信息的方式。直接SLAM系統將整個圖像相互比較,提供關于環境的豐富信息,允許創建更詳細的地圖,但以犧牲處理工作量和速度為代價。本文重點研究了基于特征的SLAM方法,即在圖像中搜索已定義的特征,如角點和斑點,并僅基于這些特征來估計位置和周圍環境。雖然基于特征的SLAM方法會從圖像中丟棄大量有價值的信息,但取舍是一個簡化的過程,在計算上更容易實現。
Figure 1: Direct vs Feature-based SLAM.
The visual SLAM Process
基于特征的SLAM的主要步驟是從輸入圖像中提取一組稀疏特征,匹配從不同攝像機姿態獲得的特征,并通過最小化特征重投影誤差(在所有點上,一個點的跟蹤位置與期望給出攝像機姿態估計的位置之間的差異)來解決SLAM問題。
這些步驟是使用下面描述的一組構建塊來完成的,這些構建塊對于所有基于特性的SLAM實現都是通用的。可視化SLAM是一個不斷發展的領域,產生了大量的研究,并且已經為每個模塊開發和提出了各種算法,根據SLAM實現的確切性質,每個模塊都有利弊。下面的描述提到了當前最流行的算法的一個子集。
特征提取(圖2)是一個過程,它有效地將圖像中的有用信息(如角點、邊緣、斑點和更復雜的對象(如門口和窗戶)表示為緊湊的特征向量。目前流行的特征提取算法包括高斯差分法(DoG)和加速段測試法(FAST9)特征提取算法,該方法計算效率高,適合于實時視頻處理。
Figure 2: SLAM Feature Extraction.
在特征描述中,將每個提取特征周圍的區域轉換為一個緊湊的描述符,該描述符可以與其他描述符進行匹配。例如,可以通過特征的外觀或者特征點周圍的面片中像素的強度來描述特征。ORB和FREAK是流行的特征描述算法的例子。
在特征匹配中,提取的特征(描述符)在多個幀上進行匹配。通過將第一個圖像中的所有特征與第二個圖像中的所有特征進行比較,在兩個圖像中進行特征匹配。漢明距離函數通常用于特征匹配,因為它可以在硬件中有效地使用異或和計數位函數對數據位集(如向量)執行。漢明距離表示兩個向量中有多少位是不同的,這意味著得分越低,匹配越接近。
循環閉合是SLAM過程中的最后一步,它確保了SLAM解決方案的一致性,尤其是當定位和映射操作需要長時間執行時。Loop closure通過非相鄰幀觀察同一場景,并在它們之間添加約束,以減少姿態估計中的累積漂移。與其他視覺SLAM模塊一樣,已經開發了多種環路閉合算法,其中最流行的是束平差、卡爾曼濾波和粒子濾波。
VSLAM算法是一個活躍的研究領域,以上是近年來出現的越來越多的技術的例子。由于基于帶寬的解決方案更有效地利用了基于內存的SLAM處理速度。此外,基于特征的解決方案在各種條件下表現出更高的魯棒性,包括亮度的快速變化、低亮度、相機的快速移動和遮擋。
特定算法的選擇取決于特定應用的特點,包括地圖類型、傳感器類型、所需精度等等。許多SLAM系統結合了一組算法,這些算法最適合最廣泛的場景。
SLAM implementation challenges
可視化SLAM處理的計算量非常大,給傳統的基于CPU的實現帶來了很高的負載,導致了過多的功耗和較低的幀速率,從而影響了精度和電池壽命。新興SLAM應用程序的開發人員需要能夠提供更高集成度和更低功耗的解決方案。他們在設計中越來越多地使用專用視覺處理單元(VPU)。VPU是一種微處理器,其體系結構專為加速機器視覺任務(如SLAM)而設計,可用于從主應用程序CPU上卸載視覺處理。VPU,如CEVAs CEVA-XM6,圖3,包括低功耗、強大的ALU、強大的MAC功能、高吞吐量內存訪問和專用視覺指令等特性。這些設備還將支持圖像處理應用程序所需的強大浮點功能。
Figure 3: CEVA XM6 vision processing unit.
然而,即使使用VPU,VisualSLAM開發人員仍然必須克服幾個挑戰,因為為不同的SLAM模塊創建高效的代碼是一項非常重要的工作,而且很難將VPU連接到主處理器。
必須優化嵌入式應用程序的執行速度和功耗。可視化SLAM模塊的編碼是一項復雜的任務,可能需要獲取、存儲和操作大量的數據。例如,在特征匹配中,描述符作為128位向量存儲在存儲器中,為了在連續幀中匹配特征,通常必須將200個特征與2000個候選特征進行比較,從而導致400000個匹配操作。匹配操作顯然需要大量的內存,但在采樣數據較小的情況下,獲取和格式化數據的高開銷會影響編碼算法的效率。
束平差是另一種涉及復雜線性代數的算法,涉及大矩陣的操作。存在各種技術來優化這些和其他VSLAM模塊的編碼,但是這些技術的實現需要高水平的視覺特定編碼專業知識。
內存管理是圖像處理中的另一個挑戰。從圖像捕獲的數據通常被加載到連續的內存位置,處理圖像中的隨機補丁意味著處理未存儲在連續內存位置的數據。執行特征匹配的軟件例程必須從非連續內存位置檢索描述符,這進一步增加了設置開銷。
VSLAM開發工具
在當今的環境中,快速上市對開發人員來說是至關重要的,因此花時間獲取實現高效視覺處理代碼所需的技能和知識并不總是實際可行的。幸運的是,有許多工具可以促進經濟高效的SLAM應用程序的加速;應用程序開發工具包提供了vision特定軟件庫、優化的硬件和集成工具的組合,使開發人員能夠輕松地將vision特定的任務從CPU卸載到VPU。
圖4所示的cevaslamsdk是此類應用程序開發工具集的一個主要示例。
Figure 4: The CEVA SLAM SDK.
基于CEVA XM6 DSP和CEVA NeuPro AI處理器硬件,CEVA SLAM SDK能夠有效地將SLAM實現集成到低功耗嵌入式系統中。SDK具有許多構建塊,包括圖像處理庫,為特征檢測和匹配以及捆綁調整提供了有效的代碼。它還為線性代數、線性方程求解、快速稀疏方程求解和矩陣處理提供了支持。
CEVA
XM6硬件針對圖像處理進行了優化,具有創新功能,如解決非連續內存訪問問題的并行加載指令,以及用于執行漢明距離計算的唯一專用指令。SDK還包括一個詳細的CPU接口,使開發人員能夠輕松地將視覺處理功能與主應用程序CPU集成。
為了說明SDK作為開發工具的性能,我們測量了一個以每秒60幀的速度運行的全SLAM跟蹤模塊的參考實現,其功耗僅為86mW。
Conclusion
視覺沖擊系統在農業領域機器人和無人機等廣泛的應用中越來越受歡迎??梢暬疭LAM的實現有很多替代方法,但是隨著嵌入式應用的日益廣泛,編碼效率和低功耗是關鍵因素。
雖然開發人員通常使用VPU來從主CPU上卸載計算密集型的視覺處理任務,但是為了生成高效的代碼以及管理VPU和CPU之間的接口,仍然存在重大挑戰。
隨著上市時間成為一個關鍵驅動因素,開發人員可以利用構建在SLAM特定開發工具包(如cevaslamsdk)中的功能來加速產品開發。
總結
以上是生活随笔為你收集整理的简化可视SLAM应用程序的开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Comparison of Laser
- 下一篇: 克服汽车摄像头连接挑战