本書包含ROS 基礎(chǔ)以及ROS 機械臂全過程開發(fā)和實踐等內(nèi)容,是編著者在結(jié)合國內(nèi)外最新方法和技術(shù),總結(jié)自己多年機器人開發(fā)經(jīng)驗以及教學(xué)科研成果的基礎(chǔ)上完成的。本書第1~4 章簡單概述了機械臂基礎(chǔ)和ROS 基礎(chǔ),結(jié)合具體實踐詳細(xì)講解了ROS 通信機制、常用組件、TF2 等進(jìn)階功能;第5~7 章基于機械臂控制系統(tǒng)開發(fā)的工程實踐,詳細(xì)講解了ROS 機械臂建模、MoveIt!基礎(chǔ)、MoveIt!的編程;第8、第9 章介紹了機械臂的視覺系統(tǒng)和視覺抓取。
本書理論與實踐相結(jié)合,仿真與實物相結(jié)合,配有開源教學(xué)軟件包和課后習(xí)題答疑解析,所有教學(xué)示例均提供C++和Python 兩種編程實現(xiàn),方便讀者更好地理解和實踐書中內(nèi)容。
本書可作為普通高校自動化、機器人工程、人工智能等相關(guān)專業(yè)的教材,也可作為機器人開發(fā)者和工程師的技術(shù)參考書。
第1章 機械臂基礎(chǔ)
1.1 機械臂系統(tǒng)組成 001
1.1.1 機械系統(tǒng) 001
1.1.2 驅(qū)動系統(tǒng) 001
1.1.3 感知系統(tǒng) 002
1.1.4 控制系統(tǒng) 002
1.2 機械臂主要技術(shù)參數(shù) 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 姿態(tài)描述 005
1.3.3 機器人位姿 007
1.3.4 坐標(biāo)變換 007
1.4 機械臂正、逆運動學(xué) 008
1.4.1 關(guān)節(jié)空間和笛卡兒空間 008
1.4.2 正運動學(xué) 009
1.4.3 逆運動學(xué) 009
1.5 推薦閱讀 009
本章小結(jié) 009
習(xí)題1 010
第2章 認(rèn)識ROS
2.1 什么是ROS 011
2.2 ROS 的安裝與測試 011
2.2.1 操作系統(tǒng)和ROS 版本選擇 011
2.2.2 安裝ROS Melodic Morenia 版本 012
2.2.3 測試ROS 015
2.3 ROS 文件系統(tǒng) 015
2.3.1 catkin 工作空間和ROS 功能包 015
2.3.2 創(chuàng)建工作空間 017
2.4 教學(xué)代碼包 018
2.4.1 下載安裝教學(xué)代碼包 018
2.4.2 Qt Creator 開發(fā)環(huán)境 019
2.4.3 教學(xué)代碼包簡要說明 025
2.5 ROS 的通信架構(gòu) 026
2.5.1 節(jié)點與ROS Master 027
2.5.2 消息 027
2.5.3 話題 027
2.5.4 服務(wù) 028
2.5.5 動作 028
2.5.6 話題、服務(wù)和動作對比 028
2.5.7 參數(shù)服務(wù)器 028
2.6 ROS 計算圖和命名空間 029
本章小結(jié) 029
習(xí)題2 030
第3章 ROS 基礎(chǔ)實踐
3.1 消息的定義和使用 031
3.1.1 消息的描述和類型 031
3.1.2 自定義消息類型 033
3.1.3 消息的使用 035
3.2 rospy 和roscpp 客戶端 035
3.3 話題通信和編程實現(xiàn) 036
3.3.1 話題的發(fā)布節(jié)點(Python) 036
3.3.2 話題的訂閱節(jié)點(Python) 040
3.3.3 話題的發(fā)布節(jié)點(C++) 042
3.3.4 話題的訂閱節(jié)點(C++) 046
3.3.5 話題通信測試 049
3.4 服務(wù)通信和編程實現(xiàn) 052
3.4.1 服務(wù)的定義 052
3.4.2 自定義服務(wù)類型 053
3.4.3 服務(wù)的服務(wù)端節(jié)點(Python) 055
3.4.4 服務(wù)的客戶端節(jié)點(Python) 057
3.4.5 服務(wù)的服務(wù)端節(jié)點(C++) 059
3.4.6 服務(wù)的客戶端節(jié)點(C++) 061
3.4.7 服務(wù)通信測試 062
3.5 ROS 中的參數(shù) 064
3.5.1 rosparam 命令行工具 064
3.5.2 參數(shù)服務(wù)器(Python) 066
3.5.3 參數(shù)服務(wù)器(C++) 068
本章小結(jié) 071
習(xí)題3 071
第4章 ROS 進(jìn)階實踐
4.1 動作通信和編程實現(xiàn) 073
4.1.1 Action 的定義 073
4.1.2 Action 的服務(wù)端節(jié)點(Python) 076
4.1.3 Action 的客戶端節(jié)點(Python) 079
4.1.4 Action 的服務(wù)端節(jié)點(C++) 081
4.1.5 Action 的客戶端節(jié)點(C++) 084
4.1.6 Action 通信測試 085
4.2 ROS 常用組件和工具 089
4.2.1 XML 語法規(guī)范 089
4.2.2 launch 啟動文件 090
4.2.3 RViz 可視化平臺 096
4.2.4 rqt 工具箱 101
4.2.5 rosbag 數(shù)據(jù)記錄與回放 101
4.3 動態(tài)參數(shù)配置 101
4.3.1 編寫.cfg 文件 102
4.3.2 設(shè)置動態(tài)參數(shù)節(jié)點(Python) 103
4.3.3 設(shè)置動態(tài)參數(shù)節(jié)點(C++) 107
4.3.4 測試動態(tài)參數(shù)配置 108
4.4 ROS 中的坐標(biāo)系和TF2 110
4.4.1 ROS 中的TF 110
4.4.2 編寫TF2 廣播節(jié)點(Python) 113
4.4.3 編寫TF2 監(jiān)聽節(jié)點(Python) 117
4.4.4 編寫TF2 廣播節(jié)點(C++) 119
4.4.5 編寫TF2 監(jiān)聽節(jié)點(C++) 121
4.4.6 TF 測試和常用工具 123
4.5 擴展閱讀 126
本章小結(jié) 127
習(xí)題4 127
第5章 ROS 機械臂建模
5.1 URDF 建模原理和語法規(guī)范 128
5.1.1 什么是URDF 128
5.1.2 urdf 功能包 128
5.1.3 URDF 語法規(guī)范 129
5.2 機械臂URDF 建模 133
5.2.1 創(chuàng)建機械臂描述功能包 134
5.2.2 創(chuàng)建機械臂URDF 模型 134
5.2.3 添加機械臂夾爪模型 136
5.2.4 URDF 調(diào)試工具 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 插件導(dǎo)出的功能包 150
5.4.3 XBot-Arm 機械臂的URDF 模型 153
5.5 robot_state_publisher 發(fā)布TF 157
5.5.1 robot_state_publisher 原理簡介 157
5.5.2 編寫/joint_states 話題發(fā)布節(jié)點 160
本章小結(jié) 163
習(xí)題5 163
第6章 MoveIt!基礎(chǔ)
6.1 MoveIt!軟件架構(gòu) 164
6.1.1 move_group 節(jié)點 165
6.1.2 運動學(xué)求解器 166
6.1.3 運動規(guī)劃器 166
6.1.4 規(guī)劃場景 168
6.1.5 碰撞檢測 168
6.2 MoveIt!可視化配置 168
6.2.1 安裝MoveIt!并啟動配置助手 169
6.2.2 生成自碰撞矩陣 170
6.2.3 添加虛擬關(guān)節(jié) 171
6.2.4 添加規(guī)劃組 173
6.2.5 添加機器人位姿 176
6.2.6 添加末端執(zhí)行器 179
6.2.7 添加被動關(guān)節(jié) 180
6.2.8 ROS 控制 181
6.2.9 Simulation 仿真 182
6.2.10 設(shè)置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 設(shè)置規(guī)劃場景測試碰撞檢測 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 通信機制和系統(tǒng)架構(gòu) 201
6.5.2 添加MoveIt!啟動文件 204
6.5.3 真實機械臂測試 205
6.6 使用MoveIt!的命令行工具 206
本章小結(jié) 210
習(xí)題6 210
第7章 MoveIt!的編程
7.1 關(guān)節(jié)目標(biāo)和位姿目標(biāo)規(guī)劃 211
7.1.1 演示模式下測試 212
7.1.2 關(guān)節(jié)目標(biāo)規(guī)劃示例(Python) 213
7.1.3 關(guān)節(jié)目標(biāo)規(guī)劃示例(C++) 216
7.1.4 位姿目標(biāo)規(guī)劃示例(Python) 218
7.1.5 位姿目標(biāo)規(guī)劃示例(C++) 222
7.2 笛卡兒路徑規(guī)劃 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 避障規(guī)劃 237
7.3.1 演示模式下測試 237
7.3.2 避障規(guī)劃示例(Python) 240
7.3.3 避障規(guī)劃示例(C++) 245
7.4 物品抓取與放置 247
7.4.1 演示模式下測試 247
7.4.2 pick 和place 編程接口 250
7.4.3 編程實現(xiàn)物品抓取與放置(Python) 252
7.4.4 編程實現(xiàn)物品抓取與放置(C++) 257
本章小結(jié) 260
習(xí)題7 260
第8章 機械臂的視覺系統(tǒng)
8.1 視覺系統(tǒng)概述 261
8.2 ROS 圖像接口和相機驅(qū)動 261
8.2.1 使用usb_cam 功能包測試USB攝像頭 262
8.2.2 Image 和CompressedImage圖像消息 264
8.2.3 RealSense 相機的驅(qū)動安裝和測試 265
8.2.4 PointCloud2 點云消息 269
8.3 相機的標(biāo)定 270
8.3.1 camera_calibration 簡介和安裝 270
8.3.2 camera_calibration 的相機標(biāo)定 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 編程實現(xiàn)HSV 顏色檢測(Python) 285
8.5.3 編程實現(xiàn)HSV 顏色檢測(C++) 288
8.6 ROS 中的物體檢測 289
8.6.1 物體檢測簡述 289
8.6.2 find_object_2d 節(jié)點的測試 291
8.6.3 find_object_3d 節(jié)點的測試 293
8.6.4 darknet_ros 的安裝和測試 295
本章小結(jié) 297
習(xí)題8 297
第9章 機械臂的視覺抓取
9.1 視覺抓取關(guān)鍵技術(shù)分析 298
9.2 AR 標(biāo)簽檢測與定位 302
9.2.1 ar_track_alvar 的簡介與安裝 302
9.2.2 創(chuàng)建AR 標(biāo)簽 303
9.2.3 檢測AR 標(biāo)簽 304
9.3 機械臂手眼標(biāo)定 306
9.3.1 手眼標(biāo)定的基本原理 306
9.3.2 easy_handeye 的安裝和準(zhǔn)備工作 308
9.3.3 眼在手外的手眼標(biāo)定 312
9.3.4 手眼標(biāo)定結(jié)果的發(fā)布和使用 318
9.4 基于AR 標(biāo)簽識別的自動抓取 319
9.4.1 應(yīng)用系統(tǒng)原理 319
9.4.2 應(yīng)用測試 322
9.4.3 編程實現(xiàn)自動抓。≒ython) 324
9.4.4 編程實現(xiàn)自動抓。–++) 327
本章小結(jié) 330
習(xí)題9 330
參考文獻(xiàn)