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