內容簡介
本書在介紹ROS總體框架和理論要點的基礎上,講解ROS的通信機製、常用組件和進階功能;同時以實踐為主,講解機器視覺、機器聽覺、SLAM與導航、機械臂控製、機器學習等多種ROS應用的主要原理和實現方法;並分析基於ROS的機器人係統設計方法和典型實例;後論述ROS2的框架特點和使用方法,剖析ROS的發展方嚮。
目錄
推薦序一
推薦序二
推薦序三
前言
第1章 初識ROS 1
1.1 ROS是什麼 1
1.1.1 ROS的起源 1
1.1.2 ROS的設計目標 2
1.1.3 ROS的特點 3
1.2 如何安裝ROS 4
1.2.1 操作係統與ROS版本的選擇 4
1.2.2 配置係統軟件源 6
1.2.3 添加ROS軟件源 6
1.2.4 添加密鑰 7
1.2.5 安裝ROS 7
1.2.6 初始化rosdep 8
1.2.7 設置環境變量 8
1.2.8 完成安裝 9
1.3 本書源碼下載 9
1.4 本章小結 10
第2章 ROS架構 11
2.1 ROS架構設計 11
2.2 計算圖 12
2.2.1 節點 12
2.2.2 消息 13
2.2.3 話題 13
2.2.4 服務 13
2.2.5 節點管理器 14
2.3 文件係統 14
2.3.1 功能包 14
2.3.2 元功能包 16
2.4 開源社區 17
2.5 ROS的通信機製 17
2.5.1 話題通信機製 18
2.5.2 服務通信機製 19
2.5.3 參數管理機製 20
2.6 話題與服務的區彆 20
2.7 本章小結 21
第3章 ROS基礎 22
3.1 第一個ROS例程——小烏龜仿真 23
3.1.1 turtlesim功能包 23
3.1.2 控製烏龜運動 24
3.2 創建工作空間和功能包 25
3.2.1 什麼是工作空間 25
3.2.2 創建工作空間 26
3.2.3 創建功能包 27
3.3 工作空間的覆蓋 28
3.3.1 ROS中工作空間的覆蓋 28
3.3.2 工作空間覆蓋示例 28
3.4 搭建Eclipse開發環境 30
3.4.1 安裝Eclipse 30
3.4.2 創建Eclipse工程文件 30
3.4.3 將工程導入Eclipse 31
3.4.4 設置頭文件路徑 31
3.4.5 運行/調試程序 32
3.5 RoboWare簡介 35
3.5.1 RoboWare的特點 35
3.5.2 RoboWare的安裝與使用 36
3.6 話題中的Publisher與Subscriber 37
3.6.1 烏龜例程中的Publisher與Subscriber 37
3.6.2 如何創建Publisher 37
3.6.3 如何創建Subscriber 40
3.6.4 編譯功能包 41
3.6.5 運行Publisher與Subscriber 42
3.6.6 自定義話題消息 44
3.7 服務中的Server和Client 46
3.7.1 烏龜例程中的服務 46
3.7.2 如何自定義服務數據 47
3.7.3 如何創建Server 48
3.7.4 如何創建Client 49
3.7.5 編譯功能包 51
3.7.6 運行Server和Client 51
3.8 ROS中的命名空間 52
3.8.1 有效的命名 52
3.8.2 命名解析 53
3.8.3 命名重映射 54
3.9 分布式多機通信 54
3.9.1 設置IP地址 55
3.9.2 設置ROS_MASTER_URI 56
3.9.3 多機通信測試 56
3.10 本章小結 57
第4章 ROS中的常用組件 58
4.1 launch啓動文件 58
4.1.1 基本元素 58
4.1.2 參數設置 60
4.1.3 重映射機製 61
4.1.4 嵌套復用 61
4.2 TF坐標變換 62
4.2.1 TF功能包 62
4.2.2 TF工具 63
4.2.3 烏龜例程中的TF 65
4.2.4 創建TF廣播器 67
4.2.5 創建TF監聽器 68
4.2.6 實現烏龜跟隨運動 70
4.3 Qt工具箱 70
4.3.1 日誌輸齣工具(rqt_console) 71
4.3.2 計算圖可視化工具(rqt_graph) 71
4.3.3 數據繪圖工具(rqt_plot) 72
4.3.4 參數動態配置工具(rqt_reconfigure) 73
4.4 rviz三維可視化平颱 73
4.4.1 安裝並運行rviz 74
4.4.2 數據可視化 75
4.4.3 插件擴展機製 76
4.5 Gazebo仿真環境 78
4.5.1 Gazebo的特點 78
4.5.2 安裝並運行Gazebo 78
4.5.3 構建仿真環境 81
4.6 rosbag數據記錄與迴放 82
4.6.1 記錄數據 82
4.6.2 迴放數據 83
4.7 本章小結 84
第5章 機器人平颱搭建 85
5.1 機器人的定義 85
5.2 機器人的組成 86
5.2.1 執行機構 87
5.2.2 驅動係統 87
5.2.3 傳感係統 87
5.2.4 控製係統 87
5.3 機器人係統搭建 88
5.3.1 MRobot 88
5.3.2 執行機構的實現 88
5.3.3 驅動係統的實現 89
5.3.4 內部傳感係統的實現 90
5.4 基於Raspberry Pi的控製係統實現 90
5.4.1 硬件平颱Raspberry Pi 91
5.4.2 安裝Ubuntu 16.04 91
5.4.3 安裝ROS 93
5.4.4 控製係統與MRobot通信 94
5.4.5 PC端控製MRobot 97
5.5 為機器人裝配攝像頭 99
5.5.1 usb_cam功能包 99
5.5.2 PC端驅動攝像頭 100
5.5.3 Raspberry Pi驅動攝像頭 102
5.6 為機器人裝配Kinect 104
5.6.1 freenect_camera功能包 104
5.6.2 PC端驅動Kinect 106
5.6.3 Raspberry Pi驅動Kinect 109
5.6.4 Kinect電源改造 109
5.7 為機器人裝配激光雷達 110
5.7.1 rplidar功能包 110
5.7.2 PC端驅動rplidar 111
5.7.3 Raspberry Pi驅動rplidar 113
5.8 本章小結 113
第6章 機器人建模與仿真 114
6.1 統一機器人描述格式——URDF 114
6.1.1 標簽 114
6.1.2 標簽 115
6.1.3 標簽 116
6.1.4 標簽 116
6.2 創建機器人URDF模型 116
6.2.1 創建機器人描述功能包 116
6.2.2 創建URDF模型 117
6.2.3 URDF模型解析 120
6.2.4 在rviz中顯示模型 122
6.3 改進URDF模型 124
6.3.1 添加物理和碰撞屬性 124
6.3.2 使用xacro優化URDF 125
6.3.
前言/序言
Preface 前 言
2011年年底,筆者第一次接觸ROS。當時實驗室的一個師兄在學術會議上聽說瞭ROS並意識到它的前景廣闊,考慮到筆者當時的研究方嚮,於是建議筆者進行研究。那時國內外ROS的學習環境比較艱苦,幾乎隻有Wiki的基礎教程(也沒有現在這麼完善)。所以一開始,筆者的內心是拒絕的,但還是硬著頭皮開始鑽研。雖然從拒絕到接受、從未知到熟悉,筆者經曆瞭前所未有的磨難,但同時也收獲瞭前所未有的喜悅。
在這個過程中,筆者也常常思考:ROS前景無限,但是國內還鮮有人知,即使有人知道,也會被睏難嚇倒。既然筆者經曆過,何不總結一下,讓其他人少走彎路。於是,筆者整理瞭自己學習過程中的一些資料和心得,在CSDN上以博客的形式發錶,最終形成《ROS探索總結》係列博文,再後來轉移到個人網站——古月居,至今仍保持更新。
2017年11月,ROS十周歲瞭!在走過的第一個十年裏,ROS從蹣跚學步的孩童成長為機器人領域的巨人,再華麗蛻變齣ROS 2。如今,大多數知名機器人平颱和機器人公司都支持ROS,越來越多的機器人開發者也選擇ROS作為開發框架。ROS已經逐漸成為機器人領域的事實標準,並將逐步從研發走嚮市場,助力機器人與人工智能的快速發展。
ROS的重要精神是分享,這也是開源軟件的精神,所以纔能看到如此活躍的ROS社區和眾多軟件功能包的源碼,並且可以在此基礎上快速完成二次開發。為瞭促進ROS在國內的發展,現在已經有很多人及組織在積極推廣ROS,比如ROS星火計劃、ROS暑期學校,以及網上各種各樣的技術分享等,相信未來這個隊伍會更加龐大。
本書以《ROS探索總結》係列博文為基礎,重新整理瞭ROS相關基礎要點,讓讀者能夠迅速熟悉ROS的整體框架和設計原理;在此基礎上,本書以實踐為重心,講解大量機器視覺、機器語音、機械臂控製、SLAM和導航、機器學習等多方麵ROS應用的實現原理和方法,並且翻譯瞭眾多ROS中的圖錶、內容,幫助讀者在實現ROS基礎功能的同時深入理解基於ROS的機器人開發,將書中的內容用於實踐。
本書共有14章,可以分為五個部分。
第一部分是ROS基礎(第1~4章),幫助瞭解ROS框架,並且熟悉ROS中的關鍵概念以及實現方法。這部分的內容適閤初學者,也適閤作為有一定經驗或者資深開發者的參考手冊。
第二部分介紹如何搭建真實或仿真的機器人平颱(第5~6章),幫助瞭解機器人係統的概念和組成,學習如何使用ROS實現機器人仿真,為後續的機器人實踐做好準備。這部分的內容適閤希望自己動手設計、開發一個完整機器人平颱的讀者。
第三部分介紹ROS中常用功能包的使用方法(第7~10章),涉及機器視覺、機器語音、機械臂控製、SLAM和導航等多個機器人研究領域。這部分的內容適閤學習ROS基礎後希望實踐的開發者,以及從事相關領域的機器人開發者。
第四部分是ROS的進階內容(第11~13章),介紹瞭ROS的進階功能、ROS與機器學習的結閤、搭載ROS的機器人平颱。這部分的內容適閤已經對ROS基礎和應用有一定瞭解的讀者。
第五部分介紹瞭新一代ROS——ROS 2(第14章),涉及ROS 2的架構、原理和使用方法。這部分的內容適閤對ROS有一定瞭解,希望瞭解ROS 2、想要跟上ROS進化步伐的開發者。
因此,本書不僅適閤希望瞭解、學習、應用ROS的機器人初學者,也適閤有一定經驗的機器人開發人員,同時也可以作為資深機器人開發者的參考手冊。
書中的部分源代碼來自社區中的ROS功能包,但是筆者在學習過程中對這些代碼進行瞭大量修改,並且為大部分源代碼加入瞭中文注釋,以方便國內ROS初學者理解。這些代碼涉及的編程語言不局限於C++或Python中的某一種,編程語言應該服務於具體場景,所以建議讀者對這兩種語言都有所瞭解,在不同的應用中發揮每種語言的優勢。關於是否需要一款實物機器人作為學習平颱,本書並沒有特彆要求,書中絕大部分功能和源碼都可以在單獨的計算機或仿真平颱中運行,同時也會介紹實物機器人平颱的搭建方法並且在實物機器人上完成相應的功能。所以隻需要擁有一颱運行Ubuntu係統的計算機,具備Linux工具的基本知識,瞭解C++和Python的編程方法,即可使用本書。
此外,本書創作過程中參考瞭眾多已經齣版的ROS原著、譯著,筆者也將這些內容作為參考資料列齣,並嚮這些著作的作者和譯者緻敬,希望讀者在學習ROS的過程中,可以從這些著作中獲取更多知識:
《Mastering ROS for Robotics Programming》,Lentin Joseph《ROS By Example》(Volume 1/Volume 2),Patrick Goebel《Programming Robots with ROS:A Practical Introduction to the Robot Operating System》, Morgan Quigley, Brian Gerkey & William D. Smart《Learning ROS for Robotics Programming》,Aaron Martinez,Enrique Fernández《A Gentle Introduction to ROS》,Jason M. O’Kane《ROS Robotics Projects》,Lentin Joseph《Effective Robotics Programming with ROS》,Anil Mahtani,Luis Sanchez在ROS探索實踐與本書的創作過程中,離不開眾多“貴人”的幫助。
ROS機器人開發實踐 下載 mobi epub pdf txt 電子書 格式