Preface前言
本書第3版全面地介紹了ROS和各種工具。ROS是一個先進的機器人操作系統(tǒng)框架,目前已有數(shù)百個研究團體和公司將其應用在機器人行業(yè)中。更重要的是,對于機器人技術的非專業(yè)人士和學生來說,它也相對容易上手。在本書中,你將了解如何安裝ROS,如何使用ROS的基本工具和框架中不同的功能。
在閱讀本書的過程中無須使用任何特殊的設備。書中每一章都附帶了一系列的源代碼示例和教程,你可以在自己的計算機上運行。這是你唯一需要做的事情。
當然,我們還會告訴你如何使用硬件,這樣可以將你的算法應用到現(xiàn)實環(huán)境中。我們在選擇設備時特意選擇一些業(yè)余用戶購買得起的設備,同時涵蓋了在機器人研究中最典型的傳感器和執(zhí)行器。
最后,展示ROS具有使整個機器人在實際或虛擬環(huán)境中工作的能力。你將學習如何創(chuàng)建自己的機器人并通過Gazebo仿真環(huán)境集成它。此外,如果使用Gazebo仿真環(huán)境,你將能夠在虛擬環(huán)境中運行一切。本書將帶你從不同方面探索如何創(chuàng)建機器人,例如使用計算機視覺或點云分析傳感器感知世界,使用強大的導航功能包集在環(huán)境中實現(xiàn)導航,甚至能夠用MoveIt!包控制機械臂與周圍環(huán)境交互。讀完本書后,你會發(fā)現(xiàn)已經(jīng)可以使用ROS機器人進行工作了,并理解其背后的原理,我們衷心希望你能全面了解ROS在開發(fā)機器人系統(tǒng)時所提供的無限可能性。
主要內(nèi)容
第1章介紹安裝ROS最簡單的方法,以及如何在不同平臺上安裝ROS,本書使用的版本是ROSKinetic。這一章還會說明如何從Debian包安裝或從源代碼進行編譯安裝,以及在虛擬機、Docker和ARMCPU中安裝。
第2章討論ROS框架及相關的概念和工具。該章介紹節(jié)點、主題和服務,以及如何使用它們,還將通過一系列示例說明如何調(diào)試節(jié)點或利用可視化方法直觀地查看通過主題發(fā)布的消息。
第3章進一步展示ROS強大的調(diào)試工具,以及通過對節(jié)點主題的圖形化將節(jié)點間的通信數(shù)據(jù)可視化。ROS提供了一個日志記錄API來輕松地診斷節(jié)點的問題。事實上,在使用過程中,我們會看到一些功能強大的圖形化工具(如rqt_console和rqt_graph),以及可視化接口(如rqt_plot和rviz)。最后介紹如何使用rosbag和rqt_bag記錄并回放消息。
第4章介紹在ROS中實現(xiàn)機器人的第一步是創(chuàng)建一個機器人模型,包括在Gazebo仿真環(huán)境中如何從頭開始對一個機器人進行建模和仿真,并使其在仿真環(huán)境中運行。你也可以仿真攝像頭和激光測距傳感器等傳感器,為后續(xù)學習如何使用ROS的導航功能包集和其他工具奠定基礎。
第5章是關于ROS導航功能包集中的其中一章。該章介紹如何為方便機器人使用導航功能包集進行初始化配置。然后用幾個例子對導航功能包集進行說明。
第6章延續(xù)第5章的內(nèi)容,介紹如何使用導航功能包集使機器人有效地自主導航。該章介紹使用ROS的Gazebo仿真環(huán)境和RViz創(chuàng)建一個虛擬環(huán)境,在其中構(gòu)建地圖、定位機器人并用障礙回避做路徑規(guī)劃。
第7章討論ROS中移動機器人機械臂的一個工具包。該章包含安裝這個包所需要的文檔,以及使用MoveIt!操作機械臂進行抓取、放置、簡單的運動規(guī)劃等任務的演示示例。
第8章介紹ROS與現(xiàn)實世界如何連接。這一章介紹在ROS下使用的一些常見傳感器和執(zhí)行器,如激光雷達、伺服電動機、攝像頭、RGB-D傳感器、GPS等。此外,還會解釋如何使用嵌入式系統(tǒng)與微控制器(例如非常流行的Arduino開發(fā)板)。
第9章介紹ROS對攝像頭和計算機視覺任務的支持。首先使用FireWire和USB攝像頭驅(qū)動程序?qū)z像頭連接到計算機并采集圖像。然后,就可以使用ROS的標定工具標定攝像頭。該章會詳細介紹和說明什么是圖像管道,討論如何使用集成了OpenCV的多個機器視覺API。最后,安裝并使用一個視覺里程計軟件。
第10章將展示如何在ROS節(jié)點中使用點云庫(PointCloudLibrary,PCL)。該章從基本功能入手,如讀或?qū)慞CL數(shù)據(jù)片段以及發(fā)布或訂閱這些消息所必需的轉(zhuǎn)換。然后,將在不同節(jié)點間創(chuàng)建一個管道來處理3D數(shù)據(jù),以及使用PCL進行縮減采樣、過濾和搜索特征點。
預備知識
我們寫作本書的目的是讓每位讀者都可以完成本書的學習并運行示例代碼。基本上,你只需要在計算機上安裝一個Linux發(fā)行版。雖然每個Linux發(fā)行版應該都能使用,但還是建議你使用Ubuntu16.04LTS。這樣你可以根據(jù)第1章的內(nèi)容安裝ROSKinetic。
對于硬件要求,一般來說,任何臺式計算機或筆記本電腦都滿足。但是,最好使用獨立顯卡來運行Gazebo仿真環(huán)境。此外,最好有足夠的外圍接口,因為這樣你可以連接幾個傳感器和執(zhí)行器,包括攝像頭和Arduino開發(fā)板。
你還需要Git(git-coreDebian包),以便從本書提供的源代碼中復制軟件庫。同樣,你需要具備Bash命令行、GNU/Linux工具的基本知識和一些C/C++編程技巧。
目標讀者
本書的目標讀者包括所有機器人開發(fā)人員,可以是初學者也可以是專業(yè)人員。它涵蓋了整個機器人系統(tǒng)的各個方面,展示了ROS如何幫助開發(fā)人員完成使機器人真正自主化的任務。對于聽說過卻從未使用過ROS的機器人專業(yè)學生或科研人員來說,本書將是非常有益的。ROS初學者能從本書中學習ROS軟件框架的很多先進理念和工具。不僅如此,經(jīng)常使用ROS的用戶也可能從某些章節(jié)中學習到一些新東西。當然,只有前3章是純粹為初學者準備的,所以那些已經(jīng)使用過ROS的人可以跳過這三章直接閱讀后面的章節(jié)。
源代碼和彩色圖片下載
本書源代碼可以從華章官網(wǎng)www.hzbook.com下載。
作者簡介AbouttheAuthors
AnilMahtani是一名主要從事水下機器人工作研發(fā)的計算機科學家。他第一次在該領域工作是在完成碩士論文期間為低成本ROV開發(fā)軟件架構(gòu)。在此期間,他也成為AVORA的團隊領導者和主要開發(fā)人員,這個大學生團隊設計開發(fā)了一個自主水下航行器并參加了2012年的歐洲學生自主水下航行器設計挑戰(zhàn)賽(StudentAutonomousUnderwaterChallenge-Europe,SAUC-E)。同年,他完成了論文并獲得了拉斯帕爾馬斯大學的計算機科學碩士學位。此后不久,他成為SeeByte公司的軟件工程師,這家公司是水下系統(tǒng)智能軟件解決方案的全球領導者。在2015年,他加入SecureWorks公司,任職軟件工程師,在那里他應用相關知識和技術開發(fā)入侵檢測和預防系統(tǒng)。
在SeeByte公司工作期間,Anil參與了軍方、石油和天然氣公司的一些半自主和自主水下系統(tǒng)的核心開發(fā)。在這些項目中,他積極參與自主系統(tǒng)開發(fā)、分布式軟件體系結(jié)構(gòu)設計和底層軟件開發(fā),同時也為前視聲吶圖像提供計算機視覺解決方案。他還獲得了項目經(jīng)理職位,管理一個開發(fā)和維護內(nèi)核C++庫的工程師團隊。
他的專業(yè)興趣主要包括軟件工程、算法、數(shù)據(jù)結(jié)構(gòu)、分布式系統(tǒng)、網(wǎng)絡和操作系統(tǒng)。Anil在機器人方向主要負責提供高效和健壯的軟件解決方案,不僅解決當前存在的問題,還預見未來的問題或可能的改進。鑒于他的經(jīng)驗,他在計算機視覺、機器學習和控制問題上也有獨特的見解。Anil對DIY和電子學感興趣,并且開發(fā)了一些Arduino庫回饋社區(qū)。
首先,我要感謝家人和朋友的支持,他們總是在我最需要的時候幫助我。我還要感謝我的女友Alex的耐心支持,她是我靈感的源泉。最后,我要感謝我的同事IhorBilyy和DanGood,在我軟件工程師職業(yè)生涯中他們以專業(yè)的方式教會我很多知識。
LuisSánchez在拉斯帕爾馬斯大學獲得了電子與電信工程的雙碩士學位。他曾在技術開發(fā)和創(chuàng)新研究所(IDETIC)、加那利群島海洋平臺(PLOCAN)和應用微電子研究所(IUMA)與不同的研究小組合作,進行超分辨率算法成像研究。
他的專業(yè)興趣包括應用于機器人系統(tǒng)的計算機視覺、信號處理和電子設計。因此,他加入了AVORA團隊,這批年輕的工程師和學生從零開始從事自主水下航行器(AUV)的開發(fā)工作。在這個項目中,Luis開始開發(fā)聲學和計算機視覺系統(tǒng),用于提取不同傳感器的信息,例如水聽器、聲吶和攝像頭。
依托海洋技術的強大背景,Luis與人合作創(chuàng)辦了一家新的初創(chuàng)公司SubseaMechatronics,致力于為水下環(huán)境開發(fā)遙控操作和自主航行器。
下面是海洋技術工程師和企業(yè)家(LPAFabrika:GranCanariaMakerSpace的聯(lián)合創(chuàng)始人和制造商)DarioSosaCabrera對Luis的評價:
“他很熱情,是一個跨多學科的工程師。他對工作負責,自制力強,并承擔一個團隊領導者的責任,這在euRathlon比賽中充分展現(xiàn)了出來。他在電子和電信領域的背景讓其具備從信號處理和軟件到電子設計和制造的廣泛專業(yè)知識。”
Luis作為技術審校者參與了Packt出版社出版的《LearningROSforRoboticsProgramming》的相關工作以及第2版的撰寫工作。
首先,我要感謝Aaron、Anil以及Enrique邀請我參與編寫這本書。同他們一起工作非常快樂。同時,我也要感謝水下機電團隊關于重型水下機器人的豐富經(jīng)驗,這些年我們一起成長。我必須提到LPAFabrika:GranCanariaMakerSpace,他們滿腔熱忱地準備和引導教學機器人及技術項目,與他們共同工作的時光也非常開心。
最后,我要感謝家人和女友對我參與的每個項目的大力支持和鼓勵。我以此書獻給他們。
EnriqueFernández具有計算機工程博士學位和機器人學研究背景。他的博士論文解決了自主水下滑翔器(AUG)的路徑規(guī)劃問題,他還研究了SLAM、感知、視覺、控制等機器人學課題。在讀博士期間,他加盟了赫羅納大學的CIRS/ViCOROB水下機器人研究中心,在那里他為AUV開發(fā)了視覺SLAM和INS模塊。他在2012年參加了SAUC-E并獲獎,在2013年作為合作者參與了SAUC-E。
攻讀博士學位期間,Enrique在機器人頂級會議和期刊上發(fā)表了多篇論文,其中包括國際機器人和自動化會議(InternationalConferenceofRoboticsandAutomation,ICRA)。他也合作編寫了一些ROS書籍和章節(jié)。
之后,Enrique作為SLAM工程師在2013年6月加盟PALRobotics公司。在那里,他開發(fā)了用于REEM、REEM-C仿人型機器人的ROS軟件,也繼續(xù)為開源社區(qū)(主要是ROS控制軟件庫)做貢獻,目前仍是其中一名維護人員。在2015年,他加盟ClearpathRobotics公司的自主系統(tǒng)部門,從事感知算法開發(fā)相關工作。他曾經(jīng)在通用電氣公司(GeneralElectric)和約翰迪爾(JohnDeere)等多家大型工業(yè)公司的設施中負責部署工業(yè)移動機器人OTTO1500和OTTO100軟件的運行。
我要感謝本書的合著者,感謝他們?yōu)橥瓿杀緯冻龅呐σ约疤峁┝藷o數(shù)示例的代碼。我還要感謝拉斯帕爾馬斯大學研究組和水下機器人研究中心(CenterofUnderwaterRoboticsResearch,CIRS/ViCOROB)的研究小組成員。我也要感謝在PALRobotics公司的同事,在那里我學到很多關于ROS、機器人運動以及仿人雙足機器人的知識,不僅有軟件,還有電子和硬件設計。此外,我還要感謝在ClearpathRobotics的同事們,在這里我掌握了ROS并參與了為工業(yè)4.0銷售的24/7全天候運行自動駕駛機器人的軟件開發(fā)。最后,我要感謝我的家人和朋友的幫助與支持,特別是Eva。
AaronMartinez是數(shù)字化制造領域的計算機工程師、企業(yè)家和專家。他于2010年在拉斯帕爾馬斯大學的IUCTC(InstitutoUniversitariodeCienciasyTecnologiasCiberneticas)完成碩士論文。他在遠程監(jiān)控領域使用沉浸式設備和機器人平臺準備碩士論文。獲得學位后,他參加了在奧地利林茨約翰開普勒大學研究所的機器人學實習計劃。在實習期間,他作為團隊的一員使用ROS和導航包集進行移動平臺開發(fā)。之后,他參與了有關機器人的項目,其中一個是拉斯帕爾馬斯大學的AVORA項目。在這個項目中,他參與自主水下航行器制作,并參與意大利的SAUC-E。2012年,他負責維護這個項目;2013年,他幫助從ROS向機器人平臺移植導航包集和其他算法。
最近,Aaron與人共同創(chuàng)立了一家名為SubSeaMechatronicsSL的公司。這家公司從事與水下機器人和遙控系統(tǒng)相關的項目,還設計和制造水下傳感器。公司的主要目標是開發(fā)用于研發(fā)原型和重型機械手的定制解決方案。
Aaron有許多領域的經(jīng)驗,比如編程、機器人、機電一體化、數(shù)字化制造以及Arduino、BeagleBone、服務器和激光雷達等設備。如今,他在SubSeaMechatronicsSL公司從事水下和空中環(huán)境的機器人平臺設計。
我要感謝我的女友,她在我寫這本書時支持我并且給我繼續(xù)成長的動力。我還要感謝DonatoMonopoli(加那利群島技術研究所(ITC)生物醫(yī)學工程部門的主管),以及ITC所有的工作人員,感謝他們使我懂得數(shù)字制造、機械以及工程組織,我在此度過了生命中最美好的時光。
感謝我大學的同事,特別是AlexisQuesada,他給了我在準備碩士論文時創(chuàng)建第一個機器人的機會。同他們一起工作,使我學習到很多關于機器人的知識。
最后,我要感謝家人和朋友的幫助與支持。
AbouttheReviewers審校者簡介
LentinJoseph是印度QboticsLabs(http://www.qboticslabs.com)的創(chuàng)始人兼首席執(zhí)行官、作家、企業(yè)家、電子工程師、機器人愛好者、機器視覺專家、嵌入式程序員。
他在印度喀拉拉的聯(lián)邦理工學院(FISAT)獲電子學和通信工程學士學位。在工程項目的最后一年,他制作了一個可以與人交互的社交機器人(http://www.technolabsz.com/2012/07/social-robot-my-final-year.html)。項目取得了巨大的成功,被視覺和印刷媒體多次報道。該機器人的主要特點是可以與人交流并智能回復,同時具有一定的圖像處理能力,如面部、動作和顏色檢測。整個項目使用Python編程語言實現(xiàn)。他對機器人、圖像處理和Python的興趣從此開始。
畢業(yè)后,他在一家專門從事機器人和圖像處理的創(chuàng)業(yè)公司工作了3年。同時,他學習了主流的機器人軟件平臺,如機器人操作系統(tǒng)(ROS)、V-REP、Actin(機器人仿真工具),以及圖像處理庫,如OpenCV、OpenNI和PCL。他還了解Arduino和TivaLaunchpad上的機器人三維設計和嵌入式編程。
在積累3年的工作經(jīng)驗后,他創(chuàng)立了一家名叫QboticsLabs的新公司,主要從事研究工作,在機器人和機器視覺等領域開發(fā)一些優(yōu)秀的產(chǎn)品。他負責維護個人網(wǎng)站(http://www.lentinjoseph.com)和一個名為technolabsz的技術博客(http://www.technolabsz.com)。他在科技博客上發(fā)布作品。他也是印度PyCon2013的演講者,主題是“使用Python的學習機器人”(LearningRoboticsusingPython)。
Lentin是《LearningRoboticsusingPython》(更多內(nèi)容參考http://learn-robotics.com)和《MasteringROSforRoboticsProgramming》(更多內(nèi)容參考http://mastering-ros.com)的作者,這兩本書都由Packt出版社出版。第一本書的主題是使用ROS和OpenCV構(gòu)建自主移動機器人。這本書是在ICRA2015上推出的,并在ROS博客Robohub、OpenCV、Python網(wǎng)站以及其他相關論壇上推廣。第二本書是掌握機器人操作系統(tǒng)(ROS)的工具書,也在ICRA2016上推出,它是最暢銷的ROS書籍之一。
作為ICRA2016的一部分,Lentin及其團隊獲得了HRATC2016挑戰(zhàn)賽的冠軍,同時他也是ICRA2015挑戰(zhàn)賽HRATC決賽的入圍者(http://www.icra2016.org/conference/challenges/)。