ROS 2智能機器人開發實踐

胡春旭,李喬龍

  • 出版商: 電子工業
  • 出版日期: 2025-01-01
  • 定價: $768
  • 售價: 8.5$653
  • 語言: 簡體中文
  • 頁數: 492
  • ISBN: 7121491737
  • ISBN-13: 9787121491733
  • 相關分類: 機器人製作 Robots
  • 尚未上市,歡迎預購

相關主題

商品描述

本書以ROS 2核心原理為主線,以機器人開發實踐為重心,在詳細講解ROS 2核心概念、組件工具的基礎上,介紹ROS 2構建模擬/實物機器人系統的方法,剖析ROS 2用於視覺識別、地圖構建、自主導航等應用的方法,配有大量圖表、源碼等,幫助讀者在實現ROS 2基礎功能的同時,深入理解基於ROS 2的機器人開發方法,從而將書中的內容用於實踐。 本書採用最新穩定版本ROS 2系統和全新一代Gazebo機器人模擬平臺,讀者只需準備一臺電腦,就可以快速上手學習。同時,本書介紹了實物機器人的搭建方法及相應功能的實現,書中源碼都加入了中文註釋,並針對核心內容提供C++和Python兩個版本。為方便讀者閱讀和學習本書,筆者團隊還專門創建了一個網頁,供讀者下載配套源碼、查看操作指令、學習配套視頻教程。

目錄大綱

第1部分 ROS 2 基礎原理
1 ROS:智能機器人的靈魂 2
1.1 智能機器人時代 2
1.2 ROS 發展歷程 3
1.2.1 ROS 的起源 3
1.2.2 ROS 的發展 4
1.2.3 ROS 的特點 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 的對比 10
1.4 ROS 2 安裝方法 13
1.4.1 Linux 是什麽 14
1.4.2 Ubuntu 是什麽 14
1.4.3 Ubuntu 操作系統安裝 15
1.4.4 ROS 2 系統安裝 18
1.5 ROS 2 命令行操作 20
1.5.1 Linux 中的命令行 21
1.5.2 海龜模擬實踐 25
1.5.3 ROS 2 中的命令行 26
1.6 本章小結 31

2 ROS 2 核心原理:構建機器人的基石 32
2.1 ROS 2 機器人開發流程 32
2.2 工作空間:機器人開發的大本營 34
2.2.1 工作空間是什麽 34
2.2.2 創建工作空間 35
2.2.3 編譯工作空間 36
2.2.4 設置環境變量 37
2.3 功能包:機器人功能分類 37
2.3.1 功能包是什麽 38
2.3.2 創建功能包 38
2.3.3 功能包的結構 39
2.3.4 編譯功能包 44
2.4 節點:機器人的工作細胞 45
2.4.1 節點是什麽 46
2.4.2 節點編程方法(Python) 47
2.4.3 節點編程方法(C++) 49
2.4.4 節點的命令行操作 51
2.4.5 節點應用示例:目標檢測 52
2.5 話題:節點間傳遞數據的橋梁 54
2.5.1 話題是什麽 55
2.5.2 話題通信模型 55
2.5.3 話題通信編程示例 57
2.5.4 話題發布者編程方法(Python) 58
2.5.5 話題訂閱者編程方法(Python) 59
2.5.6 話題發布者編程方法(C++) 60
2.5.7 話題訂閱者編程方法(C++) 62
2.5.8 話題的命令行操作 63
2.5.9 話題應用示例:目標檢測(周期式) 64
2.6 服務:節點間的你問我答 68
2.6.1 服務是什麽 68
2.6.2 服務通信模型 69
2.6.3 服務通信編程示例 70
2.6.4 客戶端編程方法(Python) 71
2.6.5 服務端編程方法(Python) 72
2.6.6 客戶端編程方法(C++) 73
2.6.7 服務端編程方法(C++) 75
2.6.8 服務的命令行操作 76
2.6.9 服務應用示例:目標檢測(請求式) 77
2.7 通信接口:數據傳遞的標準結構 80
2.7.1 通信接口是什麽 80
2.7.2 通信接口的定義方法 82
2.7.3 通信接口的命令行操作 85
2.7.4 服務接口應用示例:請求目標檢測的坐標 86
2.7.5 話題接口應用示例:周期性發布目標檢測的坐標 89
2.8 動作:完整行為的流程管理 93
2.8.1 動作是什麽 93
2.8.2 動作通信模型 93
2.8.3 動作通信編程示例 95
2.8.4 動作接口的定義方法 96
2.8.5 服務端編程方法(Python) 97
2.8.6 客戶端編程方法(Python) 99
2.8.7 客戶端編程方法(C++) 101
2.8.8 服務端編程方法(C++) 104
2.8.9 動作的命令行操作 107
2.9 參數:機器人系統的全局字典 107
2.9.1 參數是什麽 108
2.9.2 參數通信模型 108
2.9.3 參數的命令行操作 109
2.9.4 參數編程方法(Python) 111
2.9.5 參數編程方法(C++) 112
2.9.6 參數應用示例:設置目標檢測的閾值 113
2.10 數據分發服務(DDS):機器人的神經網絡 116
2.10.1 DDS 是什麽 116
2.10.2 DDS 通信模型 118
2.10.3 質量服務策略 QoS 120
2.10.4 命令行中配置 DDS 的 QoS 123
2.10.5 DDS 編程示例 125
2.11 分佈式通信 128
2.11.1 分佈式通信是什麽 128
2.11.2 SSH 遠程網絡連接 128
2.11.3 分佈式數據傳輸 130
2.11.4 分佈式網絡分組 132
2.11.5 海龜分佈式通信示例 133
2.12 本章小結 133

