當前位置: 華文星空 > 汽車

碩士研究生階段如何學習slam機器人?

2020-05-20汽車
本人之前做過一個類似的回答,選取了其中符合的內容並作適當修改

1、前言

本回答僅是根據本人入門Robitics和SLAM的親身經歷,基於一步一個腳印摸索而來的路線來盡可能避免小夥伴們走我的彎路,文章內容的廣度和深度應該是不如網上其他大佬們整理出來的綜述,但貴在真實可靠,希望對求學的夥伴們有些幫助,文章內容若有不當之處希望讀者朋友們勘誤。

本人當初的情況:本科專業是機械設計制造及其自動化,語言僅僅是C語言基礎入門,工具軟體也就用Matlab做了3次機械相關的大作業、電機的簡單PID控制和畢設時的實驗數據輸出處理。讀研時專業才轉到了機器人學,開始了較為系統地學習相關知識,而本科時常用的軟體如Solidwork、AutoCAD和Inventor、Ansys這些讀研後就再也沒用過了。

前置學習條件:高等數學、線性代數、機率論、C/C++基礎、外加一個英語四級?

內容大綱:理論知識學習+就業工程實踐能力提升

理論學習部份: 機器人學的內容分類與教材推薦,語言學習書籍推薦;
就業工程實踐能力部份: 經典演算法推薦與簡單介紹,SLAM技術的研究方向討論;

2、機器人學Robotics學習分類

回到正題,機器人學相關學習本人認為可以分成兩個大部份: 理論知識和語言能力

語言能力 單指C++ ,並不是說Python語言學了沒有用, 只是機器人學學術界和工業上的套用主要還是以C++為主。 針對Robotics機器人學的理論知識, 從場景型別的套用分類 就有工業機械臂,移動機器人,無人機,手持式裝置和無人船, 從知識內容分類 有運動控制:Kinematics運動學,Dynamics動力學,非線性系統控制理論;路徑規劃:Global Planning和Local Planning;定位建圖:貝葉斯網路及原理,基於濾波的方法,基於最佳化的方法,各類點雲配準演算法,地圖構建演算法,etc;還有感知的各個演算法,決策的框架等。 但綜合考慮所涉及的知識點無非就是李群李代數、狀態估計、濾波演算法和非線性最佳化理論、控制理論和一些具體演算法。

2.1、理論知識:李群李代數和狀態估計

