前言
**部分 基礎知識
第1章 機器人概述 2
1.1 機器人的定義和分類 2
1.1.1 機器人的定義 2
1.1.2 服務機器人的分類 3
1.2 現代機器人的發展歷程 3
1.2.1 現代機器人研究初期 3
1.2.2 20世紀70年代 4
1.2.3 20世紀80年代 5
1.2.4 20世紀90年代 7
1.2.5 21世紀 9
1.3 機器人的組成 15
1.3.1 機器人的執行機構 15
1.3.2 驅動裝置 16
1.3.3 傳感裝置 16
1.3.4 控制系統 16
1.3.5 智能系統 16
1.3.6 智能人機接口系統 17
1.4 機器人的關鍵技術 17
1.4.1 自主移動技術 17
1.4.2 感知技術 18
1.4.3 智能決策和控制技術 18
1.4.4 通信技術 18
1.5 機器人的發展趨勢 18
1.5.1 人機交互層次化、人性化 18
1.5.2 與環境的交互智能化 19
1.5.3 資源利用網絡化 19
1.5.4 設計與生產標準化、模塊化、體系化 19
習題 19
參考文獻 19
第2章 ROS入門 22
2.1 ROS簡介 22
2.1.1 為什么使用ROS 22
2.1.2 什么是ROS 23
2.1.3 ROS與計算機操作系統的區別 23
2.1.4 ROS的主要特點 24
2.2 ROS的安裝與卸載 25
2.2.1 ROS的版本 25
2.2.2 安裝、配置ROS Indigo 25
2.2.3 安裝、配置ROS Melodic 28
2.2.4 卸載ROS 29
2.3 進一步學習的資源 29
習題 30
參考文獻 30
第3章 ROS框架和使用基礎 31
3.1 ROS框架 31
3.1.1 文件系統級 31
3.1.2 計算圖級 32
3.1.3 社區級 33
3.2 ROS使用基礎 34
3.2.1 catkin概述 34
3.2.2 工作空間及其創建方法 34
3.2.3 創建ROS工程包 37
3.2.4 編譯ROS工程包 37
3.2.5 創建ROS節點 37
3.2.6 編譯運行ROS節點 38
3.2.7 roslaunch的使用 39
3.2.8 創建ROS消息和服務 41
3.2.9 編寫簡單的消息發布器和訂閱器(C++語言實現) 44
3.2.10 編寫簡單的消息發布器和訂閱器(Python語言實現) 47
3.2.11 測試消息發布器和訂閱器 48
3.2.12 編寫簡單的Server和Client(C++語言實現) 49
3.2.13 編寫簡單的Server和Client(Python語言實現) 51
3.2.14 測試簡單的Server和Client 53
習題 54
參考文獻 54
第4章 ROS的調試 55
4.1 ROS調試的常用命令 55
4.2 ROS調試的常用工具 56
4.2.1 使用rqt_console在運行時修改調試級別 57
4.2.2 使用roswtf檢測配置中的潛在問題 59
4.2.3 使用rqt_graph顯示節點狀態圖 59
4.2.4 使用rqt_plot繪制標量數據圖 60
4.2.5 使用image_view顯示二維圖像 61
4.2.6 使用rqt_rviz(rviz)實現3D數據可視化 63
4.2.7 使用rosbag和rqt_bag記錄與回放數據 64
4.2.8 rqt插件與rx應用 65
4.3 ROS基本命令總結 66
4.3.1 創建 ROS 工作空間 66
4.3.2 Package的相關操作 66
4.3.3 節點的相關操作 67
4.3.4 話題的相關操作 67
4.3.5 服務的相關操作 68
4.3.6 rosparam的相關操作 69
4.3.7 bag的相關操作 69
4.3.8 rosmsg的相關操作 70
4.3.9 rossrv的相關操作 70
4.3.10 ROS的其他命令 71
習題 71
第二部分 機器人核心功能的實現
第5章 機器人的安裝與初步使用 75
5.1 Turtlebot機器人簡介 75
5.2 Turtlebot機器人硬件的組成與配置 76
5.3 Turtlebot機器人軟件的安裝與測試 77
5.3.1 從源碼安裝 77
5.3.2 deb安裝方式 78
5.3.3 按照Kobuki基座進行配置 79
5.4 啟動Turtlebot 80
5.5 通過鍵盤手動控制Turtlebot 81
5.6 通過腳本控制Turtlebot 81
5.7 監控Kobuki的電池狀態 82
5.8 Turtlebot機器人的擴展 83
習題 85
參考文獻 85
第6章 機器人視覺功能的實現 86
6.1 視覺傳感器 86
6.1.1 Kinect視覺傳感器 86
6.1.2 Primesense視覺傳感器 87
6.2 驅動程序的安裝與測試 88
6.3 同時運行兩臺Kinect 89
6.4 同時運行Kinect與Primesense 92
6.5 在ROS中使用OpenCV處理RGB圖像 92
6.5.1 在ROS中安裝OpenCV 92
6.5.2 在ROS代碼中使用OpenCV 93
6.5.3 理解ROS-OpenCV 轉換架構 93
6.5.4 ROS節點示例 96
6.6 點云庫及其使用 99
6.6.1 點云及點云庫簡介 99
6.6.2 PCL的數據類型 99
6.6.3 發布和訂閱點云消息 101
6.6.4 如何在ROS中使用PCL教程 102
6.6.5 PCL的一個簡單應用——檢測門的開關狀態 108
習題 109
參考文獻 109
第7章 機器人視覺功能的實現進階 110
7.1 機器人跟隨功能的實現 110
7.1.1 理論基礎 110
7.1.2 跟隨功能的運行測試 111
7.2 機器人揮手識別功能的實現 114