3 ROS 2 常用工具:讓機器人開發更便捷 134
3.1 Launch:多節點啟動與配置腳本 134
3.1.1 多節點啟動方法 136
3.1.2 命令行參數配置 137
3.1.3 資源重映射 139
3.1.4 ROS 參數設置 141
3.1.5 Launch 啟動文件嵌套包含 143
3.2 tf:機器人坐標系管理系統 144
3.2.1 機器人中的坐標系 145
3.2.2 tf 命令行操作 146
3.2.3 靜態 tf 廣播(Python) 149
3.2.4 靜態 tf 廣播(C++) 151
3.2.5 動態 tf 廣播(Python) 153
3.2.6 動態 tf 廣播(C++) 155
3.2.7 tf 監聽(Python) 157
3.2.8 tf 監聽(C++) 160
3.2.9 tf 綜合應用示例:海龜跟隨(Python) 163
3.2.10 tf 綜合應用示例:海龜跟隨(C++) 168
3.3 Gazebo:機器人三維物理模擬平臺 172
3.3.1 Gazebo 介紹 172
3.3.2 機器人模擬示例 175
3.3.3 傳感器模擬示例 177
3.4 RViz:數據可視化平臺 178
3.4.1 RViz 介紹 178
3.4.2 數據可視化操作流程 181
3.4.3 應用示例一:tf 數據可視化 182
3.4.4 應用示例二:圖像數據可視化 184
3.4.5 Gazebo 與 RViz 的關系 186
3.5 rosbag:數據記錄與回放 186
3.5.1 記錄數據 187
3.5.2 回放數據 188
3.6 rqt:模塊化可視化工具箱 189
3.6.1 rqt 介紹 189
3.6.2 日誌顯示 190
3.6.3 圖像顯示 191
3.6.4 發布話題/服務數據 192
3.6.5 繪制數據曲線 193
3.6.6 數據包管理 193
3.6.7 節點可視化 194
3.7 ROS 2 開發環境配置 195
3.7.1 版本管理軟件 git 195
3.7.2 集成開發環境 VSCode 196
3.8 本章小結 198

