機器人SLAM導航:核心技術(shù)與實戰(zhàn)
定 價:149 元
叢書名:機器人工程技術(shù)叢書
- 作者:張虎
- 出版時間:2021/12/1
- ISBN:9787111697428
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP242
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
全書分為4部分。第1部分對基礎知識展開講解,包括Linux基礎和ROS入門。第2部分主要關注一個實際的機器人中的硬件和核心傳感器模塊的構(gòu)造,重點講解機器人上的傳感器、差分底盤、樹莓派主板開發(fā)方面的知識。第3部分是SLAM地圖構(gòu)建的核心算法,SLAM中的數(shù)學基礎、基于激光的SLAM系統(tǒng)、基于視覺的SLAM系統(tǒng)、混合SLAM系統(tǒng)、新型SLAM系統(tǒng)。第4部分是自主導航相關的核心技術(shù)與應用,包括自主導航中的數(shù)學基礎、基于地圖的導航、基于環(huán)境探索建圖的導航、強化學習在機器人導航中的應用。
通過閱讀本書,讀者不僅可以自己設計出一套SLAM導航機器人出來,還可以在軟硬件結(jié)合的環(huán)境中提高自己的C++/Python/Java方面的編程能力,同時還可以接觸到流行的SLAM算法的實際應用。
互聯(lián)網(wǎng)和人工智能技術(shù)可以看成是對人類大腦的進一步延展,而機器人技術(shù)則可以看成是對人類軀體的進一步延展。如果人工智能技術(shù)僅僅停留在虛擬的網(wǎng)絡和數(shù)據(jù)之中,那么其挖掘并利用新知識的能力將很難擴展開來?梢哉f,機器人是人工智能技術(shù)應用能力的有效延展,而能自主移動的機器人更是極大地拓展了人工智能技術(shù)的應用范圍。SLAM導航技術(shù)正是當下實現(xiàn)機器人自主移動的熱門研究領域,也是本書內(nèi)容的核心所在。
為什么寫這本書
幫助機器人實現(xiàn)完全自主化的每一種底層技術(shù)無疑將成為“機器人時代”的基礎設施,其中的自主移動技術(shù)在當下備受矚目,其實質(zhì)就是解決從地點A到地點B的問題。這個問題看似簡單,實則非常復雜。當向機器人下達移動到地點B的命令后,機器人不免會問出三個頗具哲學性的問題,即“我在哪”“我將到何處去”和“我該如何去”。經(jīng)過近幾十年來的研究,業(yè)界形成了一套有效解決機器人自主移動的方案,即SLAM導航
方案。
目前以SLAM導航技術(shù)為支撐的自主移動應用已經(jīng)十分廣泛,涵蓋航天、軍事、特種作業(yè)、工業(yè)生產(chǎn)、智慧交通、消費娛樂等眾多領域。典型應用包括火星探測車、軍事機器人、特種作業(yè)機器人、農(nóng)業(yè)領域機器人、自動駕駛汽車、終端物流配送機器人、機器人智慧養(yǎng)老、機器人餐廳、家庭服務機器人等。
雖然SLAM導航技術(shù)在許多方面取得了突破,但其仍處于發(fā)展階段且尚未真正落地。這就需要有更多的人參與到這個龐大且深奧的項目中來,以加快技術(shù)突破和產(chǎn)品落地的速度。而機器人是多專業(yè)知識交叉的學科,通常涉及傳感器、驅(qū)動程序、多機通信、機械結(jié)構(gòu)、算法等眾多領域。這就導致各個領域的研究、開發(fā)人員都在自己熟悉的領域內(nèi)“閉門造車”,缺乏領域之間的必要交流與實踐。軟件層面的開發(fā)者由于缺乏對機器人傳感器、機器人主機和機器人底盤的系統(tǒng)性認識,因此往往會在涉及軟硬件深度優(yōu)化方面的問題時束手無策。而硬件層面的開發(fā)者由于缺乏軟件方面的基礎,因此經(jīng)常會在理解軟件層需求時出現(xiàn)偏差。由于缺乏相關的數(shù)學理論體系,因此ROS及硬件相關領域的開發(fā)人員大多只能充當“調(diào)參俠”,很難對SLAM導航方面的算法提出實質(zhì)性的改善建議。缺乏工程思維和實踐經(jīng)驗,SLAM算法或?qū)Ш剿惴ǚ矫娴难芯咳藛T則很難將研究成果真正落地。
可以說,機器人SLAM導航是一個軟硬件相結(jié)合、理論加實戰(zhàn)的浩大工程性問題。而目前各領域之間還存在很大的交流屏障,這無疑成了機器人SLAM導航技術(shù)突破與落地的突出痛點。我由此萌生了寫一本兼具理論性和實踐性的系統(tǒng)化圖書的想法,希望通過這樣一本書將機器人SLAM導航中的軟件技術(shù)、硬件技術(shù)、數(shù)學理論、工程落地等一系列問題打通。
歷經(jīng)兩年多的艱苦創(chuàng)作,這本書終于要完稿了。開始寫這本書的時候,想法其實比較簡單。當時自以為對機器人SLAM導航技術(shù)很了解,因而有著強烈的欲望想將自己所理解的知識和經(jīng)驗分享給更多有需要的人,為機器人SLAM導航技術(shù)的普及與產(chǎn)品落地貢獻一份力量。但隨著寫作的逐步深入,我發(fā)現(xiàn)以前的很多理解存在不少偏差和局限,所以這倒逼著自己不斷去學習更深層的知識,不斷進行自我認知革新。直到寫完后一章回頭望時,我發(fā)現(xiàn)自己已經(jīng)超越從前的自己很多很多了。希望大家也能以這樣的心態(tài)去學習本書,不斷進行自我革新,等你學完整本書再回首時一定能發(fā)現(xiàn)一個全新的自己。
本書特色
本書的大亮點是對SLAM理論體系做了深入淺出的分析。本書先對SLAM理論做了總結(jié)性討論,這作為SLAM討論的開篇章節(jié)有利于讀者快速理清學習思路;而更深層的SLAM理論知識則放在后續(xù)具體SLAM系統(tǒng)中詳細展開討論,結(jié)合實例進行講解,這樣的好處是能大大降低深奧理論知識的理解難度。
本書的第二大亮點是將SLAM與導航兩大研究領域有機地串接起來。目前很多資料只側(cè)重于討論SLAM問題,而很少談及導航問題。其實對自主移動機器人來說,SLAM技術(shù)只相當于給機器人提供了一條腿,而另一條腿則是導航技術(shù)。由于本書前幾章對機器人硬件、系統(tǒng)、SLAM理論及具體算法實現(xiàn)做了大量鋪墊,這就為SLAM與導航相結(jié)合內(nèi)容的討論提供了土壤。
本書的第三大亮點是對機器學習所涉及的理論基礎進行了全面介紹,特別是對與SLAM前沿方向密切相關的深度學習及與自主導航前沿方向密切相關的強化學習進行了深入對比分析。深度學習和強化學習理論知識的講解為本書學習者后續(xù)的持續(xù)研究提供了廣闊的想象空間,為機器人實現(xiàn)強人工智能提供了技術(shù)路線的參考。
讀者對象
本書適合的讀者范圍極為廣泛,主要包括:
從事自主移動機器人或者無人駕駛方面工作的開發(fā)人員;
智能機器人方面的市場調(diào)研人員、產(chǎn)品經(jīng)理等;
想要轉(zhuǎn)型到機器人算法崗位的開發(fā)者;
SLAM導航領域的本科生或研究生;
從事機械設計、機器人底盤研發(fā)、AGV算法升級等方面工作的開發(fā)人員;
對SLAM導航感興趣的愛好者。
如何閱讀本書
本書分為四篇,共13章。
編程基礎篇(第1~3章)。本篇帶領大家了解ROS的核心概念、大型C++工程的代碼組織方式以及圖像處理方面的基礎知識,為后續(xù)學習打好必要的編程基礎。
硬件基礎篇(第4~6章)。本篇通過對機器人傳感器、機器人主機和機器人底盤的討論,讓缺少硬件基礎的開發(fā)者對機器人的硬件有一個系統(tǒng)的認識并更好地理解軟件與硬件之間的協(xié)同關系。機器人傳感器相當于機器人的眼耳口鼻,機器人主機相當于機器人的大腦,而機器人底盤則相當于集成傳感器和主機的軀干。
SLAM篇(第7~10章)。本篇首先總結(jié)式地介紹整個SLAM的理論知識體系,接著以各個具體的SLAM系統(tǒng)實現(xiàn)為例進一步介紹SLAM算法的代碼框架及核心算法的實現(xiàn)細節(jié)。
自主導航篇(第11~13章)。本篇首先給出整個自主導航的理論體系知識的總結(jié),接著以各個具體的自主導航系統(tǒng)實現(xiàn)為例進一步介紹自主導航算法的代碼框架以及核心算法的細節(jié)實現(xiàn),后以一個真實機器人為例介紹應用SLAM導航技術(shù)進行開發(fā)的完整流程。學完本書的全部內(nèi)容后,相信大家能夠繼續(xù)進行SLAM導航技術(shù)的獨立研究和開發(fā)。
勘誤與支持
由于本人水平有限,因此書中難免會出現(xiàn)一些錯誤或者表述不嚴謹?shù)牡胤,懇請讀者朋友批評指正,你可以發(fā)郵件到我的郵箱(robot4xiihoo@163.com)或者添加我的個人微信號(xiaohugege277)來與我聯(lián)系。另外,我還為本書制作了配套的課件文檔和教學視頻,大家可以關注我的知乎賬號(@小虎哥哥愛學習)獲取課件文檔,或者關注我的bilibili賬號(@小虎哥哥愛學習)獲取教學視頻。大家還可以前往GitHub倉庫(https://github.com/xiihoo/Books_Robot_SLAM_Navigation)下載本書相關實驗代碼以及課后習題答案。同時大家也可以加入QQ技術(shù)交流群(728661815)參與本書的話題討論,或者前往網(wǎng)站(www.xiihoo.com)獲取機器人SLAM導航方面的更多相關資料。
致謝
感謝機械工業(yè)出版社華章公司的高婧雅編輯在寫作方面給予我的細心指導;感謝清華大學的高翔博士為本書作序;感謝亮風臺首席架構(gòu)師侯曉輝、海軍工程大學吳中紅老師、香港大學博士生王斯煜對本書進行審閱并給予高度評價;感謝廣大網(wǎng)友在本書寫作過程中提供的眾多寶貴建議;感謝在本書寫作過程中給予我極大鼓勵與關懷的親朋好友。
后,希望這本書能陪伴大家走過一段難忘的學習之旅,并收獲一份珍貴的成長經(jīng)歷。星辰大海,如你所見,如你所愿。
序
前言
編程基礎篇
第1章 ROS入門知識 2
1.1 ROS簡介 2
1.1.1 ROS的性能特色 2
1.1.2 ROS的發(fā)行版本 3
1.1.3 ROS的學習方法 3
1.2 ROS開發(fā)環(huán)境的搭建 3
1.2.1 ROS的安裝 4
1.2.2 ROS文件的組織方式 4
1.2.3 ROS網(wǎng)絡通信配置 5
1.2.4 集成開發(fā)工具 5
1.3 ROS系統(tǒng)架構(gòu) 5
1.3.1 從計算圖視角理解ROS架構(gòu) 6
1.3.2 從文件系統(tǒng)視角理解ROS架構(gòu) 7
1.3.3 從開源社區(qū)視角理解ROS架構(gòu) 8
1.4 ROS調(diào)試工具 8
1.4.1 命令行工具 9
1.4.2 可視化工具 9
1.5 ROS節(jié)點通信 10
1.5.1 話題通信方式 12
1.5.2 服務通信方式 15
1.5.3 動作通信方式 19
1.6 ROS的其他重要概念 25
1.7 ROS 2.0展望 28
1.8 本章小結(jié) 28
第2章 C++編程范式 29
2.1 C++工程的組織結(jié)構(gòu) 29
2.1.1 C++工程的一般組織結(jié)構(gòu) 29
2.1.2 C++工程在機器人中的組織結(jié)構(gòu) 29
2.2 C++代碼的編譯方法 30
2.2.1 使用g++編譯代碼 31
2.2.2 使用make編譯代碼 32
2.2.3 使用CMake編譯代碼 32
2.3 C++編程風格指南 33
2.4 本章小結(jié) 34
第3章 OpenCV圖像處理 35
3.1 認識圖像數(shù)據(jù) 35
3.1.1 獲取圖像數(shù)據(jù) 35
3.1.2 訪問圖像數(shù)據(jù) 36
3.2 圖像濾波 37
3.2.1 線性濾波 37
3.2.2 非線性濾波 38
3.2.3 形態(tài)學濾波 39
3.3 圖像變換 40
3.3.1 射影變換 40
3.3.2 霍夫變換 42
3.3.3 邊緣檢測 42
3.3.4 直方圖均衡 43
3.4 圖像特征點提取 44
3.4.1 SIFT特征點 44
3.4.2 SURF特征點 50
3.4.3 ORB特征點 52
3.5 本章小結(jié) 54
硬件基礎篇
第4章 機器人傳感器 56
4.1 慣性測量單元 56
4.1.1 工作原理 56
4.1.2 原始數(shù)據(jù)采集 60
4.1.3 參數(shù)標定 65
4.1.4 數(shù)據(jù)濾波 73
4.1.5 姿態(tài)融合 75
4.2 激光雷達 91
4.2.1 工作原理 92
4.2.2 性能參數(shù) 94
4.2.3 數(shù)據(jù)處理 96
4.3 相機 100
4.3.1 單目相機 101
4.3.2 雙目相機 107
4.3.3 RGB-D相機 109
4.4 帶編碼器的減速電機 111
4.4.1 電機 111
4.4.2 電機驅(qū)動電路 112
4.4.3 電機控制主板 113
4.4.4 輪式里程計 117
4.5 本章小結(jié) 118
第5章 機器人主機 119
5.1 X86與ARM主機對比 119
5.2 ARM主機樹莓派3B+ 120
5.2.1 安裝Ubuntu MATE 18.04 120
5.2.2 安裝ROS melodic 122
5.2.3 裝機軟件與系統(tǒng)設置 122
5.3 ARM主機RK3399 127
5.4 ARM主機Jetson-tx2 128
5.5 分布式架構(gòu)主機 129
5.5.1 ROS網(wǎng)絡通信 130
5.5.2 機器人程序的遠程開發(fā) 130
5.6 本章小結(jié) 131
第6章 機器人底盤 132
6.1 底盤運動學模型 132
6.1.1 兩輪差速模型 132
6.1.2 四輪差速模型 136
6.1.3 阿克曼模型 140
6.1.4 全向模型 144
6.1.5 其他模型 148
6.2 底盤性能指標 148
6.2.1 載重能力 148
6.2.2 動力性能 148
6.2.3 控制精度 150
6.2.4 里程計精度 150
6.3 典型機器人底盤搭建 151
6.3.1 底盤運動學模型選擇 152
6.3.2 傳感器選擇 152
6.3.3 主機選擇 153
6.4 本章小結(jié) 155
SLAM篇
第7章 SLAM中的數(shù)學基礎 158
7.1 SLAM發(fā)展簡史 158
7.1.1 數(shù)據(jù)關聯(lián)、收斂和一致性 160
7.1.2 SLAM的基本理論 161
7.2 SLAM中的概率理論 163
7.2.1 狀態(tài)估計問題 164
7.2.2 概率運動模型 166
7.2.3 概率觀測模型 171
7.2.4 概率圖模型 173
7.3 估計理論 182
7.3.1 估計量的性質(zhì) 182
7.3.2 估計量的構(gòu)建 183
7.3.3 各估計量對比 190
7.4 基于貝葉斯網(wǎng)絡的狀態(tài)估計 193
7.4.1 貝葉斯估計 194
7.4.2 參數(shù)化實現(xiàn) 196
7.4.3 非參數(shù)化實現(xiàn) 202
7.5 基于因子圖的狀態(tài)估計 206
7.5.1 非線性小二乘估計 206
7.5.2 直接求解方法 206
7.5.3 優(yōu)化方法 208
7.5.4 各優(yōu)化方法對比 218
7.5.5 常用優(yōu)化工具 219
7.6 典型SLAM算法 221
7.7 本章小結(jié) 221
第8章 激光SLAM系統(tǒng) 223
8.1 Gmapping算法 223
8.1.1 原理分析 223
8.1.2 源碼解讀 228
8.1.3 安裝與運行 233
8.2 Cartographer算法 240
8.2.1 原理分析 240
8.2.2 源碼解讀 247
8.2.3 安裝與運行 258
8.3 LOAM算法 266
8.3.1 原理分析 266
8.3.2 源碼解讀 267
8.3.3 安裝與運行 270
8.4 本章小結(jié) 270
第9章 視覺SLAM系統(tǒng) 272
9.1 ORB-SLAM2算法 274
9.1.1 原理分析 274
9.1.2 源碼解讀 310
9.1.3 安裝與運行 319
9.1.4 拓展 327
9.2 LSD-SLAM算法 329
9.2.1 原理分析 329
9.2.2 源碼解讀 334
9.2.3 安裝與運行 337
9.3 SVO算法 338
9.3.1 原理分析 338
9.3.2 源碼解讀 341
9.4 本章小結(jié) 341
第10章 其他SLAM系統(tǒng) 344
10.1 RTABMAP算法 344
10.1.1 原理分析 344
10.1.2 源碼解讀 351
10.1.3 安裝與運行 357
10.2 VINS算法 362
10.2.1 原理分析 364
10.2.2 源碼解讀 373
10.2.3 安裝與運行 376
10.3 機器學習與SLAM 379
10.3.1 機器學習 379
10.3.2 CNN-SLAM算法 411
10.3.3 DeepVO算法 413
10.4 本章小結(jié) 414
自主導航篇
第11章 自主導航中的數(shù)學基礎 418
11.1 自主導航 418
11.2 環(huán)境感知 420
11.2.1 實時定位 420
11.2.2 環(huán)境建模 421
11.2.3 語義理解 422
11.3 路徑規(guī)劃 422
11.3.1 常見的路徑規(guī)劃算法 423
11.3.2 帶約束的路徑規(guī)劃算法 430
11.3.3 覆蓋的路徑規(guī)劃算法 434
11.4 運動控制 435
11.4.1 基于PID的運動控制 437
11.4.2 基于MPC的運動控制 438
11.4.3 基于強化學習的運動控制 441
11.5 強化學習與自主導航 442
11.5.1 強化學習 443
11.5.2 基于強化學習的自主導航 465
11.6 本章小結(jié) 467
第12章 典型自主導航系統(tǒng) 470
12.1 ros-navigation導航系統(tǒng) 470
12.1.1 原理分析 470
12.1.2 源碼解讀 475
12.1.3 安裝與運行 479
12.1.4 路徑規(guī)劃改進 492
12.1.5 環(huán)境探索 496
12.2 riskrrt導航系統(tǒng) 498
12.3 autoware導航系統(tǒng) 499
12.4 導航系統(tǒng)面臨的一些挑戰(zhàn) 500
12.5 本章小結(jié) 500
第13章 機器人SLAM導航綜合實戰(zhàn) 502
13.1 運行機器人上的傳感器 502
13.1.1 運行底盤的ROS驅(qū)動 503
13.1.2 運行激光雷達的ROS驅(qū)動 503
13.1.3 運行IMU的ROS驅(qū)動 504
13.1.4 運行相機的ROS驅(qū)動 504
13.1.5 運行底盤的urdf模型 505
13.1.6 傳感器一鍵啟動 506
13.2 運行SLAM建圖功能 506
13.2.1 運行激光SLAM建圖功能 507
13.2.2 運行視覺SLAM建圖功能 508
13.2.3 運行激光與視覺聯(lián)合建圖功能 508
13.3 運行自主導航 509
13.4 基于自主導航的應用 510
13.5 本章小結(jié) 511
附錄A Linux與SLAM性能優(yōu)化的探討 512
附錄B 習題 523