ROS 機器人項目開發 11例, 2/e (ROS Robotics Projects, 2/e)

Ramkumar Gandhinathan , Lentin Joseph 譯潘麗,陳媛媛,徐茜,吳中紅

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

商品描述

本書涵蓋新的ROS發行版中的項目——ROS Melodic Morenia with Ubuntu Bionic(18.04)。
從基本原理開始,本書向你介紹了ROS-2,並幫助你了解它與ROS-1的不同之處。
你將能夠在ROS中建模並構建工業移動機械手臂,並在Gazebo 9中進行模擬。
然後,你將了解如何使用狀態機處理複雜的機器人應用程序,以及一次處理多個機器人。
本書還向你介紹了新的、流行的硬件,如Nvidia的Jetson Nano、
華碩修補板和Beaglebone Black,並允許你探索與ROS的接口。

第1章主要向初學者概述ROS的基礎知識。
本章將幫助讀者理解ROS軟件框架的基本思想和概念。

第2章介紹ROS的*新框架——ROS-2。
基於該框架,讀者將能夠使用ROS進行實時應用程序的開發。
本章的結構與第1章類似,主要是幫助讀者釐清ROS-1與ROS-2之間的區別,同時理解兩個版本的能力與局限。

第3章介紹怎樣在模擬環境下構建移動機器人以及機械臂,並將兩者結合起來,通過ROS 對其進行控制。

第4章介紹基於狀態機進行複雜機器人任務處理的技術,
這些技術使得讀者可以在使用機器人執行連續和復雜的任務管理時進行策略調整。

第5章是第3章、第4章內容的綜合應用,基於這兩章內容構建一個用戶應用程序。
該應用程序的功能是控制移動機械臂運送物品。
本章將詳細介紹上述應用程序的構建過程。

第6章介紹通過ROS在多個機器人間進行通信的方法,其中的機器人既可以是同類型的,也可以是不同類型的(即異構多機器人系統)。
在此基礎上,還將介紹對一組多機器人進行單獨或同時控制的方法。

第7章介紹新型的嵌入式控制器及處理器板,例如基於STM32的控制器、Tinkerboard、Jetson Nano以及其他類似產品。
本章還將介紹怎樣通過ROS控制這些闆卡的GPIO(General-Purpose Input/Output,通用輸入/輸出接口),以及如何通過Alexa提供的語音交互功能進行語音控制。

第8章介紹機器人學領域最重要的學習技術之一——強化學習。
本章將介紹強化學習的內涵,並通過實例介紹強化學習背後的數學知識。
此外,還將通過一系列實例展示強化學習技術是如何在ROS中進行應用的。

第9章介紹深度學習在機器人領域的應用。
本章將介紹如何使用深度學習實現圖像識別,還將介紹使用SVM(Support Vector Machine,支持向量機)的應用程序。

第10章是本書中最有趣的內容之一。
本章將展示如何使用ROS和Gazebo構建一輛模擬的自動駕駛汽車。

第11章展示如何通過VR頭盔和體感控制器Leap Motion實現對機器人的遠程操控。
本章將介紹VR頭盔的應用,這是當前流行的技術之一。

第12章通過一個項目展示如何在ROS下使用OpenCV庫。
在本項目中,將構建一個最基本的人臉跟踪器,實現攝像頭對人臉的實時跟踪。
本章將使用諸如Dynamixel的智能伺服系統實現機器人的旋轉。

作者簡介

Ramkumar Gandhinathan

是一名機器人學家和研究者。
他從小學六年級開始製造機器人,在機器人領域鑽研已超過15年,親手打造了80多個不同類型的機器人。
他在機器人行業有7年的系統性專業工作經驗(4年全職和3年兼職/實習),擁有5年的ROS工作經驗。
在他的職業生涯中,他使用ROS構建了超過15個工業機器人解決方案。
他對製作無人機也很著迷,是一名無人機駕駛員。
他的研究興趣和熱情集中在SLAM、運動規劃、傳感器融合、多機器人通信和系統集成等領域。

 

Lentin Joseph

