學了很長慣性導航的知識,突然對slam感興趣,看網上有很多人推薦高博的十四講,我想如何有效而且高速的學習slam,主要不知道如何具體實行這部分,有什麼好的可以推薦


其實slam學習應該算是一個較長期的過程,門檻還是比較高的,裡面設計到的數學知識較多。

  1. 首先是立體幾何知識,必須要清晰掌握誰相對誰旋轉平移,坐標系轉換等,多視圖幾何是個很好的教材;其他數學知識如:矩陣運算求解,李羣李代數四元數,最優化求解,各種下降方法(梯度,高斯牛頓,LM,Dogleg),概率統計,貝葉斯等。
  2. 目前流行的slam演算法較多,基於濾波器的MSCKF,稀疏特徵點的ORB-SLAM,半稠密的LSD以及稀疏直接法的DSO等等,不同方法設計到的基本理論有較大差異,如果都要搞懂那也是比較長期的過程;
  3. 如果slam是基於雷達的,那麼激光雷達原理必須清楚,粒子濾波器原理等,概率機器人正本書也非常重要;
  4. 如果slam中要用到IMU,那麼IMU的預積分理論必須要掌握;
  5. 如果你的slam是基於滑窗的並且用到localBA,那麼邊緣化理論必須要清楚,否則一致性問題就會出現在你的面前。如果你的slam是基於多狀態的kalman濾波器的,或者是滑窗濾波器,那麼一致性就非常重要,你要懂解決辦法,FEJ,OC等方法要掌握;
  6. State Estimation for RoBotics是一本非常好的書,理論比較齊全,14講看完可以看這個;

slam這條路很長,傳統的方法差不多就是上面那些東西,現在新的方法又出來了,深度學習已經開始漸漸能代替slam中部分模塊。


根據以下指南,行動起來更重要!

0)SLAM 是什麼?

SLAM 是同步定位與地圖構建 (Simultaneous Localization And Mapping) 的縮寫,最早由 Hugh Durrant-Whyte 和 John J.Leonard 提出。SLAM 主要用於解決移動機器人在未知環境中運行時定位導航與地圖構建的問題。

SLAM 實際上是一個典型的軍轉民用的技術,探測器登陸未知環境的星球進行科研研究時,面對複雜的大規模環境,而無法對其進行實時遙控時,必須通過實現同步定位與地圖創建才能完成導航任務,例如美國「機遇號」、「勇氣號」以及「好奇號」等火星探測器。如果放在當今社會消費級市場來理解的話,掃地機器人沒有 SLAM 技術,就無法實現自主移動。

圖 | 美國「好奇號」火星探測器

1)這個領域的知識是什麼樣的?

整個 SLAM 大概可以分為前端和後端,前端的功能是根據相鄰兩幀圖像(視覺 SLAM )或者兩片點雲(激光 SLAM )的匹配與比對,計算出感測器相鄰時刻的位置和姿態變化,進而對機器人或者無熱車進行定位;根據感測器不一樣,分為激光點雲、圖像、RGB-D 拼接幾種,其中圖像配準中又分基於稀疏特徵 (Sparse) 的和稠密 (Dense) 的兩種。後端則主要是對前端出結果進行優化,利用濾波理論或者優化理論,最終得到最優的位姿估計。

2)確定學習方向

SLAM 是一個包含技術點範圍很廣的應用方向,涉及到計算機視覺,優化方法,3D ….,每項之內又會分成更多的點,如果沒有目標去學習很容易迷失其中,因此確定目標是非常重要的!

圖 | 日常學習 SLAM 狀態

3)SLAM 基礎理論

一、數學方面

  • 建議閱讀 Thrun 的《Probabilistic Robotics》,瞭解下概率學是如何解決機器人中的問題的。
  • 學習貝葉斯濾波以及貝葉斯公式在各個問題 (定位,SLAM) 中的應用。
  • 針對優化的話,建議學透最小二乘優化和數學推導,因為最後很多問題都歸結到最小二乘優化,然後就是梯度下降、求 Jacobian 等。

二、編程方面

優質的 SLAM 框架要兼顧速度和精確度

國外做 SLAM 教學的時候會使用 Matlab 做實驗,Python 語言也很不錯,Python 3 支持SciPy ,OpenCV,ROS 等重要工具,不過依然有大量的諸如 g2o 等基礎性庫在 Python下無法使用。目前大部分 Vision 或者 RGBD 的 SLAM 框架都是用 C++ 來時實現完成的以確保運算速度。如果有志於在這個領域做深入研究,夯實的 C++ 基礎必不可少。 Introduction to Algorithms,以及 C++ Primer 等,都是不錯的書籍。

