機器人操作系統 ROS 應用實踐

彭剛 等

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

商品描述

越來越多的機器人正走向人們的生活及生產環境,機器人操作系統(Robot Operating System,ROS)作為一種重要的軟件開發框架,提高了機器人系統的開發與部署效率,在分工協作、軟件維護和系統擴展中具有重要意義。本書以任務為驅動,按照工作導向的思路展開教學與實踐學習,通過“學中做、做中學”的方式,循序漸進地介紹機器人操作系統應用開發方法,通過構思、設計、實施和運行多個環節,構建基於傳感器的智能機器人系統。本書內容全面,包括機器人系統組成、將機器人連接到ROS、建立機器人系統模型、移動機器人激光SLAM、移動機器人自主導航、基於多傳感器的SLAM、機械臂運動控制、電腦視覺、基於視覺的機械臂抓取、移動機器人視覺SLAM、ROS 2.0介紹與編程基礎等內容,有利於讀者掌握ROS原理與應用實踐開發方法,培養軟件全棧開發能力。 本書通俗易懂、內容豐富,是作者團隊多年機器人科研項目和產品開發的積累,書中提供了大量的實例代碼供讀者學習研究。 本書可作為高等院校自動化、機器人工程、人工智能、機電一體化等相關專業的“機器人系統原理”“機器人操作系統”“機器人系統應用開發”課程的教材和教學參考書,也可以作為工程實訓與學科競賽的實踐教材和實驗配套教材,同時還可供廣大希望從事機器人系統開發和設計的工程技術人員、教師或者個人參考。

目錄大綱

目 錄

