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中的狀態估計是貫穿始終的,而狀態估計的學習又肯定離不開高等數學、線性代數、機率論和李群李代數,其中李群李代數應該是絕大多數初學者遇到的第一個難題,對李群李代數的理論知識理解很難深刻,公式的理解和推導過程又是乏味的。 此處學習的重點本人認為是在於可以根據實際的套用場景來感受李群李代數在具體問題中的套用 ,故而推薦以下關鍵的學習資料:
2.2、理論知識:非線性最佳化問題演算法與濾波演算法
2.3、理論知識:非線性最佳化與控制理論
這部份的內容是 針對移動機器人或無人機 的運動控制了,還有一小部份的軌跡規劃內容。本人也僅僅是學習了三門相關的課程,課程中老師推薦的教輔資料就整理在這小節中了。
在本小結的末尾跑一下火車:想當初做最佳化控制問題相關的套用時,最頭疼的就是評估系統的最佳化條件,推導系統的最佳化方程式及最後系統+控制結果的穩定性,回想當初雖然痛苦,但對個人成長的幫助還是挺大的。
2.4、理論知識:運動規劃
2.5、語言能力
雖然我不是科班出身的,但還是想推薦一下幾本C++相關的資料,供大家學習參考。下面分享的書籍都是我完整研讀過,並其中幾本是反復閱讀的,個人認為不僅是可以作為學習入門,還可以用作工具書使用。
3、機器人學工程能力提升相關
3.1、ROS系統
機器人學的工程能力和套用能力,除了需要C++的語言能力外,就是需要熟悉ROS環境和系統了。本人的ROS學習入門只使用了一本教材那就是大名鼎鼎的【ROS Robot Programming:From the basic concept to practical programming and robot application】和其配套的ROS wiki網站,當時學習起來都是不分晝夜地實作書中一個一個的教程範例,Linux系統和ROS系統及環境經歷崩潰和重裝不知道多少次,是真實地在痛苦中快速成長。
3.2、SLAM工程能力提升方法論
本小節以SLAM工程能力的提升出發,因為本人畢業後的工作內容是多傳感器融合和建圖定位,機器人的控制和運動規劃就沒再深耕了。根據上文中每個分類裏的模組,根據實際的需求和套用情況還需熟悉 各類經典演算法框架的處理策略和邏輯方法論 。再者,拋開上層的各類演算法和套用,進一步的階段中除了需要對演算法模組內的數學及相關知識有深入的研究和理解,最好還需清楚各類傳感器的原理和特性以便於進行機器人問題的建模和解算設計。若是滿足於調參、跑開源演算法demo和簡單演算法套用,恐怕人就死在Robotics這片汪洋裏了。
具體的提升依賴的在相關模組中的深耕, 本人認為至少得深入研究和熟悉2個及以上的經典SLAM工程和具體案例 ,如果沒有時間參照第二部份中的學習路線來系統學習相關的理論知識的話,直接從工程程式碼開始入門也是沒有什麽問題,只是本人覺得在其過程中至少得做到以下幾點:
- 清楚其中每個模組、每個函式、每行程式碼的設計目的和實作細節,這個是必須要做到的;
- 相關的SLAM工程中必然有配套的論文, 論文中的理論知識是萬萬不能省略的 ,在分析程式碼中的實作部份時需要對照論文中的理論部份,同時加強對理論和實踐以保證理解和能力的提升,同時在論文中若有不理解的公式推導,則可以專項地查詢相關的理論依據,即時補充知識儲備中的不足;
- 最後分享一個本人在閱讀論文和程式碼時的小trick ,在深入研讀程式碼後,可以嘗試比對一下程式碼中有但是相對應論文中沒有說明部份,這塊內容就是一些作者自己的工程經驗和一些小技巧的體現了,都是可以學習的地方。
下面是推薦入門學習的經典的SLAM演算法系統,供大家學習參考:
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 。
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系統。
可能有些人會推薦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,樂衷於在知乎上分享前沿技術的分析和個人職業經驗,歡迎大家點贊和關註支持