Robotics和SLAM中的狀態估計是貫穿始終的,而狀態估計的學習又肯定離不開高等數學、線性代數、機率論和李群李代數,其中李群李代數應該是絕大多數初學者遇到的第一個難題,對李群李代數的理論知識理解很難深刻,公式的理解和推導過程又是乏味的。 此處學習的重點本人認為是在於可以根據實際的套用場景來感受李群李代數在具體問題中的套用 ,故而推薦以下關鍵的學習資料:

  • Joan Sola的 【A micro Lie theory for state estimate on robotics】 ,論文內容十分精煉,這是為機器人學狀態估計量身定做的一篇「Math Preliminaries」,必看,首推,並建議邊讀邊推導和做筆記,真正做到理解其中的大部份內容;
  • Timothy D. Barfoot的 【State Estimation for Robotics】 書中第二部份 :Three-Dimensional Machinery詳細講解了3D位姿變換並引入李群的概念以用作分析3D位姿變換。我個人感覺內容比【機率機器人Probabilistic Robotics】一書更適合入門,因為它不僅有引入機率的狀態估計基礎,而且不像【機率機器人】註重2D平面的套用,而是直接從3D的狀態和位姿變換入手,本書最後還有一個完整的章節結合前兩章的理論內容來分析實際套用的問題,內容不晦澀,很生動。
  • Richard M. Murray、Zexiang Li的 【A Mathematical Introduction to Robotic Manipulation】 這本書可以說是想從事工業機器人、機械臂相關領域的關鍵教材了 ,內容中是詳細地包括基礎理論,剛體運動變換理論、機械臂正逆運動學、動力學、機械臂運動規劃和控制。雖然沒有針對移動機器人相關的套用講解,但是在3D位姿變換和李群李代數的運用上是相通的。
  • 中文教材,首推高翔博士的 【視覺十四講】 ,本人雖然沒有完整地品讀過【十四講】的全部內容,但是學習中是參考了其中g2o和ceres的教程與程式碼範例,在我入門ceres時的幫助是很大的。
  • 2.2、理論知識:非線性最佳化問題演算法與濾波演算法

  • K. Madsen, H.B. Nielsen, O. Tingleff的 【METHODS FOR NON-LINEAR LEAST SQUARES PROBLEMS】 ,個人認為這篇著作對於非線性最佳化問題的幫助好比與上文中提到的【A micro Lie theory for state estimate on robotics】對狀態估計問題的幫助,必看,首推,還是建議邊讀邊推導和做筆記。
  • Timothy D. Barfoot的 【State Estimation for Robotics】 書中第一部份 :Estimation Machinery介紹了貝葉斯理論和解釋了狀態量變量的不確定性,然後詳細講解了基礎的KF與EKF,雖然介紹的基礎濾波演算法,但有詳細地數學推導和證明,推薦跟著書中內容一起推算理解。
  • Joan Sola的另一篇 【Quaternion kinematics for the error-state Kalman Filter】 ,ESKF可以說是學習LIO 、VIO的必看論文,甚至後期算得上是「工具書」了。
  • 2.3、理論知識:非線性最佳化與控制理論

    這部份的內容是 針對移動機器人或無人機 的運動控制了,還有一小部份的軌跡規劃內容。本人也僅僅是學習了三門相關的課程,課程中老師推薦的教輔資料就整理在這小節中了。

  • H.K.Khalil的 【Nonlinear-Systems】 ,這本教材是詳細講解了非線性系統中系統定義、穩定性分析和控制問題的相關解法,本人當時學習非線性系統控制時就是靠老師講解和這本書入門的。
  • Donald E. Kirk的 【Optimal Control Theory: An Introduction】 ,這本書老師在講解時是參照了書中對系統的描述,對最佳化問題處理效果的分析,Dynamic Programming動態規劃和最優控制法則,和書中第五節the variational approach to optimal control problem「最優控制問題的變分方法」的內容
  • A E. Bryson.的 【Applied Optimal Control: Optimization, Estimation, and Control】 ,這本書好像是美國高校裏「動態系統控制和分析」的常見教材,除了介紹基礎的最佳化問題定義和最佳化問題解法,書中註重針對各種場景條件下的動態最佳化問題解法的工程套用,當時學這門課時可沒少被課程中的各種lab作業折磨。
  • 在本小結的末尾跑一下火車:想當初做最佳化控制問題相關的套用時,最頭疼的就是評估系統的最佳化條件,推導系統的最佳化方程式及最後系統+控制結果的穩定性,回想當初雖然痛苦,但對個人成長的幫助還是挺大的。

    2.4、理論知識:運動規劃

  • Howie Choset,Kevin M. Lynch,etc的 【Principles of Robot Motion Theory, Algorithms, and Implementations】 ,這本算得上是學習機器人運動規劃入門最好的教材之一了,涵蓋了經典的運動、路徑規劃演算法,同時還有針對各種場景的套用範例,很友好的著作,書中甚至還有一些簡單位姿估計和最佳化控制的介紹。
  • Steven M. LaValle的 【PLANNING ALGORITHMS】 ,書中介紹了路徑規劃和運動規劃中常見的演算法,從離散的基於圖的搜尋(Graph Search Algorithms):D演算法、A*演算法,到Geometric Representations幾何表示和The Configuration Space配置空間的定義,再到基於采用的搜尋(Sampling Based Planning)和組合運動規劃:Probablistic Road Map,RRT(RRT*),Cell Decomposition,Potential Field Method和Visibility Graph等。
  • 2.5、語言能力

    雖然我不是科班出身的,但還是想推薦一下幾本C++相關的資料,供大家學習參考。下面分享的書籍都是我完整研讀過,並其中幾本是反復閱讀的,個人認為不僅是可以作為學習入門,還可以用作工具書使用。

  • 【Effective C++:改善程式設計的55個具體做法】
  • 【深入套用C++11:程式碼最佳化與工程級套用】
  • 【Effective STL】
  • 【數據結構與演算法之美】
  • 3、機器人學工程能力提升相關

    3.1、ROS系統

    機器人學的工程能力和套用能力,除了需要C++的語言能力外,就是需要熟悉ROS環境和系統了。本人的ROS學習入門只使用了一本教材那就是大名鼎鼎的【ROS Robot Programming:From the basic concept to practical programming and robot application】和其配套的ROS wiki網站,當時學習起來都是不分晝夜地實作書中一個一個的教程範例,Linux系統和ROS系統及環境經歷崩潰和重裝不知道多少次,是真實地在痛苦中快速成長。

  • ROS wiki:http:// wiki.ros.org/cn
  • ROS Moveit:https:// docs.ros.org/en/kinetic /api/moveit_tutorials/html/index.html
  • 魚香ROS ,一鍵ROS安裝、環境配置,重裝系統神器,不允許大家不知道:http://www. fishros.com/# /fish_home
  • 3.2、SLAM工程能力提升方法論

    本小節以SLAM工程能力的提升出發,因為本人畢業後的工作內容是多傳感器融合和建圖定位,機器人的控制和運動規劃就沒再深耕了。

    根據上文中每個分類裏的模組,根據實際的需求和套用情況還需熟悉 各類經典演算法框架的處理策略和邏輯方法論 。再者,拋開上層的各類演算法和套用,進一步的階段中除了需要對演算法模組內的數學及相關知識有深入的研究和理解,最好還需清楚各類傳感器的原理和特性以便於進行機器人問題的建模和解算設計。若是滿足於調參、跑開源演算法demo和簡單演算法套用,恐怕人就死在Robotics這片汪洋裏了。

    具體的提升依賴的在相關模組中的深耕, 本人認為至少得深入研究和熟悉2個及以上的經典SLAM工程和具體案例 ,如果沒有時間參照第二部份中的學習路線來系統學習相關的理論知識的話,直接從工程程式碼開始入門也是沒有什麽問題,只是本人覺得在其過程中至少得做到以下幾點:

    1. 清楚其中每個模組、每個函式、每行程式碼的設計目的和實作細節,這個是必須要做到的;
    2. 相關的SLAM工程中必然有配套的論文, 論文中的理論知識是萬萬不能省略的 ,在分析程式碼中的實作部份時需要對照論文中的理論部份,同時加強對理論和實踐以保證理解和能力的提升,同時在論文中若有不理解的公式推導,則可以專項地查詢相關的理論依據,即時補充知識儲備中的不足;
    3. 最後分享一個本人在閱讀論文和程式碼時的小trick ,在深入研讀程式碼後,可以嘗試比對一下程式碼中有但是相對應論文中沒有說明部份,這塊內容就是一些作者自己的工程經驗和一些小技巧的體現了,都是可以學習的地方。

    下面是推薦入門學習的經典的SLAM演算法系統,供大家學習參考:

  • 2D LiDAR SLAM: Cartographer系統:
  • github連結: https:// github.com/cartographer -project/cartographer ;

    相關論文: 【Real-Time Loop Closure in 2D LIDAR SLAM】,【Real-Time Correlative Scan Matching】,【Efficient Sparse Pose Adjustment for 2D Mapping】。

    Carto是一個非常非常好的基於圖最佳化的SLAM系統,非常完整。系統模組中包含相對魯棒的前端,基於submap和node約束獨立的pose graph後端及各類評測工具。模組化、系統化、工程化程度很高, 封裝很完善。但是若覺得cartographer的程式碼量實在太大,短期想簡單了解下的話,可以選擇平替的SLAM系統 Karto

  • 3D LiDAR SLAM: LOAM\Lego-LOAM\LIO-SAM:
  • github連結: https://github.com/cuitaixiang/LOAM_NOTED;https://github.com/wykxwyc/LeGO-LOAM_NOTED/tree/master/src;https://github.com/TixiaoShan/LIO-SAM;

    相關論文: 【LOAM: Lidar Odometry and Mapping in Real-time.】,【LeGO-LOAM: Lightweight and Groundoptimized Lidar Odometry and Mapping on Variable Terrain】,【LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping】。

    3D雷射SLAM的系統,其實也是可以看看cartograppher,但更好的選擇應該還得是LOAM系列相關的SLAM系統。

  • Visual SLAM:VINS-Fusion:
  • 可能有些人會推薦ORB-SLAM系列,但我這邊首推VINS系列中的VINS-Fusion。Github連結:https:// github.com/HKUST-Aerial -Robotics/VINS-Fusion ;相關論文:【A General Optimization-based Framework for Global Pose Estimation with Multiple Sensors】,【VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator】,【VINS on Wheels】,【On-Manifold Preintegration for Real-Time Visual-Inertial Odometry】,【Online Temporal Calibration for Monocular Visual-Inertial Systems】。

    VINS系統中的VO部份是利用的 特征提取並使用稀疏光流進行快速高效地跟蹤位姿 ,然後在最佳化中除了利用慣性傳感器的觀測構建殘留誤差項外,還利用重投影誤差構建殘留誤差項實作對位姿的最佳化。 而除了像VINS和ORB這類使用視覺特征進行匹配的方法外,還有一種視覺直接法的匹配,比如經典的DSO就是使用的直接法,上述中LiDAR SLAM中LOAM系是點雲特征匹配方案,Cartographer屬於點雲直接法配準方案 ,這裏就不展開細說差異了。

    其實上述的經典SLAM系統,只要花時間和精力,理解通透一個系統後,其他SLAM系統的上手也就快了,畢竟背後的理論知識都是一樣的,一通百通。最後附上一篇SLAM技術的綜述文章,詳見連結:https:// zhuanlan.zhihu.com/p/50 1102444 。

    4、SLAM領域研究方向討論

    可詳見文章:https:// zhuanlan.zhihu.com/p/53 9375248

    5、小結

    最後,希望回答中的內容能對題主和讀者們有所幫助,望與各位技術同僚共勉,一同在SLAM技術道路上高歌猛進,完成我們未竟的事業。

    我是致力於機器人和自動駕駛技術研究的Sky Shaw,樂衷於在知乎上分享前沿技術的分析和個人職業經驗,歡迎大家點贊和關註支持