第1章 機器人系統組成 1
1.1 移動底盤和機械臂 1
1.1.1 移動底盤 1
1.1.2 機械臂 4
1.2 機器人系統的硬件組成 6
1.2.1 控制系統 6
1.2.2 驅動系統 7
1.2.3 執行機構 7
1.2.4 傳感系統 8
1.3 傳感器說明與功能介紹 8
1.3.1 編碼器 8
1.3.2 慣性測量單元 9
1.3.3 激光雷達 10
1.3.4 相機 13
1.3.5 紅外傳感器 14
1.3.6 超聲波傳感器 14
1.3.7 毫米波雷達 15
1.3.8 碰撞傳感器 16
1.3.9 多傳感器融合 16
1.4 機器人系統的軟件組成 17
1.4.1 操作系統 17
1.4.2 應用軟件 17
任務 遠程桌面連接:使用Spark機器人平臺 17
1.5 本章小結 20
擴展閱讀 20
練習題 20
第2章 將機器人連接到ROS 22
2.1 初識ROS 22
2.1.1 ROS起源 22
2.1.2 ROS架構 22
2.1.3 ROS特點 24
2.2 如何安裝ROS 24
2.2.1 操作系統和ROS版本 24
2.2.2 Linux基礎簡介 25
2.2.3 ROS安裝 29
2.2.4 設置環境變量 30
2.2.5 驗證安裝 31
2.3 ROS文件系統與通信機制 31
2.3.1 文件系統 31
2.3.2 ROS通信及其工作機制 33
2.4 編寫第一個ROS程序 38
2.4.1 ROS功能包依賴管理 38
2.4.2 ROS工作空間 39
2.4.3 功能包創建與編譯 42
任務1 運行一個簡單ROS程序 48
2.4.4 ROS 節點的編寫規則 50
2.4.5 運行節點的兩種途徑 52
2.4.6 launch文件 53
2.4.7 坐標變換基礎 54
任務2 讓小海龜跑起來 58
2.5 ROS常用組件 59
2.5.1 可視化工具 60
2.5.2 rosbag數據記錄與回放 62
2.5.3 ROS調試工具箱 64
2.6 Spark底盤控制 66
任務3 讓Spark機器人運動起來 67
2.7 ROS外接設備介紹 69
2.7.1 遙控手柄 69
2.7.2 激光雷達 72
2.7.3 視覺傳感器 74
2.7.4 慣性測量單元與定位模塊 76
2.7.5 伺服電機 78
2.7.6 嵌入式控制器 79
2.8 本章小結 80
擴展閱讀 80
練習題 80
第3章 建立機器人系統模型 81
3.1 移動底盤運動模型與控制 81
3.1.1 移動機器人運動模型與位置表示 81
3.1.2 URDF建模 85
3.1.3 機器人狀態發布 97
3.1.4 移動底盤運動控制 99
任務1 控制ROS模擬機器人與真實機器人同步運動 103
3.2 基於激光雷達的環境感知 105
3.2.1 rplidar功能包 105
3.2.2 hector_mapping介紹 107
3.2.3 hector_mapping的使用 108
任務2 小車運動時的點雲數據 110
3.3 本章小結 111
參考文獻 111
擴展閱讀 111
練習題 112
第4章 移動機器人激光SLAM 113
4.1 SLAM基本原理 113
4.1.1 SLAM概述 113
4.1.2 移動機器人坐標系 114
任務1 機器人坐標變換 115
4.1.3 ROS導航與定位過程 119
4.1.4 環境建圖與位姿估計 120
4.2 Gmapping算法 121
4.2.1 原理分析 122
4.2.2 實施流程 122
任務2 基於Gmapping算法的激光2D建圖 123
4.3 Hector SLAM算法 125
4.3.1 原理分析 125
任務3 基於Hector SLAM算法的激光2D建圖 127
4.3.2 建圖結果 128
4.4 本章小結 129
參考文獻 129
擴展閱讀 130
練習題 130
第5章 移動機器人自主導航 131
5.1 基於地圖的定位 131
5.1.1 蒙特卡羅定位 131
5.1.2 自適應蒙特卡羅定位 133
任務1 移動機器人定位 137
5.2 基於地圖的自主導航 139
5.2.1 導航框架 139
5.2.2 全局路徑規劃 140
5.2.3 局部路徑規劃 145
5.2.4 導航功能包 151
任務2 移動機器人導航 157
5.3 本章小結 159
參考文獻 159
擴展閱讀 160
練習題 160
第6章 基於多傳感器的SLAM 161
6.1 慣性測量單元模型與標定 161
6.1.1 慣性測量單元測量模型 162
6.1.2 系統誤差的預標定 162
6.1.3 隨機誤差的預標定 164
6.2 激光雷達與IMU的外參標定 165
6.3 差速輪式移動機器人的運動里程計模型 167
6.4 基於卡爾曼濾波的多傳感器融合 169
任務1 基於濾波器的SLAM算法 170
6.5 Cartographer算法 172
6.5.1 原理分析 173
任務2 基於圖優化的SLAM 174
6.5.2 建圖結果 178
6.6 本章小結 179
參考文獻 179
擴展閱讀 180
練習題 180
第7章 機械臂運動控制 181
7.1 機械臂建模 181
7.1.1 ROS中常用的機械臂 181
7.1.2 機械臂URDF模型 182
7.1.3 機械臂URDF建模 184
7.2 機械臂控制——MoveIt 188
7.2.1 MoveIt簡介 188
7.2.2 Setup Assistant配置機械臂 188
7.2.3 MoveIt可視化控制 193
7.2.4 機械臂運動學 194
任務1 讓機械臂動起來——MoveIt與Gazebo模擬 198
7.3 MoveIt編程——機械臂運動規劃 202
7.3.1 關節空間運動規劃 202
7.3.2 工作空間運動規劃 204
7.3.3 笛卡爾空間運動規劃 207
7.3.4 機械臂碰撞檢測 211
任務2 數字孿生——真實機械臂與模擬機械臂同步運動 214
7.4 本章小結 216
參考文獻 216
擴展閱讀 217
練習題 217
第8章 電腦視覺 218
8.1 認識OpenCV 218
8.1.1 安裝OpenCV 218
8.1.2 使用OpenCV 218
8.2 單目視覺傳感器的使用 220
任務1 圖像採集 220
8.3 相機標定 221
8.3.1 針孔相機模型 222
8.3.2 畸變模型 224
8.3.3 相機標定的原理和過程 225
8.3.4 相機標定功能包 227
8.4 圖像變換與處理 230
8.4.1 透視變換 230
8.4.2 圖像匹配 233
8.4.3 圖像拼接 234
8.5 常見的圖像特徵點檢測算法 235
8.5.1 SIFT算法 235
8.5.2 SURF算法 239
8.5.3 FAST算法 243
8.5.4 ORB算法 245
8.6 目標識別 247
任務2 基於單目相機的物體識別 247
8.7 本章小結 252
參考文獻 252
擴展閱讀 253
練習題 253
第9章 基於視覺的機械臂抓取 254
9.1 深度相機 254
9.1.1 雙目相機和RGB-D深度相機 254
9.1.2 雙目相機模型和RGB-D深度相機模型 257
任務1 深度相機驅動安裝 259
9.2 基於深度學習的物體識別 260
9.2.1 基於捲積神經網絡的物體識別 260
9.2.2 常見深度學習框架 265
任務2 基於捲積神經網絡的物體識別實現 266
9.3 手眼標定原理和過程 267
任務3 機器人手眼視覺外參標定 270
9.4 基於視覺的機械臂抓取實現 273
9.4.1 目標物體定位 274
9.4.2 姿態估計 277
9.4.3 抓取姿態檢測 280
9.4.4 運動規劃 282
任務4 完成基於視覺的機械臂抓取 284
任務5 控制機械臂指向物體 286
9.5 本章小結 289
參考文獻 289
擴展閱讀 290
練習題 290
第10章 移動機器人視覺SLAM 291
10.1 視覺SLAM框架 291
10.1.1 視覺里程計 291
10.1.2 非線性優化 292
10.1.3 回環檢測 293
10.1.4 建圖 293
10.2 ORB-SLAM算法 295
任務1 在單目數據集上運行ORB-SLAM2 298
10.3 稠密建圖 301
10.3.1 空間地圖的表示方式 303
10.3.2 雙目相機幾何模型與標定 307
10.3.3 稠密建圖 311
任務2 基於深度相機的場景建圖 313
10.4 其他視覺SLAM算法或框架 314
10.4.1 LSD-SLAM 316
10.4.2 SVO 318
10.4.3 OpenVSLAM 318
10.4.4 VINS-Fusion 320
10.5 本章小結 322
參考文獻 322
擴展閱讀 323
練習題 324
第11章 ROS 2.0介紹與編程基礎 325
11.1 ROS 2.0設計思想 325
11.1.1 ROS 1.0問題總結 325
11.1.2 ROS 2.0發展現狀 326
11.1.3 ROS 2.0通信模型 326
11.2 ROS 2.0安裝與使用 328
11.2.1 ROS 2.0安裝 328
11.2.2 運行小海龜案例 329
11.2.3 ROS 2.0命令行 331
11.3 ROS 2.0編程基礎 332
11.3.1 ROS 2.0編程方法 332
11.3.2 ROS 2.0與ROS 1.0編程區別 338
11.4 本章小結 339
擴展閱讀 339
練習題 339