ROS 2 機器人開發 從入門到實作

桑欣

  • 出版商: 機械工業
  • 出版日期: 2024-07-30
  • 售價: $594
  • 貴賓價: 9.5$564
  • 語言: 簡體中文
  • 頁數: 392
  • 裝訂: 平裝
  • ISBN: 7111758064
  • ISBN-13: 9787111758068
  • 相關分類: 機器人製作 Robots
  • 立即出貨

買這商品的人也買了...

商品描述

機器人開發是一項複雜的系統工程,ROS 2為智慧機器人開發提供了強有力的支持,大大提高了機器人軟體開發效率。
本書首先對ROS 2的基礎概念、通訊機制、常用函式庫和工具介紹,帶領讀者入門ROS 2機器人開發;
接著引導讀者完成移動機器人的建模和模擬、建圖和導航、自訂控制器和規劃器等一系列實踐;
接著在真機實戰環節,透過製作一個基於ROS 2的真實機器人,幫助讀者打通模擬與真機之間的壁壘;
最後,本書深入解說了ROS 2進階所使用的相關知識,為讀者進一步在實戰中使用ROS 2進行機器人開發打下夯實基礎。
考慮讀者基礎,書中範例均以C++和Python兩種語言實現,
同時加入了關於C++新功能、Git工具、多執行緒和回呼函數等基礎知識的講解。

目錄大綱

