本書是學習ROS的實用化書籍。從對機器人的介紹開始,由淺入深依次講解ROS依賴的Linux系統(tǒng)、常用的高級編程語言Python、ROS環(huán)境和機器人編程開發(fā)實訓等內容。在學習ROS開發(fā)過程中,本書在實戰(zhàn)篇加入了SLAM建圖、視覺跟隨和物聯(lián)網控制等前沿知識的介紹,使讀者在學習編程技能的同時,能夠更加深入地理解最新的機器人控制理論。為了發(fā)揮ROS與ROS2各自的優(yōu)勢,本書提出了ROS與ROS2混合編程方法,并給出了翔實的實踐案例。 本書可供從事無人駕駛和移動機器人研究的科研工作者、高校教師及相關專業(yè)學生使用。
張銳,北京鋼鐵俠科技有限公司創(chuàng)始人。榮獲北京市優(yōu)秀畢業(yè)生、北京市優(yōu)秀人才(青年骨干)、中關村雛鷹人才、北京市青年人才托舉工程、中關村高聚工程領軍人才、青島市拔尖人才,承擔過北京市科技重大專項等多項省部級項目。
目 錄
預 備 篇
第1章 緒論 1
1.1 機器人的概念及特點 1
1.1.1 機器人的由來 1
1.1.2 機器人的定義 2
1.1.3 機器人的主要特點 3
1.2 機器人的組成與分類 3
1.2.1 機器人的組成 3
1.2.2 機器人的分類 4
1.3 智能機器人 10
1.3.1 智能機器人的定義 10
1.3.2 腦科學與智能機器人 11
1.3.3 人工智能在機器人中的應用 11
第2章 Linux基礎 14
2.1 Linux簡介 14
2.1.1 Linux的發(fā)行版 14
2.1.2 Linux應用領域 15
2.2 Linux系統(tǒng)目錄結構 15
2.3 Linux用戶及用戶組管理 18
2.4 Linux文件屬性管理 20
2.4.1 查看文件屬性 20
2.4.2 文件屬性修改 21
2.4.3 文件權限修改 22
2.5 Linux目錄管理 24
2.5.1 常用命令 24
2.5.2 文件內容查看指令 27
2.5.3 重定向與追加 28
2.6 Linux包操作 29
第3章 Python基礎 31
3.1 Python簡介 31
3.1.1 Python發(fā)行版 31
3.1.2 Python特點 32
3.2 Python基礎介紹 32
3.2.1 基礎導引 32
3.2.2 變量 33
3.2.3 數(shù)據類型 34
3.2.4 條件語句 35
3.2.5 循環(huán)語句 36
3.2.6 切片操作 37
3.3 數(shù)據常用操作方法 38
3.3.1 字符串常見操作 38
3.3.2 列表常見操作 43
3.3.3 字典常見操作 46
3.3.4 集合常見操作 51
3.3.5 元組常見操作 52
3.3.6 邏輯運算 54
3.4 函數(shù) 54
3.4.1 函數(shù)簡介 54
3.4.2 參數(shù)(argument-list) 55
3.4.3 局部變量與全局變量 57
3.4.4 返回值 58
3.4.5 遞歸函數(shù) 59
3.4.6 匿名函數(shù) 59
3.4.7 列表推導式 59
3.4.8 字典推導式 60
3.4.9 常用內置函數(shù) 61
3.5 面向對象 64
3.5.1 面向過程與面向對象 64
3.5.2 類與實例 65
3.5.3 類屬性與實例屬性 65
3.5.4 類方法與靜態(tài)方法 68
3.5.5 魔法方法 69
3.5.6 面向對象的三大特性 71
3.6 常用術語介紹 74
基 礎 篇
第4章 ROS概述 76
4.1 初識ROS 76
4.2 PC安裝ROS 79
4.3 Raspberry 系統(tǒng)下安裝ROS的腳本 83
第5章 ROS基礎 84
5.1 文件系統(tǒng)級 84
5.2 計算圖級 86
5.3 開源社區(qū)級 87
5.4 文件系統(tǒng)工具 87
5.4.1 使用rospack 87
5.4.2 使用roscd 88
5.4.3 使用rosls 89
5.4.4 使用rosed 89
5.4.5 使用roscp 89
5.5 創(chuàng)建工作空間 89
5.5.1 創(chuàng)建工作空間簡介 90
5.5.2 工作空間目錄解析 90
5.6 功能包的創(chuàng)建與編譯 91
5.6.1 catkin功能包的組成 91
5.6.2 創(chuàng)建功能包 92
5.6.3 功能包依賴關系 92
5.6.4 功能包命名規(guī)范 93
5.6.5 刪除功能包 94
5.6.6 編譯功能包 94
5.7 ROS節(jié)點 96
5.7.1 啟動ROS 97
5.7.2 使用rosnode 97
5.8 ROS主題與節(jié)點交互 98
5.8.1 控制turtle移動 98
5.8.2 查看節(jié)點信息 99
5.8.3 查看主題信息 100
5.8.4 使用 rqt_graph 102
5.9 ROS服務和參數(shù) 103
5.10 創(chuàng)建ROS消息和ROS服務 106
5.10.1 消息(msg)和服務(srv)介紹 107
5.10.2 使用 msg 107
5.10.3 使用 srv 109
5.11 編寫發(fā)布器與訂閱器 110
5.11.1 定義msg消息 110
5.11.2 編寫發(fā)布器 112
5.11.3 編寫訂閱器 114
5.11.4 啟動rqt查看節(jié)點信息 115
5.12 編寫服務端和客戶端 116
5.12.1 定義srv服務 116
5.12.2 編寫服務端 118
5.12.3 編寫客戶端 120
5.13 編寫launch文件 122
5.13.1 roslaunch使用方法 122
5.13.2 編寫launch文件介紹 125
實 戰(zhàn) 篇
第6章 ARTROBOT機器人移動平臺搭建 127
6.1 三軸全向移動機器人介紹 127
6.1.1 全向輪結構 127
6.1.2 底盤結構設計 127
6.1.3 直流電機的選擇 129
6.1.4 電機驅動板 129
6.1.5 ROS的主控板 130
6.2 運動學建模和分析 130
6.2.1 機器人坐標系系統(tǒng)分析 130
6.2.2 運動學模型分析 132
6.2.3 逆運動學模型方程推導 133
6.2.4 正運動學模型方程推導 135
6.2.5 航跡推算 136
6.3 ros_arduino_bridge功能包集 136
6.3.1 ros_arduino_bridge功能包集簡介 137
6.3.2 安裝ros_arduino_bridge功能包集 139
6.3.3 安裝python-serial功能包 139
6.3.4 串口的操作權限 139
6.4 下位機Arduino代碼詳解 140
6.4.1 ros_arduino_bridge功能簡介 140
6.4.2 創(chuàng)建ros_arduino_bridge項目 141
6.4.3 mobileBaseArduinoCode.ino 141
6.4.4 commands.h 147
6.4.5 encoder_driver.h 147
6.4.6 encoder_driver.ino 148
6.4.7 motor_driver.h 151
6.4.8 motor_driver.ino 151
6.4.9 omniWheel_controller.h 154
6.4.10 sensors.h 157
6.5 上位機ros_arduino_python代碼 158
6.5.1 ros_arduino_python功能簡介 158
6.5.2 arduino.launch 159
6.5.3 my_arduino_params.yaml 159
6.5.4 arduino_node.py 160
6.5.5 base_controller.py 161
第7章 機器人傳感器配置與使用 167
7.1 慣性測量單元校準和調試 167
7.1.1 慣性測量單元相關介紹 167
7.1.2 IMU功能包簡介 167
7.1.3 在ROS環(huán)境下復制并編譯IMU源碼 168
7.1.4 IMU初始標定 168
7.1.5 啟動IMU測試 168
7.1.6 單獨運行IMU 169
7.2 雷達調試 170
7.2.1 雷達選型 170
7.2.2 下載編譯ROS下驅動源碼 171
7.2.3 生成掛載點 172
7.2.4 啟動雷達測試 174
7.2.5 讀取雷達數(shù)據 174
7.3 udev串口配置 177
7.3.1 udev簡介 177
7.3.2 udev規(guī)則 177
7.3.3 udev內容 179
7.3.4 udev生效 183
7.4 ROS中TF變換 184
7.4.1 TF功能包 185
7.4.2 TF廣播與監(jiān)聽 187
7.4.3 TF常用工具 193
第8章 SLAM及導航 198
8.1 SLAM簡介 198
8.2 常見激光SLAM算法簡介 199
8.3 應用gmapping構建機器人約束條件 200
8.4 slam_gmapping功能包 201
8.5 應用gmapping構建二維地圖 201
8.6 SLAM構建地圖過程分析 205
8.6.1 地圖分析 205
8.6.2 SLAM執(zhí)行過程 206
8.6.3 gmapping參數(shù)設定 207
8.7 ROS機器人導航簡介 209
8.8 機器人路徑規(guī)劃算法簡介 212
8.9 應用導航功能包實現(xiàn)自主路徑規(guī)劃 214
8.9.1 路徑規(guī)劃執(zhí)行過程 214
8.9.2 導航功能包參數(shù)設定 215
第9章 機器人功能擴展實例 218
9.1 機器人視覺跟隨功能 218
9.1.1 ROS下攝像頭的標定 218
9.1.2 ROS跟隨功能實現(xiàn) 226
9.1.3 launch啟動及效果演示 236
9.2 機器人+物聯(lián)網功能 239
9.2.1 物聯(lián)網模塊介紹 240
9.2.2 物聯(lián)網模塊硬件接線 240
9.2.3 物聯(lián)網模塊協(xié)議 244
9.2.4 機器人+物聯(lián)網功能實現(xiàn) 244
9.2.5 launch啟動及效果演示 246
第10章 ROS2簡介 249
10.1 從ROS1到ROS2 249
10.1.1 ROS1的局限性 250
10.1.2 ROS2對ROS1的改進 250
10.2 ROS2系統(tǒng)架構 251
10.3 ROS2安裝 252
10.3.1 ROS2在Ubuntu上安裝 252
10.3.2 Ubuntu ROS2測試 253
10.4 ROS2通信 253
10.4.1 節(jié)點 254
10.4.2 主題 254
10.4.3 服務 256
10.4.4 參數(shù) 259
10.4.5 基本操作 261
10.5 ROS2編程 262
10.5.1 工作空間 262
10.5.2 ROS2功能包 263
10.5.3 發(fā)布者和訂閱者 264
10.5.4 編寫簡單的服務和客戶端節(jié)點 270
10.5.5 創(chuàng)建ROS2消息和服務類型 275
10.6 ROS1和ROS2之間的橋接通信 283
10.6.1 ros1_bridge功能包 283
10.6.2 ros1_bridge之主題通信 283
10.6.3 ros1_bridge之服務通信 285
第11章 交叉編譯器 286
11.1 GNU toolchain介紹 286
11.1.1 gcc和g++ 286
11.1.2 as、ld和ar 287
11.2 從源碼制作gcc編譯器 288
11.3 交叉編譯器的制作 289