本書首先介紹GoPiGo3及其配備的傳感器和執(zhí)行器。然后,通過從零開始創(chuàng)建3D模型并使用Gazebo在ROS中運行模擬機(jī)器人來使用GoPiGo3的數(shù)字孿生模型。接下來展示如何使用GoPiGo3構(gòu)建和運行一個了解周圍環(huán)境的自主移動機(jī)器人。還探索了機(jī)器人如何學(xué)習(xí)尚未在代碼中編程但通過觀察其環(huán)境而獲得的任務(wù)。本書甚至還涵蓋深度學(xué)習(xí)和強(qiáng)化學(xué)習(xí)等主題。在本書的末尾,讀者將熟悉在機(jī)器人技術(shù)中構(gòu)建特定用途應(yīng)用程序的基礎(chǔ)知識,并具備從零起步開發(fā)高度智能自主機(jī)器人的能力。本書適合機(jī)器人技術(shù)人員和業(yè)余愛好者閱讀。
ROS工程師經(jīng)常面臨使用機(jī)器人操作系統(tǒng)(ROS)基礎(chǔ)設(shè)施并將物理機(jī)器人連接到機(jī)器人仿真系統(tǒng)的挑戰(zhàn)。通過本書,讀者將學(xué)習(xí)如何在虛擬環(huán)境中對機(jī)器人進(jìn)行仿真并在等效的實際場景中實現(xiàn)所需的行為。
本書首先介紹GoPiGo3及其配備的傳感器和執(zhí)行器。然后,通過從零開始創(chuàng)建3D模型并使用Gazebo在ROS中運行仿真來使用GoPiGo3的數(shù)字孿生模型。接下來展示如何使用GoPiGo3構(gòu)建和運行一個了解周圍環(huán)境的自主移動機(jī)器人,探索機(jī)器人如何學(xué)習(xí)尚未在代碼中編程但通過觀察其環(huán)境而獲得的任務(wù)。本書還涵蓋諸如深度學(xué)習(xí)和強(qiáng)化學(xué)習(xí)之類的主題。
在本書的*后,讀者將熟悉在機(jī)器人技術(shù)中構(gòu)建專用應(yīng)用程序的基礎(chǔ)知識,并具備從零開發(fā)高度智能自主機(jī)器人的能力。
本書涵蓋的主要內(nèi)容:
?開發(fā)有環(huán)境感知能力的機(jī)器人。
?機(jī)器人在物理環(huán)境中的反應(yīng)。
?將期望的行為分解為一系列機(jī)器人行動。
?將傳感器數(shù)據(jù)與上下文相關(guān)聯(lián)以產(chǎn)生自適應(yīng)響應(yīng)。
?應(yīng)用強(qiáng)化學(xué)習(xí)讓機(jī)器人通過反復(fù)試驗進(jìn)行學(xué)習(xí)。
?通過深度學(xué)習(xí)使機(jī)器人能夠識別周圍環(huán)境。
為什么要寫一本關(guān)于如何使用ROS學(xué)習(xí)機(jī)器人技術(shù)的新書呢?其實,編程只是使用機(jī)器人進(jìn)行工作的一小部分。如果你想真正成為擅長機(jī)器人技術(shù)的開發(fā)者,那么還需要其他領(lǐng)域的技能,如機(jī)電、機(jī)器人仿真、自主導(dǎo)航以及機(jī)器學(xué)習(xí)/強(qiáng)化學(xué)習(xí)等。這四個主題中的每一個都是組成機(jī)器人技術(shù)的基石,需要掌握它們才能獲得完整的機(jī)器人技能。本書分為四部分,每個部分專門針對這些組成模塊中的一個。
部分(第1~3章)側(cè)重于機(jī)電,并講解機(jī)器人硬件的每個組成部分,提供測試機(jī)器人所配備的每個傳感器和執(zhí)行器的實際演示。該部分可使你對移動機(jī)器人的工作原理有一個很好的了解。
第二部分(第4~5章)涉及機(jī)器人仿真。該部分介紹ROS并開發(fā)一個兩輪機(jī)器人仿真,用其模擬實際機(jī)器人的物理屬性和行為。該部分探討數(shù)字孿生的概念,即虛擬機(jī)器人,它是物理機(jī)器人的孿生。這是開發(fā)機(jī)器人應(yīng)用程序的基本部分,相比測試真實機(jī)器人硬件的相關(guān)成本,Gazebo免費且方便。數(shù)字孿生使我們能夠加快開發(fā)過程并節(jié)省物理機(jī)器人在高級開發(fā)階段的測試。
第三部分(第6~9章)重點介紹機(jī)器人導(dǎo)航(robot navigation),這是移動機(jī)器人常見的任務(wù)。該部分分別通過仿真和物理機(jī)器人的方式,基于實用項目講解的算法和技術(shù)。
第四部分(第10~12章)著重于機(jī)器學(xué)習(xí)(machine learning)和強(qiáng)化學(xué)習(xí)(reinforcement learning),這是機(jī)器人研究和實際機(jī)器人應(yīng)用中活躍的領(lǐng)域。通過使用該技術(shù),機(jī)器人能夠從純粹的全自動轉(zhuǎn)變成柔性的行為機(jī)器,包括每一個可能的行為或應(yīng)答的程序,其中機(jī)器人能夠通過一個巧妙的方法從數(shù)據(jù)中學(xué)習(xí)對環(huán)境要求的反應(yīng)。該數(shù)據(jù)可以從機(jī)器人的先前經(jīng)驗中獲得,也可以從類似機(jī)器人的經(jīng)驗中收集。
要構(gòu)建的機(jī)器人應(yīng)用程序,首先需要掌握這四個構(gòu)建模塊,然后組合它們,這就是所謂的智能機(jī)器人(smart robot)。這是你的任務(wù),也是你的挑戰(zhàn)。
目標(biāo)讀者
如果你是一名工程師,希望構(gòu)建使用ROS和AI驅(qū)動的機(jī)器人,那么本書非常適合你。對于希望開發(fā)自定義ROS機(jī)器人項目的技術(shù)人員和業(yè)余愛好者而言,也可以在本書中發(fā)現(xiàn)對自己有用的資源。
內(nèi)容提要
第1章提供書中內(nèi)容所基于的移動機(jī)器人的關(guān)鍵概念和實際組裝準(zhǔn)則。我們將從務(wù)實的角度深入研究GoPiGo3的特性,使其成為學(xué)習(xí)機(jī)器人技術(shù)的理想且經(jīng)濟(jì)、高效的平臺。通過組裝GoPiGo3,你將獲得處理機(jī)器人組件的手技能。
第2章提供GoPiGo3如何工作的實用解析。為此,引入了JupyterLab環(huán)境,它是一個友好的界面,采用了筆記本的結(jié)構(gòu),該筆記本的結(jié)構(gòu)由人類可讀的段落和Python代碼片段組成。該章為每個測試程序生成兩個版本:JupyterLab筆記本和純Python腳本。使用這些編程工具,分別測試每個傳感器、執(zhí)行器,檢查其是否正常工作,并了解其背后的技術(shù)。
第3章解釋ROS的基本概念,使用易于理解的語言介紹ROS框架,避免非常技術(shù)性的描述因為我們的主要目標(biāo)是從概念上準(zhǔn)確地展示ROS的含義。在接下來的章節(jié)中,將提供深入的技術(shù)說明,以便終能夠?qū)OS集成到項目中。
第4章介紹如何構(gòu)建簡單的兩輪機(jī)器人,即GoPiGo3的數(shù)字孿生機(jī)器人。該模型以統(tǒng)一機(jī)器人描述格式(Unified Robot Description Format,URDF)編寫,并使用RViz展示效果。RViz是一種提供可配置的圖形用戶界面(Graphical User Interface,GUI)的ROS工具,允許用戶顯示其所需要的特定信息,可用于全局機(jī)器人可視化以及在構(gòu)建模型時調(diào)試特定功能。
第5章講解如何將機(jī)器人的數(shù)字化定義(URDF文件)轉(zhuǎn)為Gazebo的仿真環(huán)境,這由能夠模擬逼真行為的物理引擎提供動力。你還將加深對檢查和測試數(shù)字機(jī)器人的理解,確保其行為能很好地代表現(xiàn)實情況。
第6章介紹ROS中的命令行交互,以及ROS命令的類型。我們將探討ROS中常用的通信模式,包括發(fā)布-訂閱模型(publish-subscribe model)。為了處理所有的ROS數(shù)據(jù),我們將介紹rqt,它簡化了開發(fā)和調(diào)試應(yīng)用程序的過程。此外,還引入了ROS參數(shù),概述它們在高層管理機(jī)器人配置方面的功能。
第7章講解如何使用GoPiGo3為真正的機(jī)器人設(shè)置ROS環(huán)境。我們從使用筆記本電腦鍵盤查看遠(yuǎn)程控制開始,然后進(jìn)一步使用ROS主題等更技術(shù)性的方法。該章使你從基于鍵盤和主題的手動控制過渡到內(nèi)部編程邏輯,以便機(jī)器人能夠自主執(zhí)行任務(wù)。
第8章探討使用實際方法和GoPiGo3的數(shù)字孿生技術(shù)的同時定位和地圖構(gòu)建(Simultaneous Localization and Mapping,SLAM)技術(shù)。闡述為什么在正確導(dǎo)航之前需要SLAM。該仿真將在ROS本機(jī)仿真工具Gazebo中運行,該工具擁有可顯示逼真效果的物理引擎。
第9章通過GoPiGo3物理機(jī)器人將焦點轉(zhuǎn)回現(xiàn)實世界。該章重點介紹在實際環(huán)境中面對機(jī)器人任務(wù)時出現(xiàn)的許多細(xì)節(jié)和實際問題?梢韵冗M(jìn)行仿真,但是只有通過在實際場景中執(zhí)行任務(wù),才能獲得機(jī)器人可以按預(yù)期方式運行的真實證據(jù)。該章是你深入了解機(jī)器人導(dǎo)航的起點,并且如果你想研究這一領(lǐng)域,這對增加你的知識儲備至關(guān)重要。
第10章通過溫和的方式而非復(fù)雜的數(shù)學(xué)公式介紹機(jī)器人的機(jī)器學(xué)習(xí)主題,并把重點放在了解該領(lǐng)域的常用概念上,這將有
譯者序
前言
作者簡介
審校者簡介
部分 物理機(jī)器人組裝與測試
第1章 組裝機(jī)器人 2
1.1GoPiGo3機(jī)器人介紹 2
1.1.1機(jī)器人技術(shù)角度 3
1.1.2編程角度 3
1.1.3機(jī)器人套件和資源 4
1.2熟悉嵌入式硬件 7
1.2.1GoPiGo3開發(fā)板 7
1.2.2Raspberry Pi 3B 9
1.2.3為什么機(jī)器人需要CPU 10
1.3深入理解機(jī)電 10
1.4整合到一起 17
1.5快速硬件測試 18
1.5.1資源 18
1.5.2DexterOS入門 19
1.5.3用Bloxter編程 20
1.5.4校準(zhǔn)機(jī)器人 20
1.5.5驅(qū)動機(jī)器人 22
1.5.6檢查傳感器 22
1.5.7關(guān)閉機(jī)器人 23
1.6總結(jié) 23
1.7習(xí)題 24
1.8進(jìn)一步閱讀 24
第2章 GoPiGo3的組件測試 25
2.1技術(shù)要求 25
2.2Python和JupyterLab入門 25
2.2.1為GoPiGo3啟動JupyterLab 26
2.2.2硬件測試 29
2.3傳感器和驅(qū)動的組件測試 32
2.3.1快速入門傳感器和電動機(jī) 32
2.3.2機(jī)器人漫游 32
2.3.3距離傳感器 35
2.3.4伺服軟件包 40
2.3.5巡線跟隨器 42
2.3.6IMU 43
2.3.7Raspberry Pi 43
2.3.8GoPiGo3項目 45
2.4總結(jié) 46
2.5習(xí)題 46
2.6進(jìn)一步閱讀 47
第3章 ROS入門 48
3.1技術(shù)要求 48
3.2ROS基本概念 49
3.2.1ROS圖 50
3.2.2roscore 51
3.2.3工作空間和catkin 51
3.3配置ROS開發(fā)環(huán)境 52
3.3.1安裝ROS 52
3.3.2集成開發(fā)環(huán)境 55
3.4ROS節(jié)點之間的通信消息和主題 56
3.4.1創(chuàng)建工作空間 56
3.4.2設(shè)置ROS軟件包 60
3.4.3發(fā)布主題的節(jié)點 62
3.4.4訂閱主題的節(jié)點 65
3.4.5在同一節(jié)點中合并發(fā)布者和訂閱者 67
3.5對ROS使用公開可用的軟件包 69
3.6總結(jié) 69
3.7習(xí)題 70
3.8進(jìn)一步閱讀 70
第二部分 使用Gazebo進(jìn)行
機(jī)器人仿真
第4章 創(chuàng)建虛擬兩輪ROS機(jī)器人 72
4.1技術(shù)要求 72
4.2RViz機(jī)器人可視化入門 73
4.3使用URDF構(gòu)建差動驅(qū)動機(jī)器人 74
4.3.1用于GoPiGo3的URDF概述 75
4.3.2機(jī)器人主體URDF 76
4.3.3左右輪的URDF模型 79
4.4使用RViz在ROS中查看GoPiGo3模型 81
4.4.1理解roslaunch命令 82
4.4.2通過RViz控制GoPiGo3機(jī)器人的車輪 84
4.5URDF模型中的機(jī)器人參考坐標(biāo)系 86
4.6在構(gòu)建時使用RViz查看模型 88
4.6.1在RViz窗口中更改模型的外觀 88
4.6.2使用ROS工具進(jìn)行檢查 89
4.7總結(jié) 90
4.8習(xí)題 90
4.9進(jìn)一步閱讀 91
第5章 使用Gazebo進(jìn)行機(jī)器人行為仿真 92
5.1技術(shù)要求 92
5.2Gazebo仿真器入門 93
5.3修改機(jī)器人URDF 96
5.3.1擴(kuò)展URDF以生成SDF機(jī)器人定義 97
5.3.2碰撞和物理性質(zhì) 97
5.3.3Gazebo標(biāo)簽 99
5.4驗證Gazebo模型并查看URDF 99
5.5移動模型 102
5.6總結(jié) 105
5.7習(xí)題 105
5.8進(jìn)一步閱讀 106
第三部分 使用SLAM進(jìn)行自主導(dǎo)航
第6章 在ROS中編程命令和工具 108
6.1技術(shù)要求 109
6.2設(shè)置物理機(jī)器人 109
6.2.1下載并設(shè)置Ubuntu Mate 18.04 109
6.2.2訪問自定義 110
6.2.3設(shè)置VNC服務(wù)器(x11vnc) 110
6.2.4Geany IDE 112
6.2.5安裝GoPiGo3和DI傳感器的驅(qū)動程序 112
6.2.6設(shè)置Pi Camera 114
6.2.7安裝ROS Melodic 115
6.3ROS編程快速入門 116
6.3.1設(shè)置工作空間 116
6.3.2克隆ROS軟件包 117
6.3.3次執(zhí)行ROS節(jié)點 117
6.4案例研究1:編寫ROS距離傳感器軟件包 118
6.4.1創(chuàng)建一個新軟件包 119
6.4.2編寫自己的源代碼 119
6.5使用ROS命令 125
6.5.1Shell命令 125
6.5.2執(zhí)行命令 126
6.5.3信息命令 127
6.5.4軟件包和catkin工作空間 128
6.6創(chuàng)建并運行發(fā)布者和訂閱者節(jié)點 129
6.7使用roslaunch自動執(zhí)行節(jié)點 131
6.8案例研究2:ROS GUI開發(fā)工具Pi Camera 133
6.8.1使用rqt_graph分析ROS圖 134
6.8.2使用rqt_image_view顯示圖像數(shù)據(jù) 135
6.8.3用rqt_plot繪制傳感器數(shù)據(jù)的時間序列 135
6.8.4使用rqt_bag播放錄制的ROS會話 136
6.9使用ROS參數(shù)自定義機(jī)器人功能 138
6.10總結(jié) 140
6.11習(xí)題 140
6.12進(jìn)一步閱讀 141
第7章 機(jī)器人控制與仿真 142
7.1技術(shù)要求 142
7.2設(shè)置GoPiGo3開發(fā)環(huán)境 143
7.3案例研究3:使用鍵盤進(jìn)行遠(yuǎn)程控制 146
7.3.1在機(jī)器人中運行g(shù)opigo3節(jié)點 146
7.3.2遙控軟件包 149
7.3.3在筆記本電腦上運行遠(yuǎn)程操作 149
7.4使用ROS主題進(jìn)行遠(yuǎn)程控制 151
7.4.1運動控制主題/cmd_vel 151
7.4.2使用/cmd_vel直接驅(qū)動GoPiGo3 152
7.4.3檢查GoPiGo3的X、Y和Z軸 154
7.4.4組合運動 154
7.5遠(yuǎn)程控制物理和虛擬機(jī)器人 155
7.5.1將ROS主節(jié)點還原到本地計算機(jī) 155
7.5.2用Gazebo仿真GoPiGo3 156
7