推薦序一
推薦序二
前言
第1章 啟程-讓你的第一個
機器人動起來 1
1.1 ROS落的自我介紹 1
1.1.1 機器人與ROS 2
1.1.2 ROS 2系統架構 3
1.1.3 ROS 2的已發布版本 4
1.1.4 ROS 2機器人開發色 4
1.2 開發環境建置 5
1.2.1 準備所需軟體 6
1.2.2 安裝虛擬機器VirtualBox 6
1.2.3 在虛擬機器中安裝Ubuntu 22.04 7
1.2.4 安裝ROS 2 11
1.3 運行你的第一個機器人 14
1.3.1 啟動海龜模擬器 14
1.3.2 使用鍵盤控制海龜 15
1.3.3 海龜例子的簡單分析 16
1.4 ROS 2基礎之Linux 17
1.4.1 Linux端基礎作 17
1.4.2 在Linux中安裝軟體 20
1.4.3 在Linux中編寫Python程式 23
1.4.4 在Linux中編寫C++程式 26
1.4.5 Linux基礎之環境變數 28
1.5 小結與點評 29
第2章 ROS 2基礎入門-從第一個節點開始 30
2.1 寫出你的第一個節點 30
2.1.1 Python範例 30
2.1.2 C++範例 33
2.2 使用功能組織Python節點 37
2.2.1 在功能中編寫Python節點 37
2.2.2 功能結構分析 40
2.3 使用功能組織C++節點 41
2.3.1 在功能中編寫C++節點 41
2.3.2 功能結構分析 44
2.4 多功能的佳實踐Workspace 44
2.5 ROS 2基礎之程式設計 46
2.5.1 物件導向程式設計 46
2.5.2 用得到的C++新性 53
2.5.3 多執行緒與回呼函數 58
2.6 小結與點評 62
第3章 訂閱與發布—話題通信探索 63
3.1 話題通信介紹 63
3.2 Python話題訂閱與發布 66
3.2.1 透過主題發布小說 66
3.2.2 訂閱小說並合成語音 69
3.3 C++話題訂閱與發布 71
3.3.1 發布速度控制海龜畫圓 71
3.3.2 訂閱Pose實現閉環控制 74
3.4 話題通信佳實踐 77
3.4.1 完成工程架構設計 77
3.4.2 自訂通訊介面 78
3.4.3 系統資訊取得與發布 81
3.4.4 在功能上使用Qt 83
3.4.5 訂閱資料並以Qt顯示 84
3.5 ROS 2基礎之Git入門 87
3.5.1 新建代碼倉庫 87
3.5.2 學會提交代碼 88
3.5.3 學會使用Git忽略文件 90
3.6 小結與點評 90
第4章 服務與參數-深入ROS 2通訊 92
4.1 服務與參數通訊介紹 92
4.1.1 服務通訊介紹 92
4.1.2 基於服務的參數通訊 95
4.2 用Python服務通訊實現人臉偵測 97
4.2.1 自訂服務介面 98
4.2.2 人臉偵測 100
4.2.3 人臉偵測服務實現 102
4.2.4 人臉偵測客戶端的實作 104
4.3 用C++服務通訊做一個巡邏海龜 106
4.3.1 自訂服務介面 107
4.3.2 服務端程式碼實作 107
4.3.3 客戶端程式碼實作 109
4.4 在Python節點中使用參數 111
4.4.1 參數宣告與設定 112
4.4.2 訂閱參數更新 113
4.4.3 修改其他節點的參數 114
4.5 在C++節點中使用參數 116
4.5.1 參數聲明與設定 117
4.5.2 接收參數事件 117
4.5.3 修改其他節點的參數 119
4.6 使用launch啟動腳本 121
4.6.1 使用launch啟動多個節點 121
4.6.2 使用launch傳遞參數 123
4.6.3 launch使用進 124
4.7 小結與點評 126
第5章 ROS 2常用開發工具 127
5.1 座標變換工具介紹 127
5.1.1 透過命令列使用TF 128
5.1.2 對TF 原理的簡單探究 131
5.2 Python中的手眼座標變換 133
5.2.1 透過Python發布靜態TF 133
5.2.2 透過Python發布動態TF 136
5.2.3 透過Python查詢TF關係 137
5.3 C++中的地圖座標系變換 139
5.3.1 透過C++發布靜態TF 139
5.3.2 透過C++發布動態TF 141
5.3.3 透過C++查詢TF關係 143
5.4 常用視覺化工具rqt與RViz 145
5.4.1 GUI框架rqt 145
5.4.2 資料視覺化工具RViz 147
5.5 資料記錄工具ros2 bag 149
5.6 ROS 2基礎之Git進 153
5.6.1 查看修改內容 153
5.6.2 學會撤銷代號 154
5.6.3 進掌握Git分支 156
5.7 小結與點評 158
第6章 建模與-創建自己的機器人 160
6.1 機器人建模與概述 160
6.1.1 移動機器人的結構介紹 160
6.1.2 常用機器人平台 161
6.2 使用URDF創建機器人 162
6.2.1 幫機器人創造一個身體 162
6.2.2 在RViz中顯示機器人 165
6.2.3 使用Xacro簡化URDF 170
6.2.4 創建機器人及感測器件 173
6.2.5 完善機器人執行元件 177
6.2.6 貼合地面,新增虛擬件 179
6.3 加入物理屬性讓機器人更真實 180
6.3.1 為機器人件添加碰撞屬性 180
6.3.2 為機器人件添加質量與慣性 181
6.4 在Gazebo中完成機器人 183
6.4.1 安裝與使用Gazebo建造184
6.4.2 在Gazebo中載入機器人模型 189
6.4.3 使用Gazebo標籤擴充URDF 191
6.4.4 使用兩輪差速件控制機器人 193
6.4.5 雷射雷達感測器 197
6.4.6 慣性測量感測器 200
6.4.7 深度相機感光元件 203
6.5 使用ros2_control驅動機器人 205
6.5.1 ros2_control介紹與安裝 205
6.5.2 使用Gazebo接入ros2_control 209
6.5.3 使用關節狀態發布控制器 213
6.5.4 使用力控制器控制輪子 216
6.5.5 使用兩輪差速控制器控制機器人 218
6.6 小結與點評 221
第7章 自航-讓機器人自己動起來 222
7.1 機器人導航介紹 222
7.1.1 同步定位與地圖建構 222
7.1.2 機器人導航 224
7.2 使用slam_toolbox完成建圖 225
7.2.1 建構第一張導航地圖 225
7.2.2 將地圖存為文件 227
7.3 機器人導航框架Navigation 2 229
7.3.1 Navigation 2介紹與安裝 229
7.3.2 配置Navigation 2參數 231
7.3.3 編寫launch並啟動導航 232
7.3.4 進行單點與路點導航 234
7.3.5 導航過程中進行動態避障 236
7.3.6 化導航速度與膨脹半徑 237
7.3.7 化機器人到點度 239
7.4 導航應用開發指南 240
7.4.1 使用話題初始化機器人位姿 240
7.4.2 使用TF取得機器人即時位置 243
7.4.3 呼叫介面進行單點導航 244
7.4.4 使用介面完成路點導覽 250
7.5 導航佳實踐之做一個自動巡檢機器人 253
7.5.1 完成機器人系統架構設計 253
7.5.2 編寫巡檢控制節點 253
7.5.3 新增語音播報功能 258
7.5.4 訂閱影像並記錄 261
7.6 ROS 2基礎之Git倉庫託管 262
7.6.1 新增自描述檔 262
7.6.2 將程式碼託管在Gitee 265
7.6.3 將程式碼託管在GitHub 266
7.7 小結與點評 270
第8章 使用自己的規劃器和控制器導航 271
8.1 掌握ROS 2件機制 271
8.1.1 pluginlib介紹與安裝 271
8.1.2 定義件抽象類別 272
8.1.3 寫成並產生第一個件 272
8.1.4 編寫件測試程式 275
8.2 自訂導航規劃器 276
8.2.1 自訂規劃器介紹 276
8.2.2 搭建規劃器件框架 279
8.2.3 實作自訂規劃演算法 283
8.2.4 配置導航參數並測試 284
8.3 自訂導覽控制器 286
8.3.1 自訂控制器介紹 286
8.3.2 搭建控制器件框架 287
8.3.3 實作自訂控制演算法 292
8.3.4 配置導航參數並測試 294
8.4 小結與點評 295
第9章 搭建一個實體移動機器人 296
9.1 移動機器人系統設計 296
9.1.1 機器人感測器 296
9.1.2 機器人執行器 297
9.1.3 機器人決策系統 298
9.2 單晶片開發基礎 298
9.2.1 開發平台介紹與安裝 298
9.2.2 第一個HelloWorld工程 301
9.2.3 使用程式碼點亮LED燈 303
9.2.4 使用聲波測量距離 304
9.2.5 使用開源函式庫驅動IMU 305
9.3 機器人控制系統的實現 306
9.3.1 使用開源函式庫驅動多路電動機 307
9.3.2 電動機速度測量與轉換 308
9.3.3 使用PID控制輪子轉速 311
9.3.4 運動學正逆解的實現 315
9.3.5 機器人里程計計算 320
9.4 使用micro-ROS接入ROS 2 322
9.4.1 第一個節點 323
9.4.2 訂閱話題控制機器人 327
9.4.3 發表機器人里程計話題 329
9.5 移動機器人建圖與導航實現 333
9.5.1 驅動並顯示雷達點雲 334
9.5.2 移動機器人的座標系框架介紹 337
9.5.3 準備機器人URDF 338
9.5.4 發布里程計TF 341
9.5.5 完成機器人建圖並存地圖 343
9.5.6 完成機器人導航 347
9.6 小結與點評 348
第10章 ROS 2使用進 349
10.1 訊息服務品質之QoS 349
10.1.1 QoS策略介紹 349
10.1.2 QoS的兼容性 352
10.1.3 Python QoS相容性測試 353
10.1.4 C++ QoS相容性測試 354
10.2 執行器與回呼組 356
10.2.1 執行器與回調組介紹 356
10.2.2 在Python中使用回呼組 358
10.2.3 在C++中使用回呼組 361
10.3 生命週期節點 364
10.3.1 生命週期節點介紹 364
10.3.2 在Python中編寫生命週期節點 367
10.3.3 在C++中編寫生命週期節點 369
10.4 同一進程組織多個節點 371
10.4.1 使用執行器組織多個節點 371
10.4.2 使用元件運行組合節點 375
10.4.3 寫自己的元件 378
10.5 使用訊息過濾器同步資料 380
10.5.1 訊息過濾器介紹 380
10.5.2 在Python中同步感測器資料 380
10.5.3 在C++中同步感測器資料 381
10.6 DDS中介軟體進 384
10.6.1 使用不同的DDS進行通訊 384
10.6.2 設定區域網路通訊 386
10.6.3 調整DDS配置 386
10.6.4 使用DDS共享記憶體 388
10.7 小結與點評 390