ROS 機械臂開發與實踐

王曉雲,武延軍,常先明,蔣暢江

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

商品描述

本書含ROS 基礎以及ROS 機械臂全過程開發和實踐等內容,
是編著者在結合國內外新方法和技術,總結自己多年機器人開發經驗以及教學科研成果的基礎上完成的。
本書第1~4 章簡單概述了機械臂基礎和ROS 基礎,結合具體實踐詳細講解了ROS 通信機制、常用組件、TF2 等進功能;
第5~7 章基於機械臂控制系統開發的工程實踐,詳細講解了ROS 機械臂建模、MoveIt!基礎、MoveIt!的編程;
第8、第9 章介紹了機械臂的視覺系統和視覺抓取。
本書理論與實踐相結合,與實物相結合,配有開源教學軟件和課後題答疑解析,
所有教學示例均提供C++和Python 兩種編程實現,方便讀者更好地理解和實踐書中內容。
本書可作為普通高校自動化、機器人工程、人工智能等相關業的教材,也可作為機器人和工程師的技術參考書。

目錄大綱

第1章機械臂基礎
1.1 機械臂系統組成001
1.1.1 機械系統001
1.1.2 驅動系統001
1.1.3 感知系統002
1.1.4 控制系統002
1.2 機械臂主要技術參數002
1.2.1 自由度002
1.2.2 定位度003
1.2.3 工作空間003
1.2.4 速度和加速度004
1.2.5 承載004
1.3 空間描述和變換004
1.3.1 位置描述005
1.3.2 姿態描述005
1.3.3 機器人位姿007
1.3.4 坐標變換007
1.4 機械臂正、逆運動學008
1.4.1 關節空間和笛卡兒空間008
1.4.2 正運動學009
1.4.3 逆運動學009
1.5 推薦閱讀009
本章小結009
題1 010

第2章認識ROS
2.1 什麼是ROS 011
2.2 ROS 的安裝與測試011
2.2.1 作系統和ROS 版本選擇011
2.2.2 安裝ROS Melodic Morenia 版本012
2.2.3 測試ROS 015
2.3 ROS 文件系統015
2.3.1 catkin 工作空間和ROS 功能015
2.3.2 創建工作空間017
2.4 教學代碼018
2.4.1 下載安裝教學代碼018
2.4.2 Qt Creator 開發環境019
2.4.3 教學代碼簡要說明025
2.5 ROS 的通信架構026
2.5.1 節點與ROS Master 027
2.5.2 消息027
2.5.3 話題027
2.5.4 服務028
2.5.5 動作028
2.5.6 話題、服務和動作對比028
2.5.7 參數服務器028
2.6 ROS 計算圖和命名空間029
本章小結029
題2 030

第3章ROS 基礎實踐
3.1 消息的定義和使用031
3.1.1 消息的描述和類型031
3.1.2 自定義消息類型033
3.1.3 消息的使用035
3.2 rospy 和roscpp 客戶端035
3.3 話題通信和編程實現036
3.3.1 話題的發布節點(Python) 036
3.3.2 話題的訂閱節點(Python) 040
3.3.3 話題的發布節點(C++) 042
3.3.4 話題的訂閱節點(C++) 046
3.3.5 話題通信測試049
3.4 服務通信和編程實現052
3.4.1 服務的定義052
3.4.2 自定義服務類型053
3.4.3 服務的服務端節點(Python) 055
3.4.4 服務的客戶端節點(Python) 057
3.4.5 服務的服務端節點(C++) 059
3.4.6 服務的客戶端節點(C++) 061
3.4.7 服務通信測試062
3.5 ROS 中的參數064
3.5.1 rosparam 命令行工具064
3.5.2 參數服務器(Python) 066
3.5.3 參數服務器(C++) 068
本章小結071
題3 071

第4章ROS 進實踐
4.1 動作通信和編程實現073
4.1.1 Action 的定義073
4.1.2 Action 的服務端節點(Python) 076
4.1.3 Action 的客戶端節點(Python) 079
4.1.4 Action 的服務端節點(C++) 081
4.1.5 Action 的客戶端節點(C++) 084
4.1.6 Action 通信測試085
4.2 ROS 常用組件和工具089
4.2.1 XML 語法規範089
4.2.2 launch 啟動文件090
4.2.3 RViz 可視化平台096
4.2.4 rqt 工具箱101
4.2.5 rosbag 數據記錄與回放101
4.3 動態參數配置101
4.3.1 編寫.cfg 文件102
4.3.2 設置動態參數節點(Python) 103
4.3.3 設置動態參數節點(C++) 107
4.3.4 測試動態參數配置108
4.4 ROS 中的坐標系和TF2 110
4.4.1 ROS 中的TF 110
4.4.2 編寫TF2 廣播節點(Python) 113
4.4.3 編寫TF2 監聽節點(Python) 117
4.4.4 編寫TF2 廣播節點(C++) 119
4.4.5 編寫TF2 監聽節點(C++) 121
4.4.6 TF 測試和常用工具123
4.5 擴展閱讀126
本章小結127
題4 127

