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