第 2 部分 ROS 2 機器人設計
4 ROS 2 機器人模擬:零成本玩轉機器人 200
4.1 機器人的定義與組成 200
4.2 URDF 機器人建模 203
4.2.1 連桿的描述 204
4.2.2 關節的描述 206
4.2.3 完整機器人模型 208
4.3 創建機器人URDF模型 209
4.3.1 機器人模型功能包 209
4.3.2 機器人模型可視化 209
4.3.3 機器人模型解析 213
4.4 XACRO機器人模型優化 217
4.4.1 XACRO文件常見語法 218
4.4.2 機器人模型優化 219
4.4.3 機器人模型可視化 223
4.5 完善機器人模擬模型 223
4.5.1 完善物理參數 224
4.5.2 添加控制器插件 225
4.6 Gazebo 機器人模擬 226
4.6.1 在Gazebo中加載機器人模型 226
4.6.2 機器人運動控制模擬 230
4.6.3 RGB相機模擬與可視化 232
4.6.4 RGBD相機模擬與可視化 236
4.6.5 激光雷達模擬與可視化 241
4.7 本章小結 244

5 ROS 2 機器人構建:從模擬到實物 245
5.1 機器人從模擬到實物 245
5.1.1 案例剖析 245
5.1.2 機器人設計 247
5.1.3 軟件架構設計 248
5.1.4 電腦端開發環境配置 249
5.1.5 機器人模擬測試 251
5.2 驅動系統設計:讓機器人動得了 251
5.2.1 電機驅動原理:從PWM到H橋 251
5.2.2 電機正反轉控制編程 255
5.3 底盤運動控制:讓機器人動得穩 261
5.3.1 電機編碼器測速原理 261
5.3.2 編碼器測速編程 262
5.3.3 電機閉環控制方法 266
5.3.4 電機閉環控制編程 272
5.4 運動學正逆解:讓機器人動得準 275
5.4.1 機常見器人運動學模型 275
5.4.2 差速運動學原理 281
5.4.3 差速運動學逆解:計算兩個輪子的轉速 283
5.4.4 差速運動學正解:電腦器人整體的速度 284
5.5 運動控制器中還有什麽 284
5.5.1 電源管理:一個輸入多種輸出 285
5.5.2 IMU:測量機器人的姿態變化 287
5.5.3 人機交互:底層狀態清晰明瞭 291
5.6 機器人控制系統:從“肌肉”到“大腦” 292
5.6.1 控制系統的計算平臺 293
5.6.2 控制系統的燒寫與配置 293
5.7 本章小結 300

6 ROS 2 控制與感知:讓機器人動得了、看得見 301
6.1 機器人通信協議開發 301
6.1.1 通信協議設計 302
6.1.2 通信協議示例解析 303
6.1.3 運動控制器端協議開發(下位機) 306
6.1.4 應用處理器端協議開發(上位機) 314
6.2 機器人 ROS 2 底盤驅動開發 318
6.2.1 機器人 ROS 2 底盤驅動 318
6.2.2 速度控制話題的訂閱 321
6.2.3 里程計話題與 tf 的維護 324
6.2.4 機器人狀態的動態監控 333
6.3 機器人運動編程與可視化 336
6.3.1 ROS 2 速度控制消息定義 337
6.3.2 運動編程與可視化 338
6.4 相機驅動與圖像數據 339
6.4.1 常用相機類型 340
6.4.2 相機驅動與可視化 341
6.4.3 ROS 2 圖像消息定義 343
6.4.4 三維相機驅動與可視化 346
6.4.5 ROS 2 點雲消息定義 347
6.5 激光雷達驅動與可視化 348
6.5.1 常見激光雷達類型 348
6.5.2 ROS 2 雷達消息定義 349
6.5.3 激光雷達驅動與數據可視化 351
6.6 IMU 驅動與數據可視化 354
6.6.1 ROS 2 IMU 消息定義 354
6.6.2 IMU 驅動與可視化 354
6.7 本章小結 356