是一位來自印度的作家、機器人學家和機器人企業家。
他在印度喀拉拉邦的高知市經營一家名為Qbotics Labs的機器人軟件公司。
他在機器人領域有8年的工作經驗,主要致力於ROS、OpenCV和PCL領域。他寫過幾本關於ROS的書,
分別是《機器人系統設計與製作:Python語言實現》《精通ROS機器人編程》
《ROS機器人項目開發11例》以及《機器人操作系統(ROS)入門必備:機器人編程一學就會》。
他在印度獲得了機器人學和自動化專業碩士學位,並在美國卡內基–梅隆大學的機器人研究所工作。
他也是TEDx演講者。

目錄大綱

目錄Contents
譯者序
前言
作者簡介
第1章ROS入門 1
1.1 技術要求 2
1.2 ROS概述 2
1.2.1 ROS發行版 3
1.2.2 支持的操作系統 3
1.2.3 支持的機器人及傳感器 4
1.2.4 為什麼選擇ROS 5
1.3 ROS基礎 6
1.3.1 文件系統層級 7
1.3.2 計算圖層級 7
1.3.3 ROS社區層級 9
1.3.4 ROS中的通信 9
1.4 ROS客戶端庫10
1.5 ROS工具11
1.5.1 ROS的可視化工具RViz 11
1.5.2 rqt_plot 11
1.5.3 rqt_graph 12
1.6 ROS模擬器13
1.7 在Ubuntu 18.04 LTS上安裝ROS Melodic 13
1.8 在VirtualBox上設置ROS 18
1.9 Docker簡介19
1.9.1 為什麼選擇Docker 20
1.9.2 安裝Docker 20
1.10 設置ROS工作空間23
1.11 ROS在工業界和學術界的機遇25
1.12 本章小結25

第2章ROS-2及其特性簡介26
2.1 技術要求27
2.2 ROS-2概述27
2.2.1 ROS-2發行版28
2.2.2 支持的操作系統28
2.2.3 支持的機器人及傳感器29
2.2.4 為什麼選擇ROS-2 29
2.3 ROS-2基礎30
2.3.1 什麼是DDS 30
2.3.2 DDS的實現30
2.3.3 計算圖31
2.3.4 ROS-2社區層級32
2.3.5 ROS-2中的通信32
2.3.6 ROS-2的變化33
2.4 ROS-2客戶端庫33
2.5 ROS-2工具34
2.5.1 RViz2 34
2.5.2 Rqt 36
2.6 安裝ROS-2 36
2.6.1 開始安裝37
2.6.2 獲取ROS-2源碼38
2.6.3 ROS-1、ROS-2以及共存環境設置41
2.6.4 運行測試節點42
2.7 設置ROS-2工作空間44
2.8 編寫ROS-2節點45
2.8.1 ROS-1代碼示例45
2.8.2 ROS-2代碼示例46
2.8.3 ROS-1發布者節點與ROS-2發布者節點的區別49
2.9 ROS-1和ROS-2的通信50
2.10 本章小結52

第3章構建工業級移動機械臂53
3.1 技術要求54
3.2 常見的移動機械臂54
3.3 移動機械臂應用場景55
3.4 移動機械臂構建入門56
3.4.1 單位及坐標系57
3.4.2 Gazebo及ROS機器人模型格式設定57
3.5 機器人底座構建58
3.5.1 機器人底座需求58
3.5.2 軟件參數60
3.5.3 機器人底座建模60
3.5.4 機器人底座模擬64
3.5.5 機器人底座測試68
3.6 機械臂構建70
3.6.1 機械臂需求71
3.6.2 軟件參數72
3.6.3 機械臂建模72
3.6.4 機械臂模擬74
3.6.5 機械臂測試77
3.7 系統集成78
3.7.1 移動機械臂建模78
3.7.2 移動機械臂模擬與測試79
3.8 本章小結80

第4章基於狀態機的複雜機器人任務處理81
4.1 技術要求81
4.2 ROS動作機制簡介82
4.2.1 服務器–客戶端結構概述82
4.2.2 actionlib示例:機械臂客戶端83
4.2.3 基於actionlib的服務器–客戶端示例:電池模擬器85
4.3 服務員機器人應用示例90
4.4 狀態機簡介92
4.5 SMACH簡介93
4.6 SMACH入門96
4.6.1 SMACH-ROS的安裝與使用96
4.6.2 簡單示例96
4.6.3 餐廳機器人應用示例98
4.7 本章小結102

