精通ROS機(jī)器人編程(原書第2版) 》(ros機(jī)器人編程實(shí)戰(zhàn) pdf)

      網(wǎng)友投稿 2239 2025-03-31

      機(jī)器人設(shè)計(jì)與制作系列

      精通ROS機(jī)器人編程

      (原書第2版)

      Mastering ROS for Robotics Programming, Second Edition

      [印度]郎坦·約瑟夫(Lentin Joseph)

      [意大利]喬納森·卡卡切(Jonathan Cacace) 著

      張新宇 張志杰 等譯

      The Translator’s Words  譯者序

      背景

      未來20年,中國的科技將逐步從模仿、跟隨、追趕,過渡到引領(lǐng)世界,成為創(chuàng)新引擎。構(gòu)建科技核心競爭力的唯一之路是人才的培養(yǎng)。

      正是意識到了機(jī)器人相關(guān)人才的重要性和緊迫性,我們從2015年開始舉辦全國“機(jī)器人操作系統(tǒng)(ROS)及其應(yīng)用暑期學(xué)校”。2015年有近200人參與,現(xiàn)場非常火爆,很多人坐在地板上聽,甚至有人站在門口聽。2016年的ROS暑期學(xué)校,網(wǎng)上有500人報(bào)名,現(xiàn)場有100多人報(bào)名。加上2017年300人左右的規(guī)模,2018年400多人的規(guī)模,四年時(shí)間有千余人參加過我們的ROS暑期學(xué)校。除此之外,易科機(jī)器人實(shí)驗(yàn)室、ROS小課堂、泡泡機(jī)器人、ROS星火計(jì)劃、古月居的在線課程至少影響了4000~5000人。這樣的趨勢如果能夠保持下去,再過5年,就會形成3萬~5萬人的學(xué)習(xí)團(tuán)體。現(xiàn)在機(jī)器人產(chǎn)業(yè)的窗口逐漸打開,隨著產(chǎn)業(yè)的發(fā)展、需求的推動、資本的介入,將形成強(qiáng)大的牽引力。現(xiàn)在有不少機(jī)器人公司,其中一些公司一開始只有2~3人,逐漸發(fā)展成5~6人,然后20~30人,如果他們能夠堅(jiān)持下去,也有可能發(fā)展成100~200人的規(guī)模。如果300~500人中有一位杰出代表愿意帶領(lǐng)大家,3萬~5萬人中就有100位這樣的代表。在國家層面的推動下,通過建立一批機(jī)器人學(xué)院和人工智能學(xué)院,15年后,將形成10萬左右的機(jī)器人、人工智能工程師隊(duì)伍,另外還有50萬左右相關(guān)學(xué)科領(lǐng)域的工程師輔助。如果了解信息產(chǎn)業(yè)的發(fā)展過程,就會比較清楚,現(xiàn)在基本上每個(gè)大學(xué)都有計(jì)算機(jī)學(xué)院、信息學(xué)院或軟件學(xué)院,這樣的過程也會發(fā)生在機(jī)器人、人工智能方向上。

      從地理位置的角度來講,以上海為中心的長江三角洲和以深圳、香港、廣東、珠海、東莞、中山等城市構(gòu)建的大灣區(qū)將是未來機(jī)器人、人工智能領(lǐng)域的科技創(chuàng)新中心。江浙滬一帶有很多經(jīng)濟(jì)發(fā)展很好的城市,而且聚集了很多有名的大學(xué)。最主要的是這些大學(xué)的畢業(yè)生很多都會留下來,聚集在這里;行業(yè)內(nèi)的企業(yè)也會聚集在這里。

      ROS正是影響整個(gè)機(jī)器人產(chǎn)業(yè)的靈魂,很多人還沒有做好準(zhǔn)備,還沒有意識到是怎么回事,就不得不與ROS牽連在一起,卷入一場巨大的洪流中。

      學(xué)習(xí)ROS的10大理由

      過去幾年里,ROS 在工業(yè)上的應(yīng)用取得非常好的發(fā)展勢頭。這一方面得益于工業(yè)機(jī)器人領(lǐng)域長期的積累,另一方面得益于ROS內(nèi)在的優(yōu)勢。若干年后,ROS毫無疑問將成為機(jī)器人工程師的必備技能,機(jī)器人領(lǐng)域的從業(yè)人員沒有人能回避ROS。下面列出學(xué)習(xí)ROS的10大理由。

      1)ROS是開源免費(fèi)的

      ROS于2007年誕生于斯坦福大學(xué)人工智能實(shí)驗(yàn)室,2008年至2013年期間由柳樹車庫研發(fā),并逐漸形成開源生態(tài)系統(tǒng)。ROS使用BSD許可證,可以免費(fèi)用于研究和商業(yè)項(xiàng)目,任何人或者任何組織都可以對ROS的源碼進(jìn)行修改,并且可以選擇開源,也可以選擇不開源。

      2)大量算法在ROS中已經(jīng)實(shí)現(xiàn)

      ROS的最大魅力在于其集成了許多先進(jìn)的機(jī)器人算法,同時(shí)為非常多的工具提供了接口。ROS中基于物理的仿真環(huán)境Gazebo可以模擬機(jī)器人運(yùn)動學(xué)、動力學(xué)分析以及環(huán)境中的很多物理特性。又如,ROS可以與計(jì)算機(jī)視覺算法OpenCV進(jìn)行通信。另外,點(diǎn)云庫PCL實(shí)現(xiàn)了大量點(diǎn)云相關(guān)的通用算法和高效數(shù)據(jù)結(jié)構(gòu),包括點(diǎn)云獲取、濾波、分割、配準(zhǔn)、檢索、特征提取、識別、追蹤、曲面重建、可視化等。運(yùn)動規(guī)劃庫MoveIt!可以提供有效的規(guī)劃算法,用于多種機(jī)器人的運(yùn)動規(guī)劃。MoveIt! 模塊也已經(jīng)被整合到了ROS框架中。

      3)學(xué)習(xí)使用ROS的人越來越多

      ROS提供松散耦合的基礎(chǔ)通信中間件、業(yè)界先進(jìn)的算法庫、統(tǒng)一標(biāo)準(zhǔn)的軟件接口、完善的教程、龐大的社區(qū)等,使ROS的學(xué)習(xí)對入門者越來越友好。而對于ROS開發(fā)者而言,ROS提供的業(yè)內(nèi)領(lǐng)先的資源可以讓他們輕松地搭建起自己的機(jī)器人系統(tǒng),極大地縮減了開發(fā)周期。對研究人員而言,ROS提供的仿真環(huán)境可以用來方便地驗(yàn)證新算法,而與ROS相配套的硬件系統(tǒng)則可以輕松地在現(xiàn)實(shí)情況中驗(yàn)證算法是否有效,從而不必糾結(jié)于軟硬件平臺的搭建。基于這些特點(diǎn),ROS自誕生之日起就開始迅速發(fā)展。在世界各地開展了形式多樣的ROS學(xué)習(xí)活動,包括我們前面提過的連續(xù)四年舉辦的全國“機(jī)器人操作系統(tǒng)(ROS)及其應(yīng)用暑期學(xué)校”。

      4)ROS已成為機(jī)器人系統(tǒng)基礎(chǔ)軟件的標(biāo)準(zhǔn)

      隨著機(jī)器人應(yīng)用浪潮的掀起,越來越多的人力和物力投入到了這片看似美妙的汪洋大海中。與之伴隨的是,機(jī)器人應(yīng)用軟件的蓬勃發(fā)展。與傳統(tǒng)工業(yè)機(jī)器人廠商不同,ROS自誕生之初就嘗試建立機(jī)器人系統(tǒng)基礎(chǔ)軟件的標(biāo)準(zhǔn),而不是在各自的自留地內(nèi)封閉式發(fā)展。這背后的深層原因是,解決機(jī)器人軟件問題是一個(gè)極其龐大而復(fù)雜的工程,應(yīng)該把精力放在解決新的問題上,而不是重復(fù)地造基礎(chǔ)軟件的輪子。經(jīng)過多年的發(fā)展,ROS也實(shí)現(xiàn)了其創(chuàng)造之初被寄予的期望,已然成為廣泛使用的機(jī)器人系統(tǒng)基礎(chǔ)軟件的標(biāo)準(zhǔn),在學(xué)術(shù)界得到了廣泛使用,在工業(yè)界也開始嶄露頭角。

      5)ROS有較好的易用性,而且越來越好

      ROS從一開始連基本的維基頁面都不完善,到現(xiàn)在擁有大量的教程和完善的多語言維基,一步一步地提高易用性。

      但是ROS的開發(fā)者們沒有止步于此,在經(jīng)歷了ROS版本的巨大成功之后,OSRF團(tuán)隊(duì)開始進(jìn)行ROS 2的研究。OSRF重新編寫了核心系統(tǒng),主要目標(biāo)是改善在不同組件之間交換信息的分布式計(jì)算機(jī)系統(tǒng)。ROS 2將會更好地支持小型嵌入式設(shè)備,支持多機(jī)器人協(xié)同工作并增加系統(tǒng)實(shí)時(shí)性。

      6)模塊化設(shè)計(jì),節(jié)點(diǎn)獨(dú)立性,使協(xié)作開發(fā)非常方便

      ROS使用分布式處理框架。采用若干類型的通信,包括基于服務(wù)的同步RPC(遠(yuǎn)程過程調(diào)用)通信、基于話題的異步數(shù)據(jù)流通信,還有參數(shù)服務(wù)器上的數(shù)據(jù)存儲。這些特點(diǎn)使可執(zhí)行文件能單獨(dú)設(shè)計(jì),并且在運(yùn)行時(shí)松散耦合。程序可以封裝到軟件包和軟件包集中,以便共享和分發(fā)。ROS還支持代碼庫的協(xié)同,這使得協(xié)作亦能被分發(fā)。

      7)大量硬件設(shè)備、傳感器、驅(qū)動器和機(jī)器人平臺支持ROS

      目前ROS支持上百種機(jī)器人平臺,包括著名的PR2機(jī)器人、UR5機(jī)械臂等。在這些機(jī)器人平臺上,使用ROS可以方便地進(jìn)行機(jī)器人開發(fā)。

      同時(shí),ROS可以很好地支持各種類型的傳感器,包括各種攝像頭(如Kinect深度攝像頭、單目攝像頭、雙目攝像頭等)和雷達(dá)(如激光雷達(dá)、超聲波雷達(dá)等)。由于ROS是基于Linux的,所以在大部分Linux的平臺上也可以運(yùn)行ROS,如ROS可以在ARM核心板BeagleBoard上運(yùn)行。所以ROS提供對嵌入式平臺的固有支持。

      8)你的競爭對手已經(jīng)開始使用ROS

      ROS的蓬勃發(fā)展,讓它成為新興的資本寵兒。截至2015年,全球約有1.5億美元的風(fēng)險(xiǎn)投資注入與ROS相關(guān)的項(xiàng)目。可以看到,目前機(jī)器人創(chuàng)業(yè)公司大多數(shù)會將自己的原型方案架設(shè)在ROS上,并且新興的機(jī)器人廠商也以支持ROS作為一個(gè)主要的賣點(diǎn)。

      與此同時(shí),一些傳統(tǒng)的廠商也開始加入ROS的陣營。ROS Industrial是一個(gè)致力于把ROS推向工業(yè)界的ROS分支,目前已經(jīng)得到3M、ABB、BMW、Ford、Boeing、Siemens等傳統(tǒng)強(qiáng)勢企業(yè)的支持。

      在學(xué)術(shù)界,ROS的使用更為廣泛。在DARPA機(jī)器人挑戰(zhàn)賽中有18支參賽隊(duì)伍使用ROS,包括NASA的Robonaut。

      9)ROS能讓你快速啟動機(jī)器人項(xiàng)目的開發(fā)

      開發(fā)一個(gè)機(jī)器人項(xiàng)目是一個(gè)綜合性問題,異常復(fù)雜。從軟件層面來看,它包含了最底層的硬件抽象(各種設(shè)備驅(qū)動等)、設(shè)備控制、通信、上層算法、應(yīng)用系統(tǒng)等。任何一個(gè)公司都不可能獨(dú)立完整地解決一切問題。經(jīng)過多年的努力,ROS提供了一整套軟硬件解決方案,開發(fā)者們可以專注于解決特定的問題,而無須花費(fèi)精力構(gòu)建整個(gè)平臺。只需要一臺可以運(yùn)行Ubuntu的電腦,就可以進(jìn)行機(jī)器人開發(fā)的測試仿真。ROS支持上百種機(jī)器人平臺,讓實(shí)際的機(jī)器人測試也變得十分方便。

      10)ROS的未來很光明

      人類社會正在快速向前發(fā)展,機(jī)器人領(lǐng)域也一直在不斷革新。作為一個(gè)開源的基礎(chǔ)機(jī)器人軟件系統(tǒng),ROS毫無疑問會成為這場變革的助推劑。我們看到,越來越多的初創(chuàng)公司開始轉(zhuǎn)向ROS,并利用ROS提供的完善的軟件系統(tǒng)快速地搭建起機(jī)器人平臺。越來越多的傳統(tǒng)大公司也注意到了這一變化,他們的產(chǎn)品也開始支持ROS。

      所有這一切,都預(yù)示著ROS有光明的前途。

      接受翻譯任務(wù)

      在整個(gè)翻譯過程中,我翻譯了第1章,張志杰翻譯了第2章及第9~13章,劉彬翻譯了第3章和第4章,鄒玉龍翻譯了第5章、第6章及第14章,郭宗芝翻譯了第7章、第8章及第15章。我與張志杰,及一些朋友負(fù)責(zé)審閱了所有章節(jié)。最后,由我對全書進(jìn)行了修改潤色,統(tǒng)稿整理。從這次翻譯的經(jīng)歷,我們都體會到科學(xué)技術(shù)圖書的翻譯是一項(xiàng)巨大的挑戰(zhàn)。當(dāng)譯稿終于要交付的時(shí)候,所有人都松了一口氣。所有參與翻譯的譯者都付出了大量的時(shí)間和精力,所有這些努力都無法用金錢來衡量。面對一項(xiàng)偉大的科技變革,任何付出都是值得的。

      我還要特別感謝家人對我翻譯本書的支持。

      張新宇

      2018年11月

      Preface  前 言

      機(jī)器人操作系統(tǒng)(Robot Operating System,ROS)本質(zhì)是機(jī)器人系統(tǒng)的中間件,可幫助開發(fā)人員編寫機(jī)器人應(yīng)用程序,現(xiàn)已被機(jī)器人公司、研究機(jī)構(gòu)和大學(xué)廣泛采用。本書主要介紹ROS框架的高級概念,特別適合已經(jīng)熟悉ROS基本概念的讀者。但是,第1章還是簡要介紹了ROS的基本概念,以幫助初學(xué)者快速入門。讀者將了解新機(jī)器人的軟件包生成、機(jī)器人建模、設(shè)計(jì)等,以及利用ROS框架對機(jī)器人進(jìn)行仿真、與ROS連接。這里使用的是高級的仿真軟件和ROS工具,這些工具可以輔助機(jī)器人導(dǎo)航、控制和傳感器可視化。最后,讀者將學(xué)習(xí)如何使用ROS底層控制器、小節(jié)點(diǎn)(nodelet)和插件等重要概念。讀者可以使用普通計(jì)算機(jī)來運(yùn)行本書中的大部分示例,而無須任何特殊硬件。但是,在本書的某些章節(jié)中將討論如何使用特殊硬件將ROS與外部傳感器、驅(qū)動器和I/O開發(fā)板一起使用。

      本書是按照如下順序來組織的。在介紹了ROS的基本概念之后,開始討論如何對機(jī)器人進(jìn)行建模和仿真。Gazebo和V-REP仿真器將用于控制機(jī)器人建模并與之交互,還將用于連接機(jī)器人與MoveIt!和ROS導(dǎo)航軟件包。然后討論ROS插件、控制器和小節(jié)點(diǎn)。最后,本書還會討論如何將Matlab和Simulink軟件與ROS連接。

      本書的讀者對象

      本書為有激情的機(jī)器人開發(fā)人員或想充分利用ROS功能的研究人員而寫。本書也適合已經(jīng)熟悉典型機(jī)器人應(yīng)用的用戶,或者想要進(jìn)階學(xué)習(xí)ROS,學(xué)習(xí)如何建模、構(gòu)建、控制自己機(jī)器人的用戶。如果你想輕松理解本書的所有內(nèi)容,強(qiáng)烈建議你先掌握GNU/Linux和C++編程的基礎(chǔ)知識。

      本書主要內(nèi)容

      第1章介紹ROS的核心基本概念。

      第2章解釋如何使用ROS軟件包。

      第3章討論兩類機(jī)器人的設(shè)計(jì):一類是七自由度(7-DOF)機(jī)械臂,另一類是差速驅(qū)動機(jī)器人。

      第4章討論7-DOF機(jī)械臂、差速輪式機(jī)器人和ROS控制器的仿真,這些控制器有助于控制Gazebo中的機(jī)器人關(guān)節(jié)。

      第5章介紹如何使用V-REP仿真器和vrep_plugin將ROS連接到仿真場景中。然后討論7-DOF機(jī)械臂和差速移動機(jī)器人的控制。

      第6章介紹如何使用ROS MoveIt!和導(dǎo)航軟件包集的現(xiàn)有功能,如機(jī)器人機(jī)械臂運(yùn)動控制和機(jī)器人自主導(dǎo)航。

      第7章展示ROS中的一些高級概念,例如ROS pluginlib、小節(jié)點(diǎn)和Gazebo插件。本章還將討論每個(gè)概念的功能和應(yīng)用,并通過一個(gè)示例介紹其工作原理。

      第8章展示如何為類似于PR2的機(jī)器人編寫基本的ROS控制器。在創(chuàng)建控制器后,我們將使用Gazebo中的PR2來運(yùn)行控制器。與此同時(shí),我們還將看到如何為RViz創(chuàng)建插件。

      第9章討論一些硬件組件(如傳感器和執(zhí)行器)與ROS的接口。我們將看到如何使用I/O開發(fā)板(如Arduino、樹莓派和Odroid-XU4)與ROS的傳感器通信。

      第10章討論如何使用ROS連接各種視覺傳感器,并利用開源計(jì)算機(jī)視覺庫(OpenCV)和點(diǎn)云庫(PCL)與AR Markers一起對其進(jìn)行編程。

      第11章介紹如何構(gòu)建具有差速驅(qū)動器配置的自主移動機(jī)器人,并將其與ROS連接。

      第12章討論MoveIt!的功能,例如碰撞規(guī)避,使用3D傳感器進(jìn)行感知、抓握、拾取和放置。在此之后,我們將學(xué)習(xí)如何將機(jī)器人控制器硬件與MoveIt!連接。

      第13章討論如何將Matlab和Simulink軟件與ROS連接。

      第14章幫助大家了解和安裝ROS中的ROS-Industrial軟件包。我們將學(xué)習(xí)如何為工業(yè)機(jī)器人開發(fā)MoveIt! IKFast插件。

      第15章討論如何在Eclipse IDE中設(shè)置ROS開發(fā)環(huán)境,并介紹ROS中的最佳實(shí)戰(zhàn)經(jīng)驗(yàn)與調(diào)試技巧。

      如何學(xué)習(xí)本書

      為了運(yùn)行本書中的示例,你需要一臺運(yùn)行Linux系統(tǒng)的計(jì)算機(jī)。這里推薦安裝的Linux發(fā)行版是Ubuntu 16.04,Debian 8也可以。建議計(jì)算機(jī)配置至少有4GB的內(nèi)存和一款性能優(yōu)異的處理器(Intel i系列)來執(zhí)行Gazebo仿真和圖像處理算法。

      讀者甚至可以在Windows系統(tǒng)上托管的虛擬機(jī)或VMware軟件上安裝Linux系統(tǒng),在這樣的虛擬系統(tǒng)中也可以工作。但這種選擇的缺點(diǎn)是需要更多的計(jì)算資源來運(yùn)行示例,并且當(dāng)ROS與真實(shí)的硬件連接時(shí),可能會遇到各種問題。

      本書中使用的ROS版本是Kinetic Kame。需要的其他軟件有V-REP仿真器、Git、Matlab和Simulink。

      最后,某些章節(jié)要求讀者將ROS與商用硬件連接,例如I/O開發(fā)板(Arduino、Odroid和樹莓派)、視覺傳感器(Kinect/Asus Xition Pro)和驅(qū)動器。你必須購買這些硬件才能運(yùn)行本書中的一些示例,但這并不是學(xué)習(xí)ROS必須要購買的。

      下載示例代碼

      你可以從www.packtpub.com通過個(gè)人賬號下載本書的示例代碼,也可以訪問華章圖書官網(wǎng)http://www.hzbook.com,通過注冊并登錄個(gè)人賬號下載。

      本書的代碼也在GitHub上托管,網(wǎng)址為https://github.com/PacktPublishing/Mastering-ROS-for-Robotics-Programming-Second-Edition。如果代碼有更新的話,會將更新提交到GitHub代碼倉庫中。

      除此之外,我們還在https://github.com/PacktPublishing/中提供了其他書籍和視頻,這里還有一些其他代碼,有興趣就去看看吧!

      下載彩圖

      我們還提供了一個(gè)PDF文件,其中包含本書中使用的所有截圖和樣圖。可以在此處下載:http://www.packtpub.com/sites/default/files/downloads/MasteringROSforRoboticsProgrammingSecondEdition_ColorImages.pdf。

      排版約定

      在本書中使用了許多排版約定。

      代碼格式如下:

      命令行輸入或輸出格式如下:

      粗體:表示你看到的是新術(shù)語、重要單詞或句子。例如,菜單或?qū)υ捒蛑械膯卧~會出現(xiàn)在文本中。下面就是一個(gè)示例:在主工具欄上,選擇“File | Open Workspace”,然后選擇代表ROS工作區(qū)的目錄。

      警告或重要說明標(biāo)志。

      提示和技巧標(biāo)志。

      朗坦·約瑟夫(Lentin Joseph)是一名來自印度的作家、創(chuàng)業(yè)者。他是印度Qbotics實(shí)驗(yàn)室的創(chuàng)始人兼CEO,在機(jī)器人領(lǐng)域已經(jīng)有7年的從業(yè)經(jīng)驗(yàn),主要研究方向包括機(jī)器人操作系統(tǒng)(ROS)、OpenCV和PCL等。

      朗坦已經(jīng)出版了3本書《Learning Robotics using Python》《Mastering ROS for Robotics Programming》和《ROS Robotics Projects》。

      目前,他在印度攻讀碩士學(xué)位,并在美國卡內(nèi)基–梅隆大學(xué)(CMU)機(jī)器人學(xué)院從事研究工作。

      喬納森·卡卡切(Jonathan Cacace)于1987年12月13日出生于意大利。在意大利那不勒斯腓特烈二世大學(xué)獲計(jì)算機(jī)科學(xué)碩士學(xué)位及信息與自動化工程博士學(xué)位。目前,喬納森是那不勒斯腓特烈二世大學(xué)PRISMA實(shí)驗(yàn)室的博士后,主要研究工業(yè)機(jī)器人和服務(wù)機(jī)器人,曾經(jīng)開發(fā)了幾款基于ROS且集成了機(jī)器人感知控制的機(jī)器人應(yīng)用。

      “非常感謝我的朋友、父母和所有陪我一路走來的人,是你們讓我的生活變得豐富多彩。”

      譯者簡介  About the Translators

      張新宇,副教授,現(xiàn)為華東師范大學(xué)“智能機(jī)器人運(yùn)動與視覺實(shí)驗(yàn)室”負(fù)責(zé)人。畢業(yè)于浙江大學(xué),獲本科、碩士、博士學(xué)位。博士畢業(yè)后,在韓國梨花女子大學(xué)圖形學(xué)與虛擬現(xiàn)實(shí)研究中心從事博士后研究,后受聘為講師和研究教授。曾受聘美國北卡羅來納州立大學(xué)教堂山分校計(jì)算機(jī)系研究科學(xué)家,從事機(jī)器人、虛擬現(xiàn)實(shí)方面的研究。

      2013年回國后立即著手籌建華東師范大學(xué) “智能機(jī)器人運(yùn)動與視覺實(shí)驗(yàn)室”,將研究內(nèi)容定位于機(jī)器人運(yùn)動規(guī)劃、計(jì)算機(jī)視覺、虛擬現(xiàn)實(shí)、基于物理的計(jì)算機(jī)模擬等方向。2015年年底創(chuàng)建華東師范大學(xué)“創(chuàng)客空間”,推動創(chuàng)客教育與創(chuàng)新活動。2016年年底負(fù)責(zé)籌建華東師范大學(xué)“虛擬現(xiàn)實(shí)與智能計(jì)算實(shí)驗(yàn)室”。2017年,領(lǐng)導(dǎo)成立面向華東師范大學(xué)的學(xué)生社團(tuán)“機(jī)器人俱樂部”和“虛擬現(xiàn)實(shí)俱樂部”,推動相關(guān)技術(shù)的科普工作。2015~2018年連續(xù)四年舉辦全國“機(jī)器人操作系統(tǒng)(ROS)及其應(yīng)用暑期學(xué)校”,四年間共有近兩百所高校,上千名本科生、碩士、博士生,以及機(jī)器人企業(yè)的開發(fā)人員參加暑期學(xué)校的學(xué)習(xí),授課視頻在線點(diǎn)擊超過10萬次。2017年創(chuàng)立中國機(jī)器人操作系統(tǒng)(ROS)教育基金會,與國內(nèi)外同行共同推進(jìn)機(jī)器人操作系統(tǒng)在中國的宣傳普及與產(chǎn)業(yè)應(yīng)用。

      張志杰,2016年3月創(chuàng)立ROS小課堂,致力于ROS教育的非盈利組織。ROS小課堂一直以開源、免費(fèi)的形式提供優(yōu)質(zhì)的ROS學(xué)習(xí)資源,在優(yōu)酷視頻平臺(http://i.youku.com/rostutorials)上提供ROS學(xué)習(xí)視頻,目前已有70多部ROS學(xué)習(xí)視頻,累計(jì)播放量9萬余次。ROS小課堂同時(shí)還注冊了微信公眾號,并擁有ROS小課堂的獨(dú)立網(wǎng)站www.corvin.cn。ROS小課堂已經(jīng)連續(xù)兩年(2017年和2018年)被邀請參加全國 “機(jī)器人操作系統(tǒng)(ROS)及其應(yīng)用暑期學(xué)校”,在更大的舞臺上與大家分享更多更好的ROS學(xué)習(xí)經(jīng)驗(yàn)。張志杰還受邀參加北京鋼鐵俠科技有限公司組織的ROS分享活動,與田之博特合作開發(fā)和銷售ROS2GO便攜系統(tǒng)。ROS小課堂將不斷努力,持續(xù)為國內(nèi)的ROS普及與教育貢獻(xiàn)一份微薄之力。

      Contents  目 錄

      譯者序

      前言

      譯者簡介

      第1章 ROS簡介? 1

      1.1 為什么要學(xué)習(xí)ROS? 1

      1.2 在機(jī)器人開發(fā)中,人們?yōu)槭裁锤敢膺x擇ROS? 2

      1.3 為什么有些人不愿意選擇ROS? 3

      1.4 理解ROS的文件系統(tǒng)? 4

      1.4.1 ROS軟件包? 5

      1.4.2 ROS超軟件包? 7

      1.4.3 ROS消息? 7

      1.4.4 ROS服務(wù)? 9

      1.5 理解ROS的計(jì)算圖? 9

      1.5.1 ROS節(jié)點(diǎn)? 11

      1.5.2 ROS消息? 12

      1.5.3 ROS話題? 13

      1.5.4 ROS服務(wù)? 13

      1.5.5 ROS消息記錄包? 14

      1.5.6 ROS節(jié)點(diǎn)管理器? 14

      1.5.7 應(yīng)用ROS參數(shù)? 16

      1.6 ROS的社區(qū)? 17

      1.7 學(xué)習(xí)ROS需要做哪些準(zhǔn)備? 17

      1.8 習(xí)題? 20

      1.9 本章小結(jié)? 20

      第2章 ROS編程入門? 21

      2.1 創(chuàng)建一個(gè)ROS軟件包? 21

      2.1.1 學(xué)習(xí)ROS話題? 23

      2.1.2 創(chuàng)建ROS節(jié)點(diǎn)? 23

      2.1.3 編譯生成節(jié)點(diǎn)? 26

      2.2 添加自定義的msg和srv文件? 28

      2.3 使用ROS服務(wù)? 30

      2.3.1 使用ROS動作庫? 34

      2.3.2 編譯ROS動作服務(wù)器和客戶端? 37

      2.4 創(chuàng)建啟動文件? 39

      2.5 話題、服務(wù)和動作庫的應(yīng)用? 41

      2.6 維護(hù)ROS軟件包? 41

      2.7 發(fā)布ROS軟件包? 42

      2.7.1 準(zhǔn)備發(fā)布ROS軟件包? 43

      2.7.2 發(fā)布軟件包? 43

      2.7.3 為ROS軟件包創(chuàng)建維基頁面? 45

      2.8 習(xí)題? 47

      2.9 本章小結(jié)? 47

      第3章 在ROS中為3D機(jī)器人建模? 48

      3.1 機(jī)器人建模的ROS軟件包? 49

      3.2 利用URDF理解機(jī)器人建模? 50

      3.3 為機(jī)器人描述創(chuàng)建ROS軟件包? 52

      3.4 創(chuàng)建我們的第一個(gè)URDF模型? 52

      3.5 詳解URDF文件? 54

      3.6 在RViz中可視化機(jī)器人3D模型? 55

      3.7 向URDF模型添加物理屬性和碰撞屬性? 57

      3.8 利用xacro理解機(jī)器人建模? 58

      3.8.1 使用屬性? 58

      3.8.2 使用數(shù)學(xué)表達(dá)式?? 59

      3.8.3 使用宏? 59

      3.9 將xacro轉(zhuǎn)換為URDF? 59

      3.10 為7-DOF機(jī)械臂創(chuàng)建機(jī)器人描述? 60

      3.10.1 機(jī)械臂規(guī)格? 61

      3.10.2 關(guān)節(jié)類型? 61

      3.11 解析7-DOF機(jī)械臂的xacro模型? 61

      3.11.1 使用常量? 61

      3.11.2 使用宏? 62

      3.11.3 包含其他xacro文件? 62

      3.11.4 在連桿中使用網(wǎng)格模型? 63

      3.11.5 使用機(jī)器人夾爪? 63

      3.11.6 在RViz中查看7-DOF機(jī)械臂? 63

      3.12 為差速驅(qū)動移動機(jī)器人創(chuàng)建機(jī)器人模型? 66

      3.13 習(xí)題? 70

      3.14 本章小結(jié)? 70

      第4章 使用ROS和Gazebo進(jìn)行機(jī)器人仿真? 71

      4.1 使用Gazebo和ROS仿真機(jī)械臂? 71

      4.2 為Gazebo創(chuàng)建機(jī)械臂仿真模型? 72

      4.2.1 為Gazebo機(jī)器人模型添加顏色和紋理? 73

      4.2.2 添加transmission標(biāo)簽來驅(qū)動模型? 74

      4.2.3 添加gazebo_ros_control插件? 74

      4.2.4 在Gazebo中添加3D視覺傳感器? 75

      4.3 仿真裝有Xtion Pro的機(jī)械臂? 76

      4.4 在Gazebo中使用ROS控制器? 78

      4.4.1 認(rèn)識ros_control軟件包? 78

      4.4.2 不同類型的ROS控制器和硬件接口? 79

      4.4.3 ROS控制器如何與Gazebo交互? 79

      4.4.4 將關(guān)節(jié)狀態(tài)控制器和關(guān)節(jié)位置控制器連接到手臂? 80

      4.4.5 在Gazebo中啟動ROS控制器? 81

      4.4.6 控制機(jī)器人的關(guān)節(jié)運(yùn)動? 83

      4.5 在Gazebo中仿真差速輪式機(jī)器人? 83

      4.5.1 將激光雷達(dá)添加到機(jī)器人中? 85

      4.5.2 在Gazebo中控制機(jī)器人移動? 86

      4.5.3 在啟動文件中添加關(guān)節(jié)狀態(tài)發(fā)布者? 87

      4.6 添加ROS遙控節(jié)點(diǎn)? 88

      4.7 習(xí)題? 89

      4.8 本章小結(jié)? 89

      第5章 用ROS和V-REP進(jìn)行機(jī)器人仿真? 91

      5.1 安裝帶有ROS的V-REP? 91

      5.2 理解vrep_plugin? 95

      5.2.1 使用ROS服務(wù)與V-REP交互? 96

      5.2.2 使用ROS話題與V-REP交互? 98

      5.3 使用V-REP和ROS仿真機(jī)械臂? 101

      5.4 在V-REP下仿真差速輪式機(jī)器人? 107

      5.4.1 在V-REP中添加激光傳感器? 109

      5.4.2 在V-REP中添加3D視覺傳感器? 110

      5.5 習(xí)題? 112

      5.6 本章小結(jié)? 112

      第6章 ROS MoveIt!與導(dǎo)航軟件包集? 113

      6.1 安裝MoveIt!? 113

      6.2 使用配置助手工具生成MoveIt!配置軟件包? 118

      6.2.1 第1步:啟動配置助手工具? 118

      6.2.2 第2步:生成自碰撞矩陣? 120

      6.2.3 第3步:增加虛擬關(guān)節(jié)? 120

      6.2.4 第4步:添加規(guī)劃組? 121

      6.2.5 第5步:添加機(jī)器人姿態(tài)? 122

      6.2.6 第6步:設(shè)置機(jī)器人的末端執(zhí)行器? 122

      6.2.7 第7步:添加被動關(guān)節(jié)? 123

      6.2.9 第9步:生成配置文件? 123

      6.3 使用MoveIt!配置軟件包在RViz中進(jìn)行機(jī)器人運(yùn)動規(guī)劃? 124

      6.3.1 使用RViz運(yùn)動規(guī)劃插件? 125

      6.3.2 MoveIt!配置軟件包與Gazebo的接口? 128

      6.4 理解ROS導(dǎo)航軟件包集? 133

      6.4.1 ROS導(dǎo)航硬件的要求? 133

      6.4.2 使用導(dǎo)航軟件包? 134

      6.5 安裝ROS導(dǎo)航軟件包集? 136

      6.6 使用SLAM構(gòu)建地圖? 136

      6.6.1 為gmapping創(chuàng)建啟動文件? 137

      6.6.2 在差速驅(qū)動機(jī)器人上運(yùn)行SLAM? 138

      6.6.3 使用amcl和靜態(tài)地圖實(shí)現(xiàn)自主導(dǎo)航? 141

      6.6.4 創(chuàng)建amcl啟動文件? 141

      6.7 習(xí)題? 144

      6.8 本章小結(jié)? 144

      第7章 使用pluginlib、小節(jié)點(diǎn)和Gazebo 插件? 145

      7.1 理解pluginlib?? 145

      7.2 理解ROS小節(jié)點(diǎn)? 151

      7.3 理解Gazebo插件? 156

      7.4 習(xí)題? 160

      7.5 本章小結(jié)? 160

      第8章 ROS控制器和可視化插件編程? 161

      8.1 理解 ros_control軟件包集? 162

      8.1.1 controller_interface軟件包? 162

      8.1.2 控制器管理器? 164

      8.2 使用ROS編寫一個(gè)基本的關(guān)節(jié)控制器? 164

      8.2.1 第1步:創(chuàng)建控制器軟件包? 165

      8.2.2 第2步:創(chuàng)建控制器頭文件? 165

      8.2.3 第3步:創(chuàng)建控制器源文件? 166

      8.2.4 第4步:控制器源文件解析? 166

      8.2.5 第5步:創(chuàng)建插件描述文件? 167

      8.2.6 第6步:更新package.xml文件? 168

      8.2.7 第7步:更新CMake-Lists.txt文件? 168

      8.2.8 第8步:編譯控制器? 168

      8.2.9 第9步:編寫控制器配置文件? 168

      8.2.10 第10步:編寫控制器的啟動文件? 169

      8.2.11 第11步:在Gazebo中運(yùn)行控制器和7-DOF機(jī)械臂? 169

      8.3 理解ROS可視化工具(RViz)及其插件? 171

      8.3.1 Displays面板? 172

      8.3.2 RViz工具欄? 172

      8.3.3 Views面板? 172

      8.3.4 Time面板? 172

      8.3.5 可停靠面板? 172

      8.4 編寫用于遙控操作的RViz插件? 172

      8.5 習(xí)題? 178

      8.6 本章小結(jié)? 178

      第9章 將ROS與I/O開發(fā)板、傳感器、執(zhí)行機(jī)構(gòu)連接? 179

      9.1 理解Arduino-ROS接口? 179

      9.2 Arduino-ROS接口是什么? 180

      9.2.1 理解ROS中的rosserial軟件包? 181

      9.2.2 理解Arduino中的ROS節(jié)點(diǎn)API? 185

      9.2.3 ROS-Arduino發(fā)布者和訂閱者實(shí)例? 187

      9.2.4 Arduino-ROS接口實(shí)例——LED燈閃爍/按按鈕? 190

      9.2.5 Arduino-ROS接口實(shí)例——ADXL 335加速度計(jì)? 192

      9.2.6 Arduino-ROS接口實(shí)例——超聲波測距傳感器? 194

      9.2.7 Arduino-ROS接口實(shí)例——里程計(jì)發(fā)布者? 197

      9.3 非Arduino開發(fā)板與ROS接口? 199

      9.3.1 在Odroid-XU4和樹莓派2上配置ROS? 199

      9.3.2 用ROS控制樹莓派2 上的LED燈閃爍? 206

      9.3.3 在樹莓派2上使用ROS測試按鈕和LED燈閃爍? 208

      9.3.4 在樹莓派2上運(yùn)行示例? 211

      9.4 將DYNAMIXEL驅(qū)動器連接到ROS? 212

      9.5 習(xí)題? 212

      9.6 本章小結(jié)? 212

      第10章 用ROS對視覺傳感器編程、OpenCV、PCL? 213

      10.1 理解ROS-OpenCV開發(fā)接口軟件包? 213

      10.2 理解ROS-PCL開發(fā)接口軟件包? 214

      10.3 在ROS中連接USB相機(jī)? 216

      10.4 ROS與相機(jī)校準(zhǔn)? 218

      10.4.1 使用cv_bridge在ROS和OpenCV之間轉(zhuǎn)換圖像? 221

      10.4.2 使用ROS和OpenCV進(jìn)行圖像處理? 221

      10.5 在ROS中連接Kinect與華碩Xtion Pro? 225

      10.6 將英特爾Real Sense相機(jī)與ROS連接? 228

      10.7 在ROS中連接Hokuyo激光雷達(dá)? 232

      10.8 處理點(diǎn)云數(shù)據(jù)? 233

      10.8.1 如何發(fā)布點(diǎn)云? 234

      10.8.2 如何訂閱和處理點(diǎn)云? 235

      10.8.3 將點(diǎn)云數(shù)據(jù)寫入點(diǎn)云數(shù)據(jù)(PCD)文件? 236

      10.8.4 從PCD文件中讀取并發(fā)布點(diǎn)云? 237

      10.9 物體姿態(tài)估計(jì)與AR標(biāo)記檢測? 239

      10.10 習(xí)題? 243

      10.11 本章小結(jié)? 244

      第11章 在ROS中構(gòu)造與連接差速驅(qū)動移動機(jī)器人? 245

      11.1 Chefbot DIY移動機(jī)器人及其硬件配置? 246

      11.1.1 使用Energia IDE來燒寫Chefbot固件? 248

      11.1.2 討論Chefbot的ROS軟件包接口? 249

      11.1.3 從編碼器計(jì)數(shù)計(jì)算里程計(jì)信息? 254

      11.1.4 根據(jù)ROS twist消息計(jì)算馬達(dá)轉(zhuǎn)速? 256

      11.1.5 為Chefbot機(jī)器人配置導(dǎo)航軟件包集? 257

      11.1.6 配置gmapping節(jié)點(diǎn)? 257

      11.1.7 配置導(dǎo)航軟件包集? 259

      11.1.8 理解AMCL? 264

      11.1.9 在RViz中使用導(dǎo)航功能? 267

      11.1.10 導(dǎo)航軟件包中避障? 272

      11.1.11 Chefbot機(jī)器人仿真? 273

      11.1.12 從ROS節(jié)點(diǎn)向?qū)Ш杰浖l(fā)送一個(gè)目的地? 276

      11.2 習(xí)題? 278

      11.3 本章小結(jié)? 278

      第12章 探索ROS-MoveIt!的高級功能? 279

      《精通ROS機(jī)器人編程(原書第2版) 》(ros機(jī)器人編程實(shí)戰(zhàn) pdf)

      12.1 使用move_group的C++接口進(jìn)行運(yùn)動規(guī)劃? 279

      12.1.1 使用MoveIt! C++ API規(guī)劃隨機(jī)路徑? 280

      12.1.2 使用MoveIt! C++ API規(guī)劃自定義路徑? 281

      12.2 使用MoveIt!進(jìn)行機(jī)械臂的碰撞檢測? 283

      12.2.1 向MoveIt!添加碰撞對象? 283

      12.2.2 從規(guī)劃場景中移除碰撞對象? 286

      12.2.3 向機(jī)器人連桿上添加一個(gè)碰撞對象? 286

      12.2.4 使用MoveIt! API檢查自碰撞? 287

      12.3 使用MoveIt!和Gazebo處理視覺? 288

      12.4 使用MoveIt!執(zhí)行拾取和放置任務(wù)? 294

      12.4.1 使用GPD計(jì)算抓握姿態(tài)? 297

      12.4.2 在Gazebo和真實(shí)機(jī)器人上執(zhí)行拾取和放置動作? 300

      12.5 理解用于機(jī)器人硬件接口的DYNAMIXEL ROS伺服控制器?? 300

      12.5.1 DYNAMIXEL伺服舵機(jī)? 300

      12.5.2 DYNAMIXEL-ROS接口? 301

      12.6 7-DOF機(jī)械臂與ROS MoveIt!? 302

      12.6.1 為COOL機(jī)械臂創(chuàng)建一個(gè)控制器軟件包? 303

      12.6.2 COOL機(jī)械臂的MoveIt!配置? 306

      12.7 習(xí)題 ?308

      12.8 本章小結(jié)? 308

      第13章 在MATLAB和Simulink中使用ROS? 309

      13.1 學(xué)習(xí)使用MATLAB與MATLAB-ROS? 309

      13.1.1 機(jī)器人系統(tǒng)工具箱和ROS-MATLAB接口入門? 310

      13.1.2 ROS話題和MATLAB回調(diào)函數(shù)? 313

      13.1.3 為Turtlebot機(jī)器人設(shè)計(jì)一個(gè)避障系統(tǒng)? 317

      13.2 學(xué)習(xí)使用ROS與Simulink? 321

      13.2.1 在Simulink中創(chuàng)建波形信號積分器? 321

      13.2.2 在Simulink中使用ROS消息? 323

      13.2.3 在Simulink中發(fā)布ROS消息? 323

      13.2.4 在Simulink中訂閱ROS話題? 327

      13.3 用Simulink開發(fā)一個(gè)簡單的控制系統(tǒng)? 328

      13.4 習(xí)題? 332

      13.5 本章小結(jié)? 332

      第14章 ROS與工業(yè)機(jī)器人? 333

      14.1 理解ROS-Industrial軟件包? 333

      14.1.1 ROS-Industrial的目標(biāo)? 334

      14.1.2 ROS-Industrial簡史? 334

      14.1.3 ROS-Industrial優(yōu)點(diǎn)? 334

      14.2 安裝ROS-Industrial軟件包? 334

      14.3 ROS-Industrial軟件包框圖? 335

      14.4 為工業(yè)機(jī)器人創(chuàng)建URDF? 336

      14.5 為工業(yè)機(jī)器人創(chuàng)建MoveIt!配置? 337

      14.5.1 更新MoveIt!配置文件? 340

      14.5.2 測試MoveIt!配置? 341

      14.6 安裝UR機(jī)械臂的ROS-Industrial軟件包? 341

      14.7 理解UR機(jī)械臂的MoveIt!配置? 343

      14.8 使用真實(shí)的UR機(jī)器人和ROS-I? 345

      14.9 ABB機(jī)器人的MoveIt!配置? 346

      14.10 ROS-Industrial機(jī)器人支持軟件包? 349

      14.11 ROS-Industrial 機(jī)器人客戶端軟件包? 351

      14.12 ROS-Industrial 機(jī)器人驅(qū)動軟件包? 352

      14.13 理解MoveIt! IKFast插件? 354

      14.14 為ABB IRB 6640機(jī)器人創(chuàng)建MoveIt! IKFast插件? 354

      14.14.1 開發(fā)MoveIt! IKFast插件的前提條件? 354

      14.14.2 OpenRave和IKFast模塊? 354

      14.15 為使用OpenRave,創(chuàng)建機(jī)器人的COLLADA文件? 357

      14.16 為IRB 6640機(jī)器人生成IKFast CPP文件? 358

      14.17 習(xí)題? 361

      14.18 本章小結(jié)? 361

      第15章 調(diào)試方法與最佳實(shí)戰(zhàn)技巧? 362

      15.1 在Ubuntu中安裝RoboWare Studio? 362

      15.1.1 安裝和卸載RoboWare Studio? 363

      15.1.2 RoboWare Studio入門? 363

      15.1.3 在RoboWare Studio中創(chuàng)建ROS軟件包? 364

      15.1.4 在RoboWare Studio中編譯ROS工作區(qū)? 366

      15.1.5 在RoboWare Studio中運(yùn)行ROS節(jié)點(diǎn)? 367

      15.1.6 在RoboWare界面啟動ROS工具? 368

      15.1.7 處理活動的ROS話題、節(jié)點(diǎn)和服務(wù)? 369

      15.1.8 使用RoboWare工具創(chuàng)建ROS節(jié)點(diǎn)和類? 370

      15.1.9 RoboWare Studio中的ROS軟件包管理器? 371

      15.2 ROS的最佳實(shí)戰(zhàn)技巧與經(jīng)驗(yàn)? 372

      15.3 ROS軟件包中的最佳實(shí)戰(zhàn)技巧與經(jīng)驗(yàn)? 374

      15.4 ROS中的重要調(diào)試技巧? 374

      15.5 習(xí)題? 377

      15.6 本章小結(jié)? 378

      軟件開發(fā)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:統(tǒng)計(jì)報(bào)表出錯(cuò)處罰規(guī)定文件(統(tǒng)計(jì)局報(bào)表報(bào)錯(cuò),國家會罰款多少)
      下一篇:COMPLEX(complex sentence)
      相關(guān)文章
      久久精品国产亚洲av水果派| 亚洲欧洲高清有无| 亚洲熟妇av一区二区三区漫画| 亚洲性色精品一区二区在线| 亚洲精品成人图区| 亚洲欧洲国产日韩精品| 亚洲AV无码不卡无码| 国产成人亚洲精品影院| 国产日产亚洲系列最新| 亚洲人成国产精品无码| 国产91成人精品亚洲精品| 亚洲Av无码乱码在线观看性色| 亚洲精品无AMM毛片| 亚洲第一成年免费网站| 亚洲AV无码专区在线电影成人 | 亚洲VA中文字幕无码一二三区| 亚洲一区精品无码| 亚洲国产精品无码久久一区二区| 亚洲免费观看视频| 亚洲另类激情综合偷自拍图| 亚洲线精品一区二区三区 | 国产亚洲综合一区柠檬导航| 亚洲AV永久纯肉无码精品动漫| 亚洲成AV人片在线观看| 亚洲国产AV无码专区亚洲AV| 亚洲国产精品高清久久久| 亚洲日本中文字幕区| 亚洲日本国产精华液| 亚洲情A成黄在线观看动漫软件 | 相泽亚洲一区中文字幕| 亚洲五月综合缴情在线观看| 亚洲国产精品无码久久久不卡 | 久久亚洲精品无码AV红樱桃| 亚洲综合色丁香麻豆| 67pao强力打造67194在线午夜亚洲| 亚洲欧洲国产经精品香蕉网| 久久亚洲精品国产精品婷婷| 国产AV无码专区亚洲AV麻豆丫| 激情婷婷成人亚洲综合| 中文字幕亚洲日本岛国片| 亚洲AV永久无码精品水牛影视|