本書(shū)提供了各種實(shí)際的示例代碼供讀者學(xué)習和理解ROS的軟件框架。你可以在仿真環(huán)境中自行構建機器人相應的功能程序,并在ROS社區中分享你的學(xué)習心得和知識。
譯者序
前 言
第1章 ROS系統入門(mén) 1
1.1 使用軟件源安裝ROS Electric 3
1.1.1 添加軟件源到sources.list文件中 4
1.1.2 設置密碼 4
1.1.3 安裝 4
1.1.4 環(huán)境配置 5
1.2 使用軟件源安裝ROS Fuerte 6
1.2.1 配置Ubuntu軟件源 6
1.2.2 配置source.list文件 6
1.2.3 設置密碼 7
1.2.4 安裝 7
1.2.5 環(huán)境配置 8
1.2.6 獨立工具 9
1.3 如何安裝VirtualBox和Ubuntu 9
1.3.1 下載VirtualBox 9
1.3.2 創(chuàng )建虛擬機 10
1.4 本章小結 12
第2章 ROS系統架構及示例 13
2.1 理解ROS文件系統級 13
2.1.1 功能包 14
2.1.2 功能包集 16
2.1.3 消息類(lèi)型 16
2.1.4 服務(wù)類(lèi)型 17
2.2 理解ROS計算圖級 18
2.2.1 節點(diǎn) 19
2.2.2 主題 20
2.2.3 服務(wù) 21
2.2.4 消息 22
2.2.5 消息記錄包 22
2.2.6 節點(diǎn)管理器 22
2.2.7 參數服務(wù)器 22
2.3 理解ROS開(kāi)源社區級 23
2.4 ROS系統試用練習 23
2.4.1 ROS文件系統導覽 24
2.4.2 創(chuàng )建工作空間 24
2.4.3 創(chuàng )建ROS功能包 25
2.4.4 編譯ROS功能包 26
2.4.5 使用ROS節點(diǎn) 26
2.4.6 使用主題與節點(diǎn)交互 28
2.4.7 學(xué)習如何使用服務(wù) 31
2.4.8 使用參數服務(wù)器 33
2.4.9 創(chuàng )建節點(diǎn) 34
2.4.10 編譯節點(diǎn) 36
2.4.11 創(chuàng )建msg和srv文件 37
2.4.12 使用新建的srv和msg文件 38
2.5 本章小結 42
第3章 調試和可視化 43
3.1 調試ROS節點(diǎn) 44
3.1.1 使用GDB調試器調試ROS節點(diǎn) 45
3.1.2 ROS節點(diǎn)啟動(dòng)時(shí)調用GDB調試器 46
3.1.3 設置ROS節點(diǎn)core文件轉存 47
3.2 調試信息 47
3.2.1 輸出調試信息 47
3.2.2 設置調試信息級別 48
3.2.3 為特定節點(diǎn)配置調試信息級別 48
3.2.4 信息命名 50
3.2.5 條件顯示信息與過(guò)濾信息 50
3.2.6 信息的更多功能——單次顯示、可調、組合 51
3.2.7 使用rosconsole和rxconsole在運行時(shí)修改調試級別 52
3.3 監視系統狀態(tài) 56
3.3.1 節點(diǎn)、主題與服務(wù)列表 56
3.3.2 使用rxgraph在線(xiàn)監視節點(diǎn)狀態(tài)圖 56
3.4 當奇怪的事情發(fā)生——使用roswtf 58
3.5 畫(huà)標量數據圖 58
3.5.1 用rxplot畫(huà)出時(shí)間趨勢曲線(xiàn) 59
3.5.2 另一個(gè)畫(huà)圖工具rxtools 60
3.6 圖像可視化 61
3.6.1 顯示單一圖片 61
3.6.2 FireWire接口攝像頭 62
3.6.3 使用雙目立體視覺(jué) 63
3.7 3D可視化 64
3.7.1 使用rviz在3D世界中實(shí)現數據可視化 64
3.7.2 主題與坐標系的關(guān)系 66
3.7.3 可視化坐標變換 67
3.8 保存與回放數據 68
3.8.1 什么是消息記錄包文件 69
3.8.2 使用rosbag在包文件中記錄數據 69
3.8.3 回放消息記錄文件 70
3.8.4 使用rxbag檢查消息記錄包的主題和消息 71
3.9 rqt插件與rx應用 72
3.10 本章小結 73
第4章 在ROS下使用傳感器和執行機構 74
4.1 使用游戲桿或游戲手柄 74
4.1.1 joy_node如何發(fā)送游戲桿動(dòng)作消息 75
4.1.2 使用游戲桿數據在turtlesim中移動(dòng)海龜 76
4.2 使用激光雷達——Hokuyo URG-04lx 79
4.2.1 了解激光雷達如何在 ROS 中發(fā)送數據 80
4.2.2 訪(fǎng)問(wèn)和修改激光雷達數據 82
4.3 使用Kinect傳感器查看3D環(huán)境 84
4.3.1 如何發(fā)送和查看Kinect數據 85
4.3.2 創(chuàng )建和使用Kinect示例 86
4.4 使用伺服電動(dòng)機——Dynamixel 88
4.4.1 Dynamixel如何發(fā)送和接收運動(dòng)命令 89
4.4.2 創(chuàng )建和使用伺服電動(dòng)機示例 90
4.5 使用Arduino添加更多的傳感器和執行機構 91
4.6 使用慣性測量模組——Xsens MTi 94
4.6.1 Xsens如何在ROS中發(fā)送數據 95
4.6.2 創(chuàng )建和使用Xsens示例 96
4.7 使用低成本慣性測量模組IMU-10自由度 98
4.7.1 下載加速度傳感器庫 99
4.7.2 Arduino Nano和10自由度傳感器編程 99
4.7.3 創(chuàng )建ROS節點(diǎn)并使用10自由度傳感器數據 101
4.8 本章小結 103
第5章 3D建模與仿真 104
5.1 自定義機器人在ROS中的3D模型 104
5.2 創(chuàng )建第一個(gè)URDF文件 104
5.2.1 解釋文件格式 106
5.2.2 在rviz里查看3D模型 107
5.2.3 加載圖形到機器人模型 109
5.2.4 使機器人模型運動(dòng) 109
5.2.5 物理和碰撞屬性 110
5.3 xacro——一個(gè)寫(xiě)機器人模型的更好方法 111
5.3.1 使用常量 111
5.3.2 使用數學(xué)方法 112
5.3.3 使用宏 112
5.3.4 使用代碼移動(dòng)機器人 112
5.3.5 使用SketchUp進(jìn)行3D建模 116
5.4 在ROS中仿真 117
5.4.1 在Gazebo中使用URDF3D模型 117
5.4.2 在Gazebo中添加傳感器 120
5.4.3 在Gazebo中加載和使用地圖 121
5.4.4 在Gazebo中移動(dòng)機器人 123
5.5 本章小結 125
第6章 機器視覺(jué) 126
6.1 連接和運行攝像頭 128
6.1.1 FireWire IEEE1394 攝像頭 128
6.1.2 USB攝像頭 132
6.2 使用OpenCV制作USB攝像頭驅動(dòng)程序 133
6.2.1 創(chuàng )建 USB 攝像頭驅動(dòng)功能包 134
6.2.2 使用ImageTransport API發(fā)布攝像頭幀 135
6.2.3 使用 cv_bridge 進(jìn)行OpenCV 和 ROS 圖像處理 138
6.2.4 使用ImageTransport 發(fā)布圖像 139
6.2.5 在ROS中使用OpenCV 139
6.2.6 顯示攝像頭輸入的圖像 140
6.3 如何標定攝像頭 140
6.4 ROS 圖像管道 147
6.5 對于計算機視覺(jué)任務(wù)有用的 ROS功能包 152
6.6 使用viso2執行視覺(jué)測距 153
6.6.1 攝像頭位姿標定 154
6.6.2 運行 viso2 在線(xiàn)演示 156
6.6.3 使用低成本雙目攝像頭運行 viso2 158
6.7 本章小結 159
第7章 導航功能包集入門(mén) 160
7.1 ROS導航功能包集 160
7.2 創(chuàng )建轉換 161
7.2.1 創(chuàng )建廣播機構 162
7.2.2 創(chuàng )建偵聽(tīng)器 162
7.2.3 查看坐標變換樹(shù) 164
7.3 發(fā)布傳感器信息 165
7.4 發(fā)布里程數據 168
7.4.1 Gazebo如何獲取里程數據 169
7.4.2 創(chuàng )建自定義里程數據 171
7.5 創(chuàng )建基礎控制器 175
7.5.1 使用Gazebo 創(chuàng )建里程數據 176
7.5.2 創(chuàng )建基礎控制器 178
7.6 使用ROS創(chuàng )建地圖 180
7.6.1 使用map_server保存地圖 181
7.6.2 使用map_server加載地圖 182
7.7 本章小結 183
第8章 導航功能包集進(jìn)階 184
8.1 創(chuàng )建功能包 184
8.2 創(chuàng )建機器人配置 184
8.3 配置全局和局部代價(jià)地圖 187
8.3.1 基本參數的配置 187
8.3.2 全局代價(jià)地圖的配置 188
8.3.3 局部代價(jià)地圖的配置 189
8.4 基本局部規劃器配置 189
8.5 為導航功能包集創(chuàng )建啟動(dòng)文件 190
8.6 為導航功能包集設置rviz 191
8.6.1 2D位姿估計 191
8.6.2 2D導航目標 192
8.6.3 靜態(tài)地圖 193
8.6.4 點(diǎn)云 193
8.6.5 機器人立足點(diǎn) 193
8.6.6 障礙 194
8.6.7 膨脹障礙 194
8.6.8 全局規劃 195
8.6.9 局部規劃 195
8.6.10 規劃器規劃 196
8.6.11 當前目標 196
8.7 自適應蒙特卡羅定位 197
8.8 避免障礙 199
8.9 發(fā)送目標 200
8.10 本章小結 202
第9章 在實(shí)踐中學(xué)習 203
9.1 REEM——類(lèi)人形PAL機器人 204
9.1.1 從官方軟件源安裝REEM 205
9.1.2 使用Gazebo仿真環(huán)境運行REEM 208
9.2 PR2——柳樹(shù)車(chē)庫機器人 210
9.2.1 安裝 PR2仿真環(huán)境 210
9.2.2 在仿真環(huán)境中運行PR2 211
9.2.3 生成地圖與定位 214
9.2.4 在仿真環(huán)境中運行PR2演示程序 216
9.3 Robonaut 2——NASA的敏捷型人形機器人 217
9.3.1 從軟件源安裝Robonaut 2 217
9.3.2 在國際空間站的固定支座上運行Robonaut2 218
9.4 Husky——Clearpath的輪式機器人 222
9.4.1 安裝Husky仿真環(huán)境 222
9.4.2 運行Husky仿真環(huán)境 222
9.5 TurtleBot——低成本移動(dòng)機器人 224
9.5.1 安裝TurtleBot仿真環(huán)境 224
9.5.2 運行TurtleBot仿真環(huán)境 224
9.6 本章小結 225