第5章構建工業級應用程序103
5.1 技術要求103
5.2 應用案例:機器人送貨上門104
5.3 機器人底座智能化106
5.3.1 添加激光掃描傳感器106
5.3.2 配置導航棧108
5.3.3 環境地圖構建110
5.3.4 機器人底座定位111
5.4 機械臂智能化111
5.4.1 Moveit簡介112
5.4.2 安裝與配置Moveit 113
5.4.3 通過Moveit控制機械臂117
5.5 應用程序模擬120
5.5.1 環境地圖構建與保存120
5.5.2 選擇目標點120
5.5.3 添加目標點121
5.5.4 狀態機構建121
5.6 機器人改進121
5.7 本章小結122

第6章多機器人協同123
6.1 技術要求123
6.2 集群機器人基本概念124
6.3 集群機器人分類125
6.4 ROS中的多機器人通信125
6.4.1 單個roscore和公共網絡126
6.4.2 群組/名稱空間的使用127
6.4.3 基於群組/名稱空間的多機器人系統構建示例128
6.5 多master概念簡介131
6.5.1 multimaster_fkie功能包簡介132
6.5.2 安裝multimaster_fkie功能包133
6.5.3 設置multimaster_fkie功能包133
6.6 多機器人應用示例136
6.7 本章小結138

第7章嵌入式平台上的ROS應用及其控制139
7.1 技術要求139
7.2 嵌入式板基礎知識140
7.2.1 重要概念介紹141
7.2.2 機器人領域微控制器和微處理器的區別142
7.2.3 闆卡選型步驟142
7.3 微控制器板簡介143
7.3.1 Arduino Mega 143
7.3.2 STM32 144
7.3.3 ESP8266 145
7.3.4 ROS支持的嵌入式板146
7.3.5 對比表格147
7.4 單板計算機簡介147
7.4.1 CPU板148
7.4.2 GPU板151
7.5 Debian與Ubuntu 152
7.6 在Tinkerboard S平台上設置操作系統153
7.6.1 基礎需求153
7.6.2 安裝Tinkerboard Debian操作系統153
7.6.3 安裝Armbian和ROS 154
7.6.4 使用可用的ROS鏡像安裝156
7.7 在BeagleBone Black平台上設置ROS 156
7.7.1 基礎需求156
7.7.2 安裝Debian 操作系統157
7.7.3 安裝Ubuntu和ROS 158
7.8 在Raspberry Pi 3/4平台上設置ROS 159
7.8.1 基礎需求159
7.8.2 安裝Raspbian和ROS 159
7.8.3 安裝Ubuntu和ROS 160
7.9 在Jetson Nano平台上設置ROS 161
7.10 通過ROS控制GPIO 161
7.10.1 Tinkerboard S 162
7.10.2 BeagleBone Black 163
7.10.3 Raspberry Pi 3/4 164
7.10.4 Jetson Nano 165
7.11 嵌入式板基準測試166
7.12 Alexa入門及連接ROS 168
7.12.1 Alexa 技能構建前提條件168
7.12.2 創建Alexa技能169
7.13 本章小結173

第8章強化學習與機器人學174
8.1 技術要求174
8.2 機器學習概述175
8.2.1 監督學習175
8.2.2 無監督學習175
8.2.3 強化學習176
8.3 理解強化學習176
8.3.1 探索與開發177
8.3.2 強化學習公式177
8.3.3 強化學習平台178
8.3.4 機器人領域的強化學習應用179
8.4 馬爾可夫決策過程與貝爾曼方程179
8.5 強化學習算法181
8.5.1 出租車問題應用示例181
8.5.2 TD預測182
8.5.3 TD控制183
8.6 ROS中的強化學習功能包189
8.6.1 gym-gazebo 189
8.6.2 gym-gazebo2 194
8.7 本章小結196

