ROS 2智能機(jī)器人開發(fā)實(shí)踐
定 價(jià):128 元
叢書名:通用智能與大模型叢書
- 作者:胡春旭
- 出版時(shí)間:2025/1/1
- ISBN:9787121491733
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP242.6
- 頁碼:492
- 紙張:
- 版次:01
- 開本:16開
本書以ROS 2核心原理為主線,以機(jī)器人開發(fā)實(shí)踐為重心,在詳細(xì)講解ROS 2核心概念、組件工具的基礎(chǔ)上,介紹ROS 2構(gòu)建仿真/實(shí)物機(jī)器人系統(tǒng)的方法,剖析ROS 2用于視覺識(shí)別、地圖構(gòu)建、自主導(dǎo)航等應(yīng)用的方法,配有大量圖表、源碼等,幫助讀者在實(shí)現(xiàn)ROS 2基礎(chǔ)功能的同時(shí),深入理解基于ROS 2的機(jī)器人開發(fā)方法,從而將書中的內(nèi)容用于實(shí)踐。 本書采用最新穩(wěn)定版本ROS 2系統(tǒng)和全新一代Gazebo機(jī)器人仿真平臺(tái),讀者只需準(zhǔn)備一臺(tái)計(jì)算機(jī),就可以快速上手學(xué)習(xí)。同時(shí),本書介紹了實(shí)物機(jī)器人的搭建方法及相應(yīng)功能的實(shí)現(xiàn),書中源碼都加入了中文注釋,并針對(duì)核心內(nèi)容提供C++和Python兩個(gè)版本。為方便讀者閱讀和學(xué)習(xí)本書,筆者團(tuán)隊(duì)還專門創(chuàng)建了一個(gè)網(wǎng)頁,供讀者下載配套源碼、查看操作指令、學(xué)習(xí)配套視頻教程。
胡春旭,ROS機(jī)器人社區(qū)“古月居”創(chuàng)始人,D-Robotics開發(fā)者生態(tài)負(fù)責(zé)人。專注于機(jī)器人操作系統(tǒng)及人工智能相關(guān)技術(shù)的推廣與應(yīng)用,撰寫了《ROS機(jī)器人開發(fā)實(shí)踐》《移動(dòng)機(jī)器人原理與應(yīng)用(基于ROS操作系統(tǒng))》等多本暢銷技術(shù)書。主導(dǎo)了基于RDK機(jī)器人開發(fā)者套件的全新機(jī)器人開發(fā)范式的研發(fā)工作,任教于多所高校及機(jī)器人/人工智能教育平臺(tái)。曾獲2019 ROS全球十大影響力人物、ROS布道師等榮譽(yù)稱號(hào)。李喬龍,ROS機(jī)器人社區(qū)“古月居”負(fù)責(zé)人,負(fù)責(zé)古月居社區(qū)生態(tài)的推廣、建設(shè)和產(chǎn)品研發(fā)。主導(dǎo)設(shè)計(jì)了古月居Origin系列機(jī)器人套件。曾負(fù)責(zé)全國大學(xué)生智能汽車競(jìng)賽地平線賽項(xiàng)策劃與推廣,學(xué)生時(shí)期獲得過多項(xiàng)全國機(jī)器人國家級(jí)獎(jiǎng)項(xiàng)。目前專注于機(jī)器人技術(shù)和人工智能技術(shù)的推廣與應(yīng)用。
第1部分 ROS 2 基礎(chǔ)原理
1 ROS:智能機(jī)器人的靈魂 2
1.1 智能機(jī)器人時(shí)代 2
1.2 ROS 發(fā)展歷程 3
1.2.1 ROS 的起源 3
1.2.2 ROS 的發(fā)展 4
1.2.3 ROS 的特點(diǎn) 6
1.3 ROS 2 與 ROS 1 7
1.3.1 ROS 1 的局限性 7
1.3.2 全新的 ROS 2 8
1.3.3 ROS 2 與 ROS 1 的對(duì)比 10
1.4 ROS 2 安裝方法 13
1.4.1 Linux 是什么 14
1.4.2 Ubuntu 是什么 14
1.4.3 Ubuntu 操作系統(tǒng)安裝 15
1.4.4 ROS 2 系統(tǒng)安裝 18
1.5 ROS 2 命令行操作 20
1.5.1 Linux 中的命令行 21
1.5.2 海龜仿真實(shí)踐 25
1.5.3 ROS 2 中的命令行 26
1.6 本章小結(jié) 31
2 ROS 2 核心原理:構(gòu)建機(jī)器人的基石 32
2.1 ROS 2 機(jī)器人開發(fā)流程 32
2.2 工作空間:機(jī)器人開發(fā)的大本營 34
2.2.1 工作空間是什么 34
2.2.2 創(chuàng)建工作空間 35
2.2.3 編譯工作空間 36
2.2.4 設(shè)置環(huán)境變量 37
2.3 功能包:機(jī)器人功能分類 37
2.3.1 功能包是什么 38
2.3.2 創(chuàng)建功能包 38
2.3.3 功能包的結(jié)構(gòu) 39
2.3.4 編譯功能包 44
2.4 節(jié)點(diǎn):機(jī)器人的工作細(xì)胞 45
2.4.1 節(jié)點(diǎn)是什么 46
2.4.2 節(jié)點(diǎn)編程方法(Python) 47
2.4.3 節(jié)點(diǎn)編程方法(C++) 49
2.4.4 節(jié)點(diǎn)的命令行操作 51
2.4.5 節(jié)點(diǎn)應(yīng)用示例:目標(biāo)檢測(cè) 52
2.5 話題:節(jié)點(diǎn)間傳遞數(shù)據(jù)的橋梁 54
2.5.1 話題是什么 55
2.5.2 話題通信模型 55
2.5.3 話題通信編程示例 57
2.5.4 話題發(fā)布者編程方法(Python) 58
2.5.5 話題訂閱者編程方法(Python) 59
2.5.6 話題發(fā)布者編程方法(C++) 60
2.5.7 話題訂閱者編程方法(C++) 62
2.5.8 話題的命令行操作 63
2.5.9 話題應(yīng)用示例:目標(biāo)檢測(cè)(周期式) 64
2.6 服務(wù):節(jié)點(diǎn)間的你問我答 68
2.6.1 服務(wù)是什么 68
2.6.2 服務(wù)通信模型 69
2.6.3 服務(wù)通信編程示例 70
2.6.4 客戶端編程方法(Python) 71
2.6.5 服務(wù)端編程方法(Python) 72
2.6.6 客戶端編程方法(C++) 73
2.6.7 服務(wù)端編程方法(C++) 75
2.6.8 服務(wù)的命令行操作 76
2.6.9 服務(wù)應(yīng)用示例:目標(biāo)檢測(cè)(請(qǐng)求式) 77
2.7 通信接口:數(shù)據(jù)傳遞的標(biāo)準(zhǔn)結(jié)構(gòu) 80
2.7.1 通信接口是什么 80
2.7.2 通信接口的定義方法 82
2.7.3 通信接口的命令行操作 85
2.7.4 服務(wù)接口應(yīng)用示例:請(qǐng)求目標(biāo)檢測(cè)的坐標(biāo) 86
2.7.5 話題接口應(yīng)用示例:周期性發(fā)布目標(biāo)檢測(cè)的坐標(biāo) 89
2.8 動(dòng)作:完整行為的流程管理 93
2.8.1 動(dòng)作是什么 93
2.8.2 動(dòng)作通信模型 93
2.8.3 動(dòng)作通信編程示例 95
2.8.4 動(dòng)作接口的定義方法 96
2.8.5 服務(wù)端編程方法(Python) 97
2.8.6 客戶端編程方法(Python) 99
2.8.7 客戶端編程方法(C++) 101
2.8.8 服務(wù)端編程方法(C++) 104
2.8.9 動(dòng)作的命令行操作 107
2.9 參數(shù):機(jī)器人系統(tǒng)的全局字典 107
2.9.1 參數(shù)是什么 108
2.9.2 參數(shù)通信模型 108
2.9.3 參數(shù)的命令行操作 109
2.9.4 參數(shù)編程方法(Python) 111
2.9.5 參數(shù)編程方法(C++) 112
2.9.6 參數(shù)應(yīng)用示例:設(shè)置目標(biāo)檢測(cè)的閾值 113
2.10 數(shù)據(jù)分發(fā)服務(wù)(DDS):機(jī)器人的神經(jīng)網(wǎng)絡(luò) 116
2.10.1 DDS 是什么 116
2.10.2 DDS 通信模型 118
2.10.3 質(zhì)量服務(wù)策略 QoS 120
2.10.4 命令行中配置 DDS 的 QoS 123
2.10.5 DDS 編程示例 125
2.11 分布式通信 128
2.11.1 分布式通信是什么 128
2.11.2 SSH 遠(yuǎn)程網(wǎng)絡(luò)連接 128
2.11.3 分布式數(shù)據(jù)傳輸 130
2.11.4 分布式網(wǎng)絡(luò)分組 132
2.11.5 海龜分布式通信示例 133
2.12 本章小結(jié) 133
3 ROS 2 常用工具:讓機(jī)器人開發(fā)更便捷 134
3.1 Launch:多節(jié)點(diǎn)啟動(dòng)與配置腳本 134
3.1.1 多節(jié)點(diǎn)啟動(dòng)方法 136
3.1.2 命令行參數(shù)配置 137
3.1.3 資源重映射 139
3.1.4 ROS 參數(shù)設(shè)置 141
3.1.5 Launch 啟動(dòng)文件嵌套包含 143
3.2 tf:機(jī)器人坐標(biāo)系管理系統(tǒng) 144
3.2.1 機(jī)器人中的坐標(biāo)系 145
3.2.2 tf 命令行操作 146
3.2.3 靜態(tài) tf 廣播(Python) 149
3.2.4 靜態(tài) tf 廣播(C++) 151
3.2.5 動(dòng)態(tài) tf 廣播(Python) 153
3.2.6 動(dòng)態(tài) tf 廣播(C++) 155
3.2.7 tf 監(jiān)聽(Python) 157
3.2.8 tf 監(jiān)聽(C++) 160
3.2.9 tf 綜合應(yīng)用示例:海龜跟隨(Python) 163
3.2.10 tf 綜合應(yīng)用示例:海龜跟隨(C++) 168
3.3 Gazebo:機(jī)器人三維物理仿真平臺(tái) 172
3.3.1 Gazebo 介紹 172
3.3.2 機(jī)器人仿真示例 175
3.3.3 傳感器仿真示例 177
3.4 RViz:數(shù)據(jù)可視化平臺(tái) 178
3.4.1 RViz 介紹 178
3.4.2 數(shù)據(jù)可視化操作流程 181
3.4.3 應(yīng)用示例一:tf 數(shù)據(jù)可視化 182
3.4.4 應(yīng)用示例二:圖像數(shù)據(jù)可視化 184
3.4.5 Gazebo 與 RViz 的關(guān)系 186
3.5 rosbag:數(shù)據(jù)記錄與回放 186
3.5.1 記錄數(shù)據(jù) 187
3.5.2 回放數(shù)據(jù) 188
3.6 rqt:模塊化可視化工具箱 189
3.6.1 rqt 介紹 189
3.6.2 日志顯示 190
3.6.3 圖像顯示 191
3.6.4 發(fā)布話題/服務(wù)數(shù)據(jù) 192
3.6.5 繪制數(shù)據(jù)曲線 193
3.6.6 數(shù)據(jù)包管理 193
3.6.7 節(jié)點(diǎn)可視化 194
3.7 ROS 2 開發(fā)環(huán)境配置 195
3.7.1 版本管理軟件 git 195
3.7.2 集成開發(fā)環(huán)境 VSCode 196
3.8 本章小結(jié) 198
第 2 部分 ROS 2 機(jī)器人設(shè)計(jì)
4 ROS 2 機(jī)器人仿真:零成本玩轉(zhuǎn)機(jī)器人 200
4.1 機(jī)器人的定義與組成 200
4.2 URDF 機(jī)器人建模 203
4.2.1 連桿的描述 204
4.2.2 關(guān)節(jié)的描述 206
4.2.3 完整機(jī)器人模型 208
4.3 創(chuàng)建機(jī)器人URDF模型 209
4.3.1 機(jī)器人模型功能包 209
4.3.2 機(jī)器人模型可視化 209
4.3.3 機(jī)器人模型解析 213
4.4 XACRO機(jī)器人模型優(yōu)化 217
4.4.1 XACRO文件常見語法 218
4.4.2 機(jī)器人模型優(yōu)化 219
4.4.3 機(jī)器人模型可視化 223
4.5 完善機(jī)器人仿真模型 223
4.5.1 完善物理參數(shù) 224
4.5.2 添加控制器插件 225
4.6 Gazebo 機(jī)器人仿真 226
4.6.1 在Gazebo中加載機(jī)器人模型 226
4.6.2 機(jī)器人運(yùn)動(dòng)控制仿真 230
4.6.3 RGB相機(jī)仿真與可視化 232
4.6.4 RGBD相機(jī)仿真與可視化 236
4.6.5 激光雷達(dá)仿真與可視化 241
4.7 本章小結(jié) 244
5 ROS 2 機(jī)器人構(gòu)建:從仿真到實(shí)物 245
5.1 機(jī)器人從仿真到實(shí)物 245
5.1.1 案例剖析 245
5.1.2 機(jī)器人設(shè)計(jì) 247
5.1.3 軟件架構(gòu)設(shè)計(jì) 248
5.1.4 計(jì)算機(jī)端開發(fā)環(huán)境配置 249
5.1.5 機(jī)器人仿真測(cè)試 251
5.2 驅(qū)動(dòng)系統(tǒng)設(shè)計(jì):讓機(jī)器人動(dòng)得了 251
5.2.1 電機(jī)驅(qū)動(dòng)原理:從PWM到H橋 251
5.2.2 電機(jī)正反轉(zhuǎn)控制編程 255
5.3 底盤運(yùn)動(dòng)控制:讓機(jī)器人動(dòng)得穩(wěn) 261
5.3.1 電機(jī)編碼器測(cè)速原理 261
5.3.2 編碼器測(cè)速編程 262
5.3.3 電機(jī)閉環(huán)控制方法 266
5.3.4 電機(jī)閉環(huán)控制編程 272
5.4 運(yùn)動(dòng)學(xué)正逆解:讓機(jī)器人動(dòng)得準(zhǔn) 275
5.4.1 機(jī)常見器人運(yùn)動(dòng)學(xué)模型 275
5.4.2 差速運(yùn)動(dòng)學(xué)原理 281
5.4.3 差速運(yùn)動(dòng)學(xué)逆解:計(jì)算兩個(gè)輪子的轉(zhuǎn)速 283
5.4.4 差速運(yùn)動(dòng)學(xué)正解:計(jì)算機(jī)器人整體的速度 284
5.5 運(yùn)動(dòng)控制器中還有什么 284
5.5.1 電源管理:一個(gè)輸入多種輸出 285
5.5.2 IMU:測(cè)量機(jī)器人的姿態(tài)變化 287
5.5.3 人機(jī)交互:底層狀態(tài)清晰明了 291
5.6 機(jī)器人控制系統(tǒng):從“肌肉”到“大腦” 292
5.6.1 控制系統(tǒng)的計(jì)算平臺(tái) 293
5.6.2 控制系統(tǒng)的燒寫與配置 293
5.7 本章小結(jié) 300
6 ROS 2 控制與感知:讓機(jī)器人動(dòng)得了、看得見 301
6.1 機(jī)器人通信協(xié)議開發(fā) 301
6.1.1 通信協(xié)議設(shè)計(jì) 302
6.1.2 通信協(xié)議示例解析 303
6.1.3 運(yùn)動(dòng)控制器端協(xié)議開發(fā)(下位機(jī)) 306
6.1.4 應(yīng)用處理器端協(xié)議開發(fā)(上位機(jī)) 314
6.2 機(jī)器人 ROS 2 底盤驅(qū)動(dòng)開發(fā) 318
6.2.1 機(jī)器人 ROS 2 底盤驅(qū)動(dòng) 318
6.2.2 速度控制話題的訂閱 321
6.2.3 里程計(jì)話題與 tf 的維護(hù) 324
6.2.4 機(jī)器人狀態(tài)的動(dòng)態(tài)監(jiān)控 333
6.3 機(jī)器人運(yùn)動(dòng)編程與可視化 336
6.3.1 ROS 2 速度控制消息定義 337
6.3.2 運(yùn)動(dòng)編程與可視化 338
6.4 相機(jī)驅(qū)動(dòng)與圖像數(shù)據(jù) 339
6.4.1 常用相機(jī)類型 340
6.4.2 相機(jī)驅(qū)動(dòng)與可視化 341
6.4.3 ROS 2 圖像消息定義 343
6.4.4 三維相機(jī)驅(qū)動(dòng)與可視化 346
6.4.5 ROS 2 點(diǎn)云消息定義 347
6.5 激光雷達(dá)驅(qū)動(dòng)與可視化 348
6.5.1 常見激光雷達(dá)類型 348
6.5.2 ROS 2 雷達(dá)消息定義 349
6.5.3 激光雷達(dá)驅(qū)動(dòng)與數(shù)據(jù)可視化 351
6.6 IMU 驅(qū)動(dòng)與數(shù)據(jù)可視化 354
6.6.1 ROS 2 IMU 消息定義 354
6.6.2 IMU 驅(qū)動(dòng)與可視化 354
6.7 本章小結(jié) 356
第 3 部分 ROS 2 機(jī)器人應(yīng)用
7 ROS 2 視覺應(yīng)用:讓機(jī)器人看懂世界 358
7.1 機(jī)器視覺原理簡介 358
7.2 ROS 2 相機(jī)標(biāo)定 361
7.2.1 安裝相機(jī)標(biāo)定功能包 361
7.2.2 運(yùn)行相機(jī)標(biāo)定節(jié)點(diǎn) 362
7.2.3 相機(jī)標(biāo)定流程 362
7.2.4 相機(jī)標(biāo)定文件的使用 366
7.2.5 雙目相機(jī)標(biāo)定 370
7.3 OpenCV 圖像處理 371
7.3.1 安裝 OpenCV 371
7.3.2 在 ROS 2 中使用 OpenCV 371
7.4 視覺應(yīng)用一:視覺巡線 374
7.4.1 基本原理與實(shí)現(xiàn)框架 374
7.4.2 機(jī)器人視覺巡線仿真 376
7.4.3 真實(shí)機(jī)器人視覺巡線 381
7.5 視覺應(yīng)用二:二維碼識(shí)別 382
7.5.1 二維碼掃描庫——Zbar 382
7.5.2 相機(jī)識(shí)別二維碼 383
7.5.3 真實(shí)機(jī)器人相機(jī)識(shí)別二維碼 387
7.5.4 真實(shí)機(jī)器人二維碼跟隨 388
7.6 機(jī)器學(xué)習(xí)應(yīng)用一:深度學(xué)習(xí)視覺巡線 389
7.6.1 基本原理與實(shí)現(xiàn)框架 390
7.6.2 深度學(xué)習(xí)視覺巡線應(yīng)用 390
7.6.3 數(shù)據(jù)采集與模型訓(xùn)練 392
7.6.4 模型效果評(píng)估測(cè)試 395
7.6.5 在機(jī)器人中部署模型 396
7.7 機(jī)器學(xué)習(xí)應(yīng)用二:YOLO 目標(biāo)檢測(cè) 399
7.7.1 基本原理與實(shí)現(xiàn)框架 399
7.7.2 YOLO 目標(biāo)檢測(cè)部署 401
7.7.3 數(shù)據(jù)采集與模型訓(xùn)練 403
7.7.4 機(jī)器人目標(biāo)檢測(cè)與跟隨 406
7.8 本章小結(jié) 407
8 ROS 2 地圖構(gòu)建:讓機(jī)器人理解環(huán)境 408
8.1 SLAM 地圖構(gòu)建原理 408
8.1.1 SLAM 是什么 408
8.1.2 SLAM 基本原理 411
8.1.3 SLAM 后端優(yōu)化 412
8.2 SLAM Toolbox 地圖構(gòu)建 414
8.2.1 算法原理介紹 415
8.2.2 安裝與配置方法 415
8.2.3 仿真環(huán)境中的 SLAM Toolbox 地圖構(gòu)建 416
8.2.4 真實(shí)機(jī)器人 SLAM Toolbox 地圖構(gòu)建 418
8.3 Cartographer:二維地圖構(gòu)建 420
8.3.1 算法原理介紹 421
8.3.2 安裝與配置方法 . 422
8.3.3 仿真環(huán)境中的 Cartographer 地圖構(gòu)建 423
8.3.4 真實(shí)機(jī)器人 Cartographer 地圖構(gòu)建 427
8.4 ORB:視覺地圖構(gòu)建 430
8.4.1 算法原理介紹 430
8.4.2 安裝與配置方法 . 432
8.4.3 真實(shí)機(jī)器人 ORB 地圖構(gòu)建 434
8.5 RTAB:三維地圖構(gòu)建 435
8.5.1 算法原理介紹 436
8.5.2 安裝與配置方法 436
8.5.3 仿真環(huán)境中的RTAB地圖構(gòu)建 438
8.5.4 真實(shí)機(jī)器人RTAB地圖構(gòu)建 441
8.6 本章小結(jié) 443
9 ROS 2 自主導(dǎo)航:讓機(jī)器人運(yùn)動(dòng)自由 444
9.1 機(jī)器人自主導(dǎo)航原理 444
9.2 Nav2 自主導(dǎo)航框架 445
9.2.1 系統(tǒng)框架 445
9.2.2 全局導(dǎo)航 447
9.2.3 局部導(dǎo)航 448
9.2.4 定位功能 450
9.3 Nav2安裝與體驗(yàn) 452
9.3.1 Nav2安裝方法 452
9.3.2 Nav2案例體驗(yàn) 452
9.4 機(jī)器人自主導(dǎo)航仿真 455
9.4.1 Nav2參數(shù)配置 455
9.4.2 Launch啟動(dòng)文件配置 456
9.4.3 機(jī)器人自主導(dǎo)航仿真 458
9.5 機(jī)器人自主導(dǎo)航實(shí)踐 461
9.5.1 導(dǎo)航地圖配置 461
9.5.2 Nav2 參數(shù)與Launch啟動(dòng)文件配置 462
9.5.3 機(jī)器人自主導(dǎo)航實(shí)踐 464
9.6 機(jī)器人自主導(dǎo)航編程 467
9.6.1 功能運(yùn)行 467
9.6.2 編程方法(C++) 468
9.6.3 編程方法(Python) 469
9.7 機(jī)器人自主探索應(yīng)用 470
9.7.1 Nav2+SLAM Toolbox 自主探索應(yīng)用 470
9.7.2 Nav2+Cartographer 自主探索應(yīng)用 473
9.8 本章小結(jié) 476