內容簡介
本書由長期從事ROS機器人研究與教學的專家撰寫,深入淺出地對基於ROS的機器人開發技術進行了全面介紹,並通過豐富的實例,詳細講解移動機器人、飛行機器人與機器人手臂等各類機器人的ROS實現。
本書不僅涵蓋ROS的基礎知識,還循序漸進地講解了ROS機器人的高級套用特性。書中首先對ROS的基本配置進行介紹,內容包括ROS的安裝、基本概念、主要的功能包與工具等。然後對相應的故障排查方法進行了論述。之後通過模擬的方式,先對Turtlesim的ROS組成模組進行描述,再對其他幾類典型機器人的ROS組成模組進行相應的介紹。對ROS組成模組的介紹,一般遵循的流程是首先介紹基本的ROS命令,然後對ROS的功能包、節點、主題以及訊息進行論述,以此來對ROS機器人作業系統的整體內容進行詳細的闡述。為了對書中選用的機器人的整體性能進行描述,書中還給出了相關機器人的技術資料。
圖書目錄
譯者序
前言
作者簡介
審校者簡介
第1章 ROS初體驗 1
1.1 ROS的用途以及學習ROS的好處 1
1.2 哪些機器人採用了ROS 2
1.3 安裝並啟動ROS 4
1.3.1 配置Ubuntu系統的軟體源 4
1.3.2 設定Ubuntu系統軟體源列表 5
1.3.3 設定Ubuntu系統密鑰 5
1.3.4 安裝ROS Kinetic 5
1.3.5 初始化rosdep 6
1.3.6 環境設定 6
1.3.7 安裝 rosinstall 6
1.3.8 故障排除—ROS環境測試 7
1.4 創建catkin工作空間 7
1.5 ROS的功能包與清單 8
1.5.1 ROS清單 8
1.5.2 探索ROS功能包 8
1.6 ROS節點、話題與訊息 10
1.6.1 ROS節點 11
1.6.2 ROS話題 11
1.6.3 ROS訊息 11
1.6.4 ROS節點管理器 12
1.6.5 確定節點和話題的ROS命令 13
1.7 第一個ROS機器人模擬程式turtlesim 15
1.7.1 啟動turtlesim節點 15
1.7.2 turtlesim節點 16
1.7.3 turtlesim話題與訊息 18
1.7.4 通過發布/turtle1/cmd_vel話題控制烏龜運動 20
1.7.5 通過鍵盤或遊戲手柄控制烏龜移動 22
1.7.6 turtlesim的參數伺服器 22
1.7.7 控制烏龜移動的ROS服務 24
1.8 ROS命令小結 25
1.9 本章小結 26
第2章 構建一個模擬的兩輪ROS機器人 27
2.1 Rviz簡介 27
2.1.1 安裝和啟動Rviz 28
2.1.2 熟悉Rviz界面 29
2.2 生成並構建ROS功能包 32
2.3 構建差分驅動的機器人URDF 33
2.3.1 創建機器人底座 33
2.3.2 使用roslaunch 34
2.3.3 添加輪子 37
2.3.4 添加小腳輪 39
2.3.5 添加顏色 41
2.3.6 添加碰撞屬性 42
2.3.7 移動輪子 43
2.3.8 tf和robot_state_publisher簡介 44
2.3.9 添加物理學屬性 45
2.3.10 試用URDF工具 46
2.4 Gazebo 47
2.4.1 安裝並啟動Gazebo 48
2.4.2 使用roslaunch啟動Gazebo 49
2.4.3 熟悉Gazebo界面 50
2.4.4 機器人URDF的修改 54
2.4.5 Gazebo模型驗證 55
2.4.6 在Gazebo中查看URDF 56
2.4.7 機器人模型調整 57
2.4.8 移動機器人模型 58
2.4.9 其他的機器人模擬環境 59
2.5 本章小結 60
第3章 TurtleBot機器人操控 61
3.1 TurtleBot 2機器人簡介 61
3.2 下載TurtleBot 2模擬器軟體 63
3.3 在Gazebo中啟動TurtleBot 2模擬器 63
3.3.1 常見問題與故障排除 65
3.3.2 ROS命令與Gazebo 66
3.3.3 模擬環境下使用鍵盤遠程控制TurtleBot 2 68
3.4 控制真正的TurtleBot 2機器人的設定 69
3.5 連線上網本與遠程計算機 71
3.5.1 網路類型 71
3.5.2 網路地址 72
3.5.3 遠程計算機網路設定 73
3.5.4 上網本網路設定 73
3.5.5 SSH連線 74
3.5.6 網路設定小結 74
3.5.7 排查網路連線中的故障 75
3.5.8 TurtleBot 2機器人系統測試 75
3.6 TurtleBot 2機器人的硬體規格參數 76
3.7 移動真實的TurtleBot 2機器人 78
3.7.1 採用鍵盤遠程控制TurtleBot 2機器人移動 78
3.7.2 採用ROS命令控制TurtleBot 2機器人移動 79
3.7.3 編寫第一個Python腳本程式控制TurtleBot 2機器人移動 80
3.8 rqt工具簡介 83
3.8.1 rqt_graph 83
3.8.2 rqt的訊息發布與話題監控 86
3.9 TurtleBot機器人的測程 87
3.9.1 模擬的TurtleBot 2機器人的測程 91
3.9.2 Rviz下真實的TurtleBot 2機器人的測程顯示 93
3.10 TurtleBot機器人的自動充電 95
3.11 TurtleBot 3介紹 96
3.12 下載TurtleBot 3模擬軟體 98
3.13 在Rviz中啟動TurtleBot 3模擬軟體 99
3.14 在Gazebo中啟動TurtleBot 3模擬軟體 100
3.15 硬體裝配與測試 103
3.16 下載TurtleBot 3機器人軟體包 103
3.16.1 在遠程計算機上安裝軟體 103
3.16.2 在SBC上安裝軟體 104
3.17 TurtleBot 3與遠程計算機的網路連線 107
3.17.1 遠程計算機網路設定 108
3.17.2 TurtleBot 3網路設定 108
3.17.3 SSH通信測試 110
3.17.4 網路連線的故障處理 110
3.18 控制真實的TurtleBot 3移動 111
3.19 本章小結 113
第4章 TurtleBot機器人導航 114
4.1 TurtleBot機器人的3D視覺系統 115
4.1.1 3D視覺感測器原理 115
4.1.2 3D感測器對比 116
4.2 配置TurtleBot機器人並安裝3D 感測器軟體 123
4.2.1 Kinect 123
4.2.2 ASUS與PrimeSense 123
4.2.3 Intel RealSense 124
4.2.4 攝像頭軟體結構 124
4.2.5 術語定義 125
4.3 獨立模式下測試3D感測器 125
4.4 運行ROS節點進行可視化 126
4.4.1 使用Image Viewer可視化數據 126
4.4.2 使用Rviz可視化數據 128
4.5 TurtleBot機器人導航 131
4.5.1 採用TurtleBot 2機器人構建房間地圖 132
4.5.2 採用TurtleBot 2機器人實現自主導航 136
4.5.3 導航至指定目標點 142
4.5.4 基於Python腳本與地圖實現航路點導航 144
4.5.5 TurtleBot 3機器人的SLAM 151
4.5.6 使用TurtleBot 3進行自主導航 152
4.5.7 rqt_reconfigure 153
4.5.8 進一步探索ROS導航 155
4.6 本章小結 155
第5章 構建模擬的機器人手臂 156
5.1 Xacro的特點 156
5.2 採用Xacro建立一個關節式機器人手臂URDF 157
5.2.1 指定名空間 158
5.2.2 使用Xacro屬性標籤 158
5.2.3 擴展Xacro 161
5.2.4 使用Xacro的包含與宏標籤 163
5.2.5 給機器人手臂添加格線 166
5.3 在Gazebo中控制關節式機器人手臂 171
5.3.1 添加Gazebo特性元素 171
5.3.2 將機器人手臂固定在世界坐標系下 173
5.3.3 在Gazebo中查看機器人手臂 173
5.3.4 給Xacro添加控制組件 174
5.3.5 採用ROS命令行控制機器人手臂 178
5.3.6 採用rqt控制機器人手臂 179
5.4 本章小結 182
第6章 機器人手臂搖擺的關節控制 183
6.1 Baxter簡介 184
6.1.1 研究型機器人Baxter 185
6.1.2 Baxter模擬器 186
6.2 Baxter的手臂 186
6.2.1 Baxter的俯仰關節 187
6.2.2 Baxter的滾轉關節 188
6.2.3 Baxter的坐標系 188
6.2.4 Baxter手臂的控制模式 189
6.2.5 Baxter手臂的抓手 189
6.2.6 Baxter手臂的感測器 190
6.3 下載Baxter軟體 190
6.3.1 安裝Baxter SDK軟體 190
6.3.2 安裝Baxter模擬器 192
6.3.3 配置Baxter shell 193
6.3.4 安裝MoveIt! 194
6.4 在Gazebo中啟動Baxter模擬器 195
6.4.1 啟動Baxter模擬器 196
6.4.2 “熱身”練習 199
6.4.3 彎曲Baxter手臂 200
6.5 Baxter手臂與正向運動 209
6.5.1 關節與關節狀態發布器 209
6.5.2 理解tf 212
6.5.3 直接指定關節組件角度 215
6.5.4 Rviz下的tf坐標系 216
6.5.5 查看機器人元素的tf樹 217
6.6 MoveIt!簡介 217
6.6.1 使用MoveIt!對Baxter手臂進行運動規劃 219
6.6.2 在場景中添加物體 220
6.6.3 採用MoveIt!進行避障運動規劃 222
6.7 配置真實的Baxter機器人 223
6.8 控制真實的Baxter機器人 225
6.8.1 控制關節到達航路點 225
6.8.2 控制關節的力矩彈簧 226
6.8.3 關節速度控制演示 227
6.8.4 其他示例 227
6.8.5 視覺伺服和抓取 227
6.9 反向運動 228
6.10 使用狀態機實現YMCA 231
6.11 本章小結 236
第7章 空中機器人基本操控 237
7.1 四旋翼飛行器簡介 238
7.1.1 風靡的四旋翼飛行器 238
7.1.2 滾轉角、俯仰角與偏航角 238
7.1.3 四旋翼飛行器原理 239
7.1.4 四旋翼飛行器的組成 241
7.1.5 添加感測器 241
7.1.6 四旋翼飛行器的通信 242
7.2 四旋翼飛行器的感測器 243
7.2.1 慣性測量單元 243
7.2.2 四旋翼飛行器狀態感測器 243
7.3 飛行前的準備工作 244
7.3.1 四旋翼飛行器檢測 244
7.3.2 飛行前檢測列表 245
7.3.3 飛行中的注意事項 245
7.3.4 需要遵循的規則和條例 245
7.4 在無人機中使用ROS 246
7.5 Hector四旋翼飛行器 246
7.5.1 下載Hector四旋翼飛行器 248
7.5.2 在Gazebo中啟動Hector四旋翼飛行器 249
7.6 Crazyflie 2.0簡介 256
7.6.1 無ROS情況下的Crazyflie控制 257
7.6.2 使用Crazyradio PA進行通信 258
7.6.3 載入Crazyflie ROS軟體 259
7.6.4 飛行前的檢查 261
7.6.5 使用teleop操控Crazyflie飛行 262
7.6.6 在運動捕獲系統下飛行 265
7.6.7 控制多個Crazyflie飛行 266
7.7 Bebop簡介 266
7.7.1 載入bebop_autonomy軟體 268
7.7.2 使用命令控制Bebop飛行 270
7.8 本章小結 271
第8章 使用外部設備控制機器人 272
8.1 創建自定義ROS遊戲控制器接口 272
8.1.1 測試遊戲控制器 273
8.1.2 使用joy ROS功能包 275
8.1.3 使用自定義遊戲控制器接口控制turtlesim 275
8.2 創建自定義ROS Android設備接口 280
8.2.1 安裝Android Studio和工具 280
8.2.2 安裝ROS-Android開發環境 281
8.2.3 術語定義 282
8.2.4 ROS-Android開發環境介紹 283
8.3 在Arduino或樹莓派上創建ROS節點 284
8.3.1 使用Arduino 284
8.3.2 使用樹莓派 294
8.4 本章小結 295
第9章 操控Crazyflie執行飛行任務 296
9.1 執行任務所需的組件 297
9.1.1 Kinect Windows v2 297
9.1.2 Crazyflie操作 298
9.1.3 任務軟體結構 298
9.1.4 OpenCV與ROS 300
9.2 安裝任務所需的軟體 301
9.2.1 安裝libfreenect2 301
9.2.2 安裝iai_kinect2 304
9.2.3 使用iai_kinect2元包 305
9.3 任務設定 311
9.3.1 探測Crazyflie與目標 311
9.3.2 使用Kinect與OpenCV 314
9.3.3 對Crazyflie進行跟蹤 317
9.4 Crazyflie控制 319
9.5 試飛Crazyflie 324
9.5.1 懸停 324
9.5.2 飛往靜止目標 326
9.5.3 學到的經驗 327
9.6 本章小結 328
第10章 基於MATLAB的Baxter控制 329
10.1 安裝MATLAB機器人系統工具箱 329
10.1.1 MATLAB與機器人系統工具箱版本檢查 330
10.1.2 機器人系統工具箱下的ROS命令 330
10.2 機器人系統工具箱與Baxter模擬器的使用 330
10.2.1 在MATLAB中安裝Baxter訊息 330
10.2.2 運行Baxter模擬器和MATLAB 332
10.2.3 控制Baxter運動 334
10.3 本章小結 337
作者簡介
卡羅爾·費爾柴爾德(Carol Fairchild)
費爾柴爾德機器人公司的所有人、首席工程師,該公司致力於機器人技術的開發與集成。她是休斯頓大學明湖分校巴克斯特機器人實驗室的一名研究人員和兼職教授。她的研究領域主要是基於Baxter機器人的擴展套用開發。她在得州農工大學獲得工程技術學士學位,在休斯頓大學明湖分校獲得計算機工程碩士學位。
托馬斯·L. 哈曼(Thomas L. Harman)
休斯頓大學明湖分校工程系的主任。他的研究領域主要是控制系統、機器人技術與微處理器技術的套用等。他和同事關於機器人和雷射的論文已經套用在了醫學領域。2005年,他當選為休斯頓大學明湖分校的特聘教授。他曾擔任FIRST機器人大賽的裁判與安全顧問。他已經出版的專著、合著書籍有18本,主題包括微處理器技術、MATLAB與仿真以及美國國家電氣規程等。