第5章ROS 機械臂建模
5.1 URDF 建模原理和語法規範128
5.1.1 什麼是URDF 128
5.1.2 urdf 功能128
5.1.3 URDF 語法規範129
5.2 機械臂URDF 建模133
5.2.1 創建機械臂描述功能134
5.2.2 創建機械臂URDF 模型134
5.2.3 添加機械臂夾爪模型136
5.2.4 URDF 調試工具139
5.2.5 在RViz 中可視化模型140
5.3 xacro 語言簡化URDF 模型142
5.3.1 xacro 模型文件常用語法143
5.3.2 使用xacro 簡化機械臂URDF 模型145
5.3.3 為機械臂添加移動底盤148
5.4 sw2urdf 件149
5.4.1 sw2urdf 件簡介150
5.4.2 sw2urdf 件導出的功能150
5.4.3 XBot-Arm 機械臂的URDF 模型153
5.5 robot_state_publisher 發布TF 157
5.5.1 robot_state_publisher 原理簡介157
5.5.2 編寫/joint_states 話題發布節點160
本章小結163
題5 163

第6章MoveIt!基礎
6.1 MoveIt!軟件架構164
6.1.1 move_group 節點165
6.1.2 運動學求解器166
6.1.3 運動規劃器166
6.1.4 規劃場景168
6.1.5 碰撞檢測168
6.2 MoveIt!可視化配置168
6.2.1 安裝MoveIt!並啟動配置助手169
6.2.2 生成自碰撞矩陣170
6.2.3 添加虛擬關節171
6.2.4 添加規劃組173
6.2.5 添加機器人位姿176
6.2.6 添加末端執行器179
6.2.7 添加被動關節180
6.2.8 ROS 控制181
6.2.9 Simulation 182
6.2.10 設置3D 傳感器182
6.2.11 添加作者信息182
6.2.12 自動生成配置文件182
6.3 使用RViz 快速上手MoveIt! 183
6.3.1 啟動Demo 並配置RViz 件184
6.3.2 使用MotionPlanning 交互187
6.3.3 設置規劃場景測試碰撞檢測189
6.4 MoveIt!配置功能解析193
6.4.1 SRDF 文件193
6.4.2 kinematics.yaml 文件195
6.4.3 joint_limits.yaml 文件195
6.4.4 ompl_planning.yaml 文件196
6.4.5 fake_controllers.yaml 文件196
6.4.6 demo.launch 啟動文件196
6.4.7 move_group.launch 文件198
6.4.8 setup_assistant.launch 文件200
6.5 MoveIt!控制真實機械臂201
6.5.1 通信機制和系統架構201
6.5.2 添加MoveIt!啟動文件204
6.5.3 真實機械臂測試205
6.6 使用MoveIt!的命令行工具206
本章小結210
題6 210

第7章MoveIt!的編程
7.1 關節目標和位姿目標規劃211
7.1.1 演示模式下測試212
7.1.2 關節目標規劃示例(Python) 213
7.1.3 關節目標規劃示例(C++) 216
7.1.4 位姿目標規劃示例(Python) 218
7.1.5 位姿目標規劃示例(C++) 222
7.2 笛卡兒路徑規劃223
7.2.1 演示模式下測試224
7.2.2 直線運動示例(Python) 226
7.2.3 直線運動示例(C++) 230
7.2.4 圓弧運動示例(Python) 232
7.2.5 圓弧運動示例(C++) 235
7.3 避障規劃237
7.3.1 演示模式下測試237
7.3.2 避障規劃示例(Python) 240
7.3.3 避障規劃示例(C++) 245
7.4 物品抓取與放置247
7.4.1 演示模式下測試247
7.4.2 pick 和place 編程接口250
7.4.3 編程實現物品抓取與放置(Python) 252
7.4.4 編程實現物品抓取與放置(C++) 257
本章小結260
題7 260

第8章機械臂的視覺系統
8.1 視覺系統概述261
8.2 ROS 圖像接口和相機驅動261
8.2.1 使用usb_cam 功能測試USB攝像頭262
8.2.2 Image 和CompressedImage圖像消息264
8.2.3 RealSense 相機的驅動安裝和測試265
8.2.4 PointCloud2 點雲消息269
8.3 相機的標定270
8.3.1 camera_calibration 簡介和安裝270
8.3.2 camera_calibration 的相機標定270
8.4 cv_bridge 功能275
8.4.1 cv_bridge 安裝和測試275
8.4.2 cv_bridge 的使用示例(Python) 277
8.4.3 cv_bridge 的使用示例(C++) 279
8.5 顏色檢測282
8.5.1 HSV 顏色檢測和測試282
8.5.2 編程實現HSV 顏色檢測(Python) 285
8.5.3 編程實現HSV 顏色檢測(C++) 288
8.6 ROS 中的物體檢測289
8.6.1 物體檢測簡述289
8.6.2 find_object_2d 節點的測試291
8.6.3 find_object_3d 節點的測試293
8.6.4 darknet_ros 的安裝和測試295
本章小結297
題8 297

第9章機械臂的視覺抓取
9.1 視覺抓取關鍵技術分析298
9.2 AR 標籤檢測與定位302
9.2.1 ar_track_alvar 的簡介與安裝302
9.2.2 創建AR 標籤303
9.2.3 檢測AR 標籤304
9.3 機械臂手眼標定306
9.3.1 手眼標定的基本原理306
9.3.2 easy_handeye 的安裝和準備工作308
9.3.3 眼在手外的手眼標定312
9.3.4 手眼標定結果的發布和使用318
9.4 基於AR 標籤識別的自動抓取319
9.4.1 應用系統原理319
9.4.2 應用測試322
9.4.3 編程實現自動抓取(Python) 324
9.4.4 編程實現自動抓取(C++) 327
本章小結330
題9 330
參考文獻