精通ROS機器人編程(原書第3版) Mastering ROS for Robotics Programming : Best practices and troubleshooting solutions when working with ROS, 3/e

Lentin Joseph,Jonathan Cacace 譯 吳中紅//石章松//程錦房//劉彩雲

商品描述

本書提供了實用且易於理解的範例,對ROS機器人程式設計的高階概念進行了全面的介紹。
本書首先介紹用ROS進行機器人程式設計所需的基本概念和ROS框架,
討論如何用運動規劃庫和ROS導航棧對機器人進行模擬和交互,也討論了ROS插件、控制器和節點、
各種ROS介面(如何把I/O開發板、感測器和執行器等與ROS連接起來),以及如何用ROS和ROS-Industrial對複雜機器人進行模擬。
最後,本書介紹了ROS的故障排除和最佳實務。

目錄大綱

目 錄  Contents
前言
作者簡介
審校者簡介
第一部 ROS程式設計基本技能
第1章 ROS簡介 2
1.1 為什麼選擇ROS 2
1.2 理解ROS檔案系統層級 3
1.2.1 ROS功能包 4
1.2.2 ROS元功能包 5
1.2.3 ROS消息 6
1.2.4 ROS服務 7
1.3 理解ROS計算圖等級 8
1.3.1 ROS節點 9
1.3.2 ROS資訊 11
1.3.3 ROS主題 11
1.3.4 ROS服務 12
1.3.5 ROS bag檔 12
1.3.6 ROS節點管理器 13
1.3.7 使用ROS參數 14
1.4 ROS社區級別 15
1.5 準備工作 15
1.5.1 ROS發行版 15
1.5.2 運行ROS節點管理器和ROS參數伺服器 16
1.5.3 檢查roscore指令的輸出 18
1.6 總結 19
1.7 問題 19
第2章 ROS程式設計入門 20
2.1 創建ROS功能包 20
2.1.1 使用ROS主題 22
2.1.2 創建ROS節點 22
2.1.3 編譯節點 25
2.2 新增自訂的.msg檔案和.srv檔案 26
2.3 使用ROS 服務 29
2.3.1 使用ROS actionlib 33
2.3.2 編譯ROS動作伺服器與客戶端 36
2.4 建立啟動檔 38
2.5 主題、服務與actionlib的應用 40
2.6 總結 40
2.7 問題 41
第二部分 ROS機器人仿真
第3章 使用ROS進行3D建模 44
3.1 用於機器人建模的ROS軟體包 44
3.2 使用URDF理解機器人建模 45
3.3 為機器人描述創建ROS軟體包 47
3.4 創建我們的第一個URDF模型 48
3.5 解析URDF檔 49
3.6 在RViz中可視化3D機器人模型 51
3.7 為URDF模型新增物理屬性與碰撞屬性 53
3.8 使用xacro理解機器人建模 54
3.8.1 使用屬性 55
3.8.2 使用數學表達式 55
3.8.3 使用宏 55
3.9 將xacro轉換為URDF 56
3.10 為7-DOF機械手臂創建機器人描述 56
3.11 解析7-DOF機械手臂的xacro模型 58
3.11.1 使用常數 58
3.11.2 使用宏 58
3.11.3 包含其他xacro檔 59
3.11.4 在連桿中使用網格模型 59
3.11.5 使用機器人夾爪 60
3.11.6 在RViz中查看7-DOF機械手臂 61
3.12 為差速驅動機器人創建機器人模型 63
3.13 總結 66
3.14 問題 67
第4章 使用ROS和Gazebo進行機器人模擬 68
4.1 使用Gazebo 和ROS仿真機械手臂 68
4.2 為Gazebo建立機械手臂模擬模型 69
4.2.1 為Gazebo機器人模型添加顏色與紋理 70
4.2.2 加入transmission標籤來驅動模型 71
4.3 新增gazebo_ros_control插件 71
4.4 仿真裝有Xtion Pro的機械手臂 73
4.5 在Gazebo中使用ROS控制器移動機器人關節 76
4.5.1 理解ros_control軟體包 76
4.5.2 不同類型的ROS控制器與硬體介面 76
4.5.3 ROS控制器如何與Gazebo互動 77
4.5.4 將關節狀態控制器和關節位置控制器連接到機械手臂 78
4.5.5 在Gazebo中啟動ROS控制器 79
4.5.6 移動機器人關節 81
4.6 在Gazebo中模擬差速輪式機器人 82
4.6.1 向Gazebo中添加雷射雷達 83
4.6.2 在Gazebo中控制機器人移動 85
4.6.3 為啟動文件新增關節狀態發布者 86
4.7 新增ROS遙控節點 86
4.8 總結 88
4.9 問題 88
第5章 使用ROS、CoppeliaSim和Webots進行機器人模擬 89
5.1 使用ROS配置CoppeliaSim 89
5.1.1 理解RosInterface插件 92
5.1.2 處理ROS訊息 95
5.2 使用CoppeliaSim和ROS模擬機械手臂 96
5.3 使用ROS設定Webots 99
5.3.1 Webots模擬器簡介 100
5.3.2 使用Webots模擬移動機器人 101
5.4 寫第一個控制器 103
5.5 使用webots_ros編寫遙控節點 107
5.6 總結 110
5.7 問題 111
第6章 使用ROS MoveIt!與Navigation棧 112
6.1 MoveIt!架構 113
6.1.1 move_group節點 113
6.1.2 基於MoveIt!的運動規劃 114
6.1.3 運動規劃請求適配器 115
6.1.4 MoveIt!規劃場景 116
6.1.5 MoveIt!運動學處理 117
6.1.6 MoveIt!碰撞檢測 117
6.2 基於設定助手產生MoveIt!配置包 117
6.3 在RViz中使用MoveIt!配置套件進行機器人運動規劃 123
6.3.1 使用RViz的運動規劃插件 124
6.3.2 MoveIt!配置套件與Gazebo互動 127
6.4 理解ROS導覽棧 132
6.4.1 導航棧的硬體需求 132
6.4.2 使用導航軟體包 133
6.4.3 使用導覽棧 134
6.5 使用SLAM建構地圖 135
6.5.1 為gmapping建立啟動檔 136
6.5.2 在差速驅動機器人上運行SLAM 137
6.5.3 基於amcl和靜態地圖實現自主導航 140
6.5.4 建立amcl啟動檔 140
6.6 總結 143
6.7 問題 143
第7章 探索ROS MoveIt!的進階功能 144
7.1 使用move_group的C 介面進行運動規劃 144
7.1.1 使用MoveIt! C API規劃隨機路徑 144
7.1.2 使用MoveIt! C API規劃自訂路徑 145
7.1.3 使用MoveIt!進行機械手臂的碰撞檢測 147
7.2 使用MoveIt!和Gazebo進行感知 153
7.3 使用MoveIt!操作物件 158
7.3.1 使用MoveIt!執行拾取與放置任務 158
7.3.2 在Gazebo和真實的機器人中應用抓取和放置動作 162
7.4 了解用於機器人硬體介面的DYNAMIXEL ROS伺服控制器 162
7.4.1 DYNAMIXEL伺服舵機 163
7.4.2 DYNAMIXEL-ROS介面 164
7.5 7-DOF機械手臂與ROS MoveIt! 164
7.5.1 為COOL機械手臂創建一個控制器軟體包 165
7.5.2 COOL機械手臂的MoveIt!配置 168
7.6 總結 170
7.7 問題 170
第8章 ROS在空中機器人上的應用 171
8.1 使用空中機器人 171
8.1.1 UAV五金 172
8.1.2 Pixhawk自動駕駛儀 172
8.2 使用PX4飛行控制棧 173
8.2.1 PX4韌體架構 176
8.2.2 PX4 SITL 178
8.3 PC/自動駕駛儀通訊 179
8.4 編寫ROS-PX4應用程式 181
8.4.1 寫軌跡流線 186
8.4.2 PX4的外部位姿估計 187
8.5 使用RotorS模擬框架 188
8.5.1 安裝RotorS  188
8.5.2 RotorS軟體包 190
8.5.3 創建一種新的無人機模型 192
8.5.4 與RotorS馬達模型交互 199
8.6 總結 200
8.7 問題 200
第三部分 ROS機器人硬體原型開發
第9章 將I/O板感測器和執行器連接到ROS 202
9.1 理解Arduino-ROS介面 202
9.2 Arduino-ROS介面 203
9.2.1 理解ROS中的rosserial包 203
9.2.2 理解Arduino中的ROS節點API 207
9.2.3 ROS-Arduino發布者與訂閱者範例 210
9.2.4 ROS-Arduino範例:用按鈕閃爍LED 213
9.2.5 ROS-Arduino範例:加速度計ADXL 335 215
9.2.6 ROS-Arduino範例:超音波距離感測器 216
9.2.7 ROS-Arduino範例:里程計資料發佈器 220
9.3 將非Arduino板連接到ROS 222
9.3.1 設定Odroid-C4、樹莓派4和Jetson Nano用於安裝ROS 222
9.3.2 在樹莓派4上使用ROS閃爍LED 228
9.3.3 在樹莓派2上使用ROS透過按鈕閃爍LED 230
9.3.4 在樹莓派4上運行範例 233
9.4 將DYNAMIXEL執行器連接到ROS 234
9.5 總結 235
9.6 問題 235
第10章 使用ROS、OpenCV和PCL程式視覺感測器 236
10.1 軟硬體需求 236
10.2 理解ROS-OpenCV介面軟體包 236
10.3 理解ROS-PCL介面軟體包 237
10.4 連接ROS與USB網路攝影機 239
10.5 校準ROS攝影機 241
10.6 將Kinect和Asus Xtion Pro與ROS連接 249
10.7 連接Intel RealSense攝影機與ROS 251
10.8 連接Hokuyo雷射雷達與ROS 255
10.9 使用點雲資料 257
10.9.1 如何發佈點雲 257
10.9.2 如何訂閱與處理點雲 259
10.9.3 從PCD檔案讀取和發佈點雲 262
10.10 總結 264
10.11 問題 265
第11章 在ROS中建構與連接差速驅動移動機器人硬體 266
11.1 技術要求 266
11.1.1 軟體要求 267
11.1.2 網路設定 268
11.1.3 硬體需求 268
11.2 一款DIY自主移動機器人—Remo簡介 268
11.2.1 Remo硬體組件 269
11.2.2 ROS Navigation Stack的軟體需求  271
11.3 為差速驅動機器人開發底層控制器與ROS Control高階硬體介面 272
11.3.1 為Remo實現底層基本控制器  274
11.3.2 用於差速驅動機器人的ROS Control高階硬體介面 278
11.3.3 Remo機器人的ROS節點與主題概述 280
11.4 配置和使用Navigation Stack 283
11.4.1 配置gmapping節點並建立地圖 284
11.4.2 使用gmapping節點  284
11.4.3 配置move_base節點 285
11.4.4 配置AMCL節點 286
11.4.5 AMCL規劃 287
11.4.6 在模擬環境中使​​用Remo機器人 289
11.5 總結 291
11.6 問題 291
第四部分 高階ROS編程
第12章 使用pluginlib、nodelet和Gazebo插件 294
12.1 理解pluginlib 294
12.2 理解ROS小節點 300
12.3 理解並創建Gazebo插件 306
12.4 總結 309
12.5 問題 310
第13章 編寫ROS控制器與視覺化插件 311
13.1 理解ros_control包 311
13.2 在ROS中編寫一個基本的關節控制器 314
13.2.1 創建控制器包 314
13.2.2 建立控制器頭檔 315
13.2.3 建立控制器原始檔 315
13.2.4 控制器原始檔的詳細說明 317
13.2.5 建立外掛程式描述檔 318
13.2.6 更新package.xml 318
13.2.7 更新CMakeLists.txt 318
13.2.8 建置控制器 319
13.2.9 編寫控制器設定檔 319
13.2.10 編寫控制器的啟動檔 319
13.2.11 在Gazebo中運作控制器與7-DOF機械手臂 320
13.3 了解RViz工具及其插件 322
13.3.1 Displays面板 323
13.3.2 RViz工具列 323
13.3.3 Views面板 323
13.3.4 Time面板 323
13.3.5 可停靠面板 324
13.4 為遠端操作編寫RViz插件 324
13.5 總結 330
13.6 問題 330
第14章 在MATLAB和Simulink中使用ROS 331
14.1 開始使用MATLAB 331
14.2 開始使用ROS Toolbox和MATLAB 332
14.3 利用MATLAB和Gazebo開發機器人應用程式 338
14.4 開始使用ROS和Simulink 341
14.4.1 在Simulink中建立一個波訊號積分器 342
14.4.2 在Simulink中發布ROS消息 344
14.4.3 在Simulink中訂閱ROS主題 346
14.5 在Simulink中發展一個簡單的控制系統 348
14.6 總結 351
14.7 問題 351
第15章 ROS在工業機器人的應用 352
15.1 理解ROS-Industrial包 352
15.2 ROS-Industrial的目標 352
15.3 ROS-Industrial簡史 353
15.4 安裝ROS-Industrial包 353
15.5 為工業機器人創建URDF 355
15.6 為工業機器人創建MoveIt!配置 356
15.7 更新MoveIt!的設定檔 359
15.8 為UR機器人的機械手臂安裝
ROS-Industrial軟體包 361
15.9 為UR機器人安裝ROS介面 362
15.10 理解UR機械手臂的MoveIt!配置 363
15.11 UR硬體和ROS-I 365
15.12 使用MoveIt!配置ABB機器人 366
15.13 了解ROS-Industrial機器人支援包 369
15.14 了解ROS-Industrial機器人客戶端包 370
15.15 設計工業機器人客戶端節點 371
15.16 了解ROS-Industrial機器人驅動程式包 372
15.17 理解MoveIt! IKFast插件 374
15.18 為ABB IRB 6640機器人創建MoveIt! IKFast插件 374
15.19 OpenRave和IKFast模組 375
15.19.1 MoveIt! IKFast 375
15.19.2 安裝MoveIt! IKFast包 375
15.19.3 在Ubuntu 20.04上安裝OpenRave 375
15.20 創建使用OpenRave的機器人的COLLADA檔案 376
15.21 為IRB 6640機器人產生IKFast CPP檔案 378
15.22 創建MoveIt! IKFast插件 379
15.23 總結 380
15.24 問題 380
第16章 ROS的故障排除與最佳實務 381
16.1 為ROS設定Visual Studio Code IDE開發環境 381
16.1.1 安裝/卸載Visual Studio Code 382
16.1.2 開始使用Visual Studio Code 382
16.1.3 安裝新的Visual Studio Code擴充 383
16.1.4 從Visual Studio Code的 ROS擴充開始 384
16.1.5 檢查與建造ROS工作空間 386
16.1.6 使用Visual Studio Code管理ROS套件 387
16.1.7 可視化URDF檔案的預覽 387
16.2 ROS的最佳實務 388
16.3 ROS包的最佳程式設計實務 391
16.4 ROS中的重要故障排除提示 392
16.5 總結 394
16.6 問題 395