4)硬體和實驗上的知識儲備

SLAM 開源資源

  • SLAM 相關的開源代碼,裡麪包括了視覺 SLAM 和激光 SLAM 的多種 SLAM 方法,大多還附帶論文
  • ROS 系統,目前在機器人領域非常常用,很多研究會在這個社區上公開源代碼,這套系統基本是機器人入門必學的系統
  • KITTI 資料庫,涵蓋量比較全,數據採集自汽車平臺,包含了物體檢測、車道檢測、SLAM 等相關內容

RGB-D Camera 選擇

目前的主流視覺深度感測器方案主要分結構光,Time-of-Flight 和純雙目三類。雙目跟結構光一樣,都是使用三角測量法根據物體匹配點的視差反算物體距離,只是雙目是用自然光,而結構光是用主動光發射特定圖案的條紋或散斑。ToF 是通過給目標連續發送光脈衝,然後用感測器接收從物體返回的光,通過探測光脈衝的飛行(往返)時間來得到目標物距離。

曾經紅極一時的 Kinect 1,2 代(現已停產)採用的是結構光和 ToF,ToF 和結構光都屬於主動光,容易受可見光和物體表面幹擾,所以更適合室內和短距離的應用場景。

圖 | 「視覺+結構光+慣性導航」融合的雙目方案效果更好

將雙目和結構光的優點結合起來,用雙目的相差計算方法加上紅外的結構光對黑暗和無紋理的情況作輔助,小覓智能採用了「視覺+結構光+慣性導航」融合的雙目結構光深度慣導相機方案,可在無紋理的物體(像是白牆)和全黑情況及室內外條件下使用。

小覓智能龐琳勇:視覺+結構光+慣性導航組合拳為機器人安上雙眼?

zhuanlan.zhihu.com圖標

5)推薦閱讀的書籍

  • [Multiple View Geometry in Computer Vision] 這本書基本涵蓋了 Vision-based SLAM這個領域的全部理論基礎,另外建議配合 Berkeley 的課件學習。(更新:這本書書後附錄也可以一併讀完,包括附帶 bundle adjustment 最基本的 levenberg marquardt 方法,newton 方法等)
  • [Probabilistic Robotics] 瞭解概率學是如何解決機器人中的問題的
  • [State Estimation for Robotics] 這本書能夠幫你很快建立整套關於狀態估計理論的框架,同時在三維運動方面,提供了充分但不那麼困難的學習途徑
  • [視覺 SLAM 十四講] 高翔博士大大深入淺出地將 SLAM 數學模型講解得生動有趣又條理清晰,實在是 SLAM 入門不二之選(引自豆瓣書評)
  • [Quaternion kinematics for the error-state KF]
  • [Convex Optimization 凸優化]
  • [線性系統理論] Chi-Tsong Chen: 9780199959570: Amazon.com: Books7.
  • [An Invitation to 3-D Vision]
  • [Rigid Body Dynamics]

6)推薦的視頻

  • Tim Davis 可以參考他的課件及視頻,講述 Sparse Matrix — 大型稀疏矩陣處理的一般辦法。
  • 激光 SLAM 入門視頻,by Cyrill Stachniss(鏈接:https://pan.baidu.com/s/17U9Fr0u31gIKpQfehnnvEw 密碼: u5au)
  • Google 開源的 Cartographer,目前來看還是非常成熟和完善的激光 SLAM 系統,可以作為重點進行學習
  • 小覓智能聯合深藍學院推出的免費公開課:如何進行 VSLAM 技術選型
  • ROS 入門:ROS 機器人操作系統入門-中國大學 MOOC)

7)SLAM 相關學習文章(持續更新中)

ORB-SLAM 學習筆記?

zhuanlan.zhihu.com圖標VINS 學習筆記?

zhuanlan.zhihu.com圖標

8)歡迎點贊和分享小覓智能 | VINS 學習筆記(持續更新中)8)歡迎點贊和分享

據說知乎有個不成文的規定:只收藏不點贊和分享就是耍流氓!

隨手轉發到微信朋友圈,讓更多的人入坑吧~(不對 ? ,應該是高效學習 SLAM ??)

關注微信公眾號 MYNTAI小覓智能,回復「小覓」,一鍵保存文中提到的完整資料哦? ~

Ps:小覓雙目深度相機原創分享有獎徵集活動還在火熱進行中!最高獎勵 1000 元!

福利!小覓雙目深度相機原創分享有獎徵集!?

zhuanlan.zhihu.com圖標
視覺SLAM14講
推薦閱讀:
查看原文 >>
相關文章