求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

ROS2機器人開發從入門到實踐檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋

來自 孔夫子網 的圖片

ROS2機器人開發從入門到實踐》,出版社: 機械工業出版社,ISBN:9787111758068。

機械工業出版社成立於1950年,是建國後國家設立的第一家科技出版社,前身為科學技術出版社,1952年更名為機械工業出版社[1]。機械工業出版社(以下簡稱機工社)由機械工業信息研究院作為主辦單位,目前隸屬於國務院國資委[2]

內容簡介

機器人開發是一項複雜的系統工程,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

參考文獻