第 3 部分 ROS 2 機器人應用
7 ROS 2 視覺應用:讓機器人看懂世界 358
7.1 機器視覺原理簡介 358
7.2 ROS 2 相機標定 361
7.2.1 安裝相機標定功能包 361
7.2.2 運行相機標定節點 362
7.2.3 相機標定流程 362
7.2.4 相機標定文件的使用 366
7.2.5 雙目相機標定 370
7.3 OpenCV 圖像處理 371
7.3.1 安裝 OpenCV 371
7.3.2 在 ROS 2 中使用 OpenCV 371
7.4 視覺應用一:視覺巡線 374
7.4.1 基本原理與實現框架 374
7.4.2 機器人視覺巡線模擬 376
7.4.3 真實機器人視覺巡線 381
7.5 視覺應用二:二維碼識別 382
7.5.1 二維碼掃描庫——Zbar 382
7.5.2 相機識別二維碼 383
7.5.3 真實機器人相機識別二維碼 387
7.5.4 真實機器人二維碼跟隨 388
7.6 機器學習應用一:深度學習視覺巡線 389
7.6.1 基本原理與實現框架 390
7.6.2 深度學習視覺巡線應用 390
7.6.3 數據採集與模型訓練 392
7.6.4 模型效果評估測試 395
7.6.5 在機器人中部署模型 396
7.7 機器學習應用二:YOLO 目標檢測 399
7.7.1 基本原理與實現框架 399
7.7.2 YOLO 目標檢測部署 401
7.7.3 數據採集與模型訓練 403
7.7.4 機器人目標檢測與跟隨 406
7.8 本章小結 407

8 ROS 2 地圖構建:讓機器人理解環境 408
8.1 SLAM 地圖構建原理 408
8.1.1 SLAM 是什麽 408
8.1.2 SLAM 基本原理 411
8.1.3 SLAM 後端優化 412
8.2 SLAM Toolbox 地圖構建 414
8.2.1 算法原理介紹 415
8.2.2 安裝與配置方法 415
8.2.3 模擬環境中的 SLAM Toolbox 地圖構建 416
8.2.4 真實機器人 SLAM Toolbox 地圖構建 418
8.3 Cartographer:二維地圖構建 420
8.3.1 算法原理介紹 421
8.3.2 安裝與配置方法 . 422
8.3.3 模擬環境中的 Cartographer 地圖構建 423
8.3.4 真實機器人 Cartographer 地圖構建 427
8.4 ORB:視覺地圖構建 430
8.4.1 算法原理介紹 430
8.4.2 安裝與配置方法 . 432
8.4.3 真實機器人 ORB 地圖構建 434
8.5 RTAB:三維地圖構建 435
8.5.1 算法原理介紹 436
8.5.2 安裝與配置方法 436
8.5.3 模擬環境中的RTAB地圖構建 438
8.5.4 真實機器人RTAB地圖構建 441
8.6 本章小結 443

9 ROS 2 自主導航:讓機器人運動自由 444
9.1 機器人自主導航原理 444
9.2 Nav2 自主導航框架 445
9.2.1 系統框架 445
9.2.2 全局導航 447
9.2.3 局部導航 448
9.2.4 定位功能 450
9.3 Nav2安裝與體驗 452
9.3.1 Nav2安裝方法 452
9.3.2 Nav2案例體驗 452
9.4 機器人自主導航模擬 455
9.4.1 Nav2參數配置 455
9.4.2 Launch啟動文件配置 456
9.4.3 機器人自主導航模擬 458
9.5 機器人自主導航實踐 461
9.5.1 導航地圖配置 461
9.5.2 Nav2 參數與Launch啟動文件配置 462
9.5.3 機器人自主導航實踐 464
9.6 機器人自主導航編程 467
9.6.1 功能運行 467
9.6.2 編程方法(C++) 468
9.6.3 編程方法(Python) 469
9.7 機器人自主探索應用 470
9.7.1 Nav2+SLAM Toolbox 自主探索應用 470
9.7.2 Nav2+Cartographer 自主探索應用 473
9.8 本章小結 476