本書共分為六部分。*部分介紹了如何編寫ROS節(jié)點和ROS工具,也覆蓋了消息、類和服務(wù)器。第二部分是用ROS進(jìn)行模擬和可視化,其中包括坐標(biāo)轉(zhuǎn)換。第三部分討論了ROS的感知過程。第四部分介紹了ROS中的移動機(jī)器人控制和導(dǎo)航。第五部分介紹了ROS機(jī)器人臂的相關(guān)知識。第六部分涉及系統(tǒng)集成和更高級別的控制,包括基于感知的移動操作。
ROS(Robot Operating System,機(jī)器人操作系統(tǒng))正在成為現(xiàn)代機(jī)器人學(xué)的實際標(biāo)準(zhǔn)編程方法。ROS wiki(https://www.ros.org/history/)寫道:
ROS生態(tài)系統(tǒng)現(xiàn)在由全世界數(shù)以萬計的用戶組成,覆蓋了從桌面愛好項目到大型工業(yè)自動化系統(tǒng)。
為什么是ROS?在1956年,Joseph Engelberger創(chuàng)立了Unimation公司,世界上第一個機(jī)器人公司[7]。然而,在過去的半個世紀(jì)里,機(jī)器人技術(shù)的進(jìn)步令人失望。世界范圍內(nèi)的機(jī)器人學(xué)研究也僅限于實驗室里的演示和探奇。這一領(lǐng)域的新生研究人員通常一無所有,從頭開始構(gòu)建新型機(jī)器人,解決執(zhí)行器和傳感器接口的問題,構(gòu)建底層的伺服控制,并且通常在實現(xiàn)更高級的機(jī)器人能力之前就已經(jīng)精疲力竭了,而這些自定義的機(jī)器人和軟件很少被復(fù)用于后續(xù)工作。
人們認(rèn)識到采用構(gòu)建巴比塔的模式是徒勞的,構(gòu)建更智能的機(jī)器人的任務(wù)需要持續(xù)的、協(xié)作的努力,并建立在能夠不斷達(dá)到更高層能力的基礎(chǔ)上。在1984年,Vincent Hayward和Richard Paul引入了機(jī)器人控制C庫(Robot Control C Library, RCCL)[15]作為解決這一長期問題的方法。不幸的是,RCCL沒有獲得機(jī)器人研究人員足夠的認(rèn)可。National Instruments[24]和Microsoft[39-40]均引入了試圖使機(jī)器人編程標(biāo)準(zhǔn)化的產(chǎn)品。然而,研究人員發(fā)現(xiàn)這些方法煩瑣而昂貴。
ROS于2007年由斯坦福人工智能實驗室發(fā)起[26],它試圖統(tǒng)一零碎的谷歌所采用的機(jī)器人學(xué)方法,且于2008年至2013年得到Willow Garage的支持[12],隨后自2013年至今得到谷歌開源機(jī)器人基金會(Open Source Robotics Foundation,OSRF)的支持[10]。ROS方法遵循了開源軟件和分布式協(xié)作的現(xiàn)代方法。此外,它橋接和提升了其他并行的開源工作,包括OpenCV[28]、PointCloudLibrary[21]、Open Dynamics Engine[8]、Gazebo[19]和Eigen[20]。對于研究人員而言,ROS在開放性和易用性方面可能與RCCL相似,而谷歌持續(xù)七年的支持是ROS存活的關(guān)鍵。
ROS現(xiàn)在在學(xué)術(shù)界、工業(yè)界和研究機(jī)構(gòu)中得到了全世界的廣泛使用。開發(fā)人員提供了數(shù)以千計的軟件包,包括來自一些世界領(lǐng)先的專家在相關(guān)領(lǐng)域的解決方案。新的機(jī)器人公司在它們的產(chǎn)品上提供了ROS接口,并且已建立的工業(yè)機(jī)器人公司也引入了ROS接口。隨著廣泛采用ROS作為機(jī)器人編程實際標(biāo)準(zhǔn)的做法,人們對提高機(jī)器人的能力有了新的希望。在最近的DARPA機(jī)器人挑戰(zhàn)賽中,大多數(shù)入圍的團(tuán)隊使用了ROS。新型自動駕駛汽車的開發(fā)商正在開發(fā)ROS。新的機(jī)器人公司正在崛起,這部分是由ROS資源驅(qū)動的。鑒于ROS的勢頭和功績,顯而易見,當(dāng)今的機(jī)器人工程師必須精通ROS編程。
什么是ROS?將其稱為機(jī)器人操作系統(tǒng)并不全面。簡潔地定義ROS很困難,因為它包含了很多方面,包括:編程風(fēng)格(特別是依賴于松散耦合的分布式節(jié)點),節(jié)點間通信的接口定義和范例,庫和包合并的接口定義,可視化、調(diào)試、數(shù)據(jù)記錄和系統(tǒng)診斷的工具集合,共享源代碼的存儲倉庫,橋接多個有用的、獨(dú)立的開源庫的橋梁。因此,ROS是機(jī)器人程序員的一種生活方式,而不只是一種簡單的操作系統(tǒng)。ROS的定義可以參考ROS wiki(https://wiki.ros.org/ROS/Introduction):
ROS是一個針對機(jī)器人的開源、元級操作系統(tǒng)。它提供了用戶在操作系統(tǒng)上所期望的服務(wù),包括硬件抽象、低層設(shè)備控制、常用功能的實現(xiàn)、進(jìn)程之間的消息傳遞以及包管理。它還提供了在多臺計算機(jī)上獲取、生成、編寫以及運(yùn)行代碼的工具和庫。
ROS的主要目標(biāo)是支持機(jī)器人研究和開發(fā)中的代碼復(fù)用。ROS是一個分布式的進(jìn)程(也稱節(jié)點)框架,它能使可執(zhí)行的文件單獨(dú)設(shè)計以及在運(yùn)行時松散耦合。這些進(jìn)程可以打包成易于共享和分發(fā)的包。ROS還支持一個代碼庫的聯(lián)合系統(tǒng),能夠同時分發(fā)協(xié)作。從文件系統(tǒng)級到社區(qū)級的這個設(shè)計實現(xiàn)了開發(fā)和部署的獨(dú)立決策,但所有這些都可以與ROS的基礎(chǔ)底層工具一起使用。
Brian Gerkey在網(wǎng)上的評論(https://answers.ros.org/question/12230/what-is-ros-exactly-middleware-framework-operating-system/)如下。
我是這樣解釋ROS的:
1.?管道:ROS提供了發(fā)布-訂閱消息傳遞基礎(chǔ)結(jié)構(gòu),旨在支持分布式計算系統(tǒng)的快速、輕松構(gòu)建。
2.?工具:ROS提供了一套廣泛用于配置、啟動、反思、調(diào)試、可視化、記錄、測試和停止的分布式計算系統(tǒng)的工具。
3.?功能:聚焦于移動性、操作性和感知性,ROS提供了實現(xiàn)機(jī)器人有用的功能的廣泛庫集。
4.?生態(tài)系統(tǒng):ROS擁有規(guī)模龐大的社區(qū)支持,并通過著力聚焦于集成和文檔而不斷改進(jìn)。ros.org是一個一站式的站點,在這里可以查找和了解來自世界各地開發(fā)者的成千上萬個可用ROS包。
來自參考文獻(xiàn)[13]對ROS的解釋如下:
ROS(發(fā)音Ross[rs])的主要目標(biāo)是提供一個統(tǒng)一的開源編程框架,用于在各種真實世界和仿真環(huán)境中控制機(jī)器人。
來自參考文獻(xiàn)[13]中的ROS管道:
ROS中的核心實體稱為節(jié)點。節(jié)點通常是用Python或C 編寫的小程序,用于執(zhí)行一些相對簡單的任務(wù)或過程。節(jié)點可以相互獨(dú)立地啟動和停止,并通過傳遞消息進(jìn)行通信。節(jié)點可以在某些主題上發(fā)布消息或向其他節(jié)點提供服務(wù)。
例如,發(fā)布器節(jié)點可能會報告從連接到機(jī)器人微控制器的傳感器傳來的數(shù)