第9章ROS下基於TensorFlow的深度學習197
9.1 技術要求197
9.2 深度學習及其應用簡介198
9.3 機器人領域的深度學習198
9.4 深度學習庫199
9.5 TensorFlow入門200
9.5.1 在Ubuntu 18.04 LTS上安裝TensorFlow 200
9.5.2 TensorFlow概念202
9.5.3 在TensorFlow下編寫第一行代碼204
9.6 ROS下基於TensorFlow的圖像識別206
9.6.1 基礎需求207
9.6.2 ROS圖像識別節點207
9.7 scikit-learn簡介210
9.8 SVM及其在機器人領域的應用簡介211
9.9 本章小結214

第10章ROS下的自動駕駛汽車構建215
10.1 技術要求215
10.2 自動駕駛汽車入門216
10.3 典型自動駕駛汽車基本組件218
10.3.1 GPS、IMU和車輪編碼器218
10.3.2 攝像頭219
10.3.3 超聲波傳感器219
10.3.4 LIDAR與RADAR 219
10.3.5 自動駕駛汽車的軟件模塊體系結構221
10.4 ROS下的自動駕駛汽車模擬與交互222
10.4.1 Velodyne LIDAR模擬223
10.4.2 ROS下的Velodyne傳感器接口224
10.4.3 激光掃描儀模擬225
10.4.4 模擬代碼擴展226
10.4.5 ROS下的激光掃描儀接口227
10.4.6 Gazebo下的立體與單目攝像頭模擬228
10.4.7 ROS下的攝像頭接口229
10.4.8 Gazebo下的GPS模擬230
10.4.9 ROS下的GPS接口231
10.4.10 Gazebo下的IMU模擬231
10.4.11 ROS下的IMU接口233
10.4.12 Gazebo下的超聲波傳感器模擬233
10.4.13 低成本LIDAR傳感器235
10.5 Gazebo下帶傳感器的自動駕駛汽車模擬236
10.6 ROS下的DBW汽車接口241
10.6.1 功能包安裝241
10.6.2 自動駕駛汽車及傳感器數據可視化241
10.6.3 基於ROS與DBW通信243
10.7 Udacity開源自動駕駛汽車項目簡介243
10.7.1 Udacity的開源自動駕駛汽車模擬器244
10.7.2 MATLAB ADAS工具箱246
10.8 本章小結246

第11章基於VR頭盔和Leap Motion的機器人遙操作247
11.1 技術要求248
11.2 VR頭盔和Leap Motion傳感器入門248
11.3 項目設計和實施250
11.4 在Ubuntu 14.04.5上安裝Leap Motion SDK 251
11.4.1 可視化Leap Motion控制器數據252
11.4.2 使用Leap Motion可視化工具252
11.4.3 安裝用於Leap Motion控制器的ROS驅動程序253
11.5 RViz中Leap Motion數據的可視化255
11.6 使用Leap Motion控制器創建遙操作節點256
11.7 構建ROS-VR Android應用程序258
11.8 ROS-VR應用程序的使用及與Gazebo的交互260
11.9 VR下的TurtleBot模擬262
11.9.1 安裝TurtleBot模擬器262
11.9.2 在VR中控制TurtleBot 262
11.10 ROS-VR應用程序故障排除263
11.11 ROS-VR應用與Leap Motion遙操作功能集成264
11.12 本章小結265

第12章基於ROS、Open CV和Dynamixel伺服系統的人臉識別與跟踪266
12.1 技術要求266
12.2 項目概述267
12.3 硬件和軟件基礎需求267
12.4 使用RoboPlus配置Dynamixel伺服系統271
12.5 Dynamixel與ROS連接275
12.6 創建人臉跟踪器ROS功能包276
12.7 使用人臉跟踪ROS功能包278
12.7.1 理解人臉跟踪器代碼279
12.7.2 理解CMakeLists.txt 283
12.7.3 track.yaml文件284
12.7.4 啟動文件284
12.7.5 運行人臉跟踪器節點285
12.7.6 face_tracker_control功能包286
12.7.7 平移控制器配置文件287
12.7.8 伺服系統參數配置文件287
12.7.9 人臉跟踪控制器節點288
12.7.10 創建CMakeLists.txt 289
12.7.11 測試人臉跟踪器控制功能包290
12.7.12 節點集成291
12.7.13 固定支架並設置電路291
12.7.14 最終運行292
12.8 本章小結292