ROS 教學系列(一)-認識 Robot Operating System(ROS)

ROS 教學系列(一)-認識 Robot Operating System(ROS)

在閱讀過「55家以上世界級企業使用的 ROS 機器人系統」後,相信大家對 ROS(Robot Operating System)機器人作業系統有了初步的認識,本篇文章就要帶大家更深入了解 ROS 的詳細內容。

一、ROS 1 的歷史淵源

Robot Operating System(後續內容將以 ROS 1 表示),是一個為了幫助機器人開發者所設計出來的一套軟體系統框架,它擁有眾多的強力開發工具,包括硬體抽象層的描述、驅動程式管理、平行計算的執行、程式間訊息傳遞等,可以大大地簡化開發機器人平台的複雜任務建立與穩定版本控制。更重要的,它是一個開源的項目。

ROS 1 最初是史丹佛大學的人工智慧實驗室與機器人公司 Willow Garage 合作的一個機器人專案,名稱為 Personal Robots Program。這項專案研發的機器人 PR2 在使用 ROS 1 的基上,能夠完成打撞球、做早餐、疊衣服等接近人類的動作,因此引起了全世界的關注。

2008 年後,ROS 1 便交由 Willow Garage 維護,並在 2010 年時正式以開放原始碼的方式,向世界發佈了 ROS 1 的框架。

最後在 2013 年時轉交給開源機器人基金會 OSRF(Open Source Robotics Foundation) 繼續維護。

二、ROS 1 的設計目的

為了增加開發機器人時所設計的軟體使用率,ROS 1 被設計為一種分散式架構,使得在框架中的每個功能模組都可以被單獨設計、編譯、並且在執行時以鬆散耦合的方式結合在一起。ROS 1 主要為機器人開發提供了硬體抽象層、驅動程式、訊息傳遞、程式管理等功能與機制,同時整合了許多第三方工具,例如 Gazebo、rqt 等,幫助開發者能夠快速完成機器人應用的建立、設計與多機整合。而且 ROS 1 中的功能模組都被封裝於獨立的套件包(Package),便於讓開發者們互相分享。

可能機器人是一個橫跨多項領域的專門項目,一些對於人類是微不足道的動作,對於機器人來說卻是極其複雜的功能。例如工程師想要在眾多螺絲當中,拿起螺絲並鎖在器具上,僅需要花幾秒時間便可以完成,然而若是想要利用機器人來完成,便需要使用到機器手臂的運動控制與影像辨識……等具有高度專業性的技術整合而成。

因此機器人的開發對於單一的開發者、實驗室或者研究者都是無法獨力完成的項目。ROS1 的出現便是為了讓更多的開發者們能夠共同作業開發機器人的軟體功能,像是一個擁有先進機器手臂技術的公司,能夠在 ROS 的框架下與擁有影像辨識技術的實驗室合作,完成一個能夠抓取目標物的機器手臂。

三、ROS 1 的特點

ROS 1 的核心運作是分散式網路模式,並在 TCP/IP 的通訊協定下,實現各個功能模組間點對點的鬆偶和連接,而且可以進行多種類型的通訊,包括使用非同步通訊的主題(Topic)與同步通訊的服務(Service),以及參數服務器上的資料儲存等。ROS 1 主要有下列特點:

1. 點對點的設計

在ROS 1 中,每一個程式都以節點(Node)的形式執行,可以分散在不同的主機中。每個節點間的通訊是通過一個具有發佈(Publish)與訂閱(Subscribe)功能的遠端程序呼叫(Remote Procedure Call)傳輸系統,由發佈者節點傳送至訂閱者節點。這種點對點的設計方法,能夠分散使用定位、導航、影像辨識等功能帶來的即時運算壓力,因此很適合多個機器人的協力運作。

2. 多種程式語言的支援

為了支援更多應用的開發與移植,ROS1 被設計為一種不依賴某種特定語言的框架。ROS1 使用簡潔、中立的定義語言來描述功能模組間的通訊連接,因此會在編譯的過程中再產生使用的程式語言之目標文件。截至 2018 年,已可使用 Python、C++ 與 Lisp 來設計 ROS1 的套件包,並且已有 Java 與 Lua 的實驗程式庫。

3. 架構簡單、集成度高

在眾多的機器人應用中,重複的使用程式碼是一個非常重要的問題。很多的驅動程式、應用演算法、功能模組若在設計時沒有基於一個統一的標準,將會很難在其他的機器人或應用中進行功能移植或二次開發。而 ROS 1 框架具有模組化的特性,使得每個功能節點都可以進行單獨編譯,並且使用統一的通訊格式,讓每個功能模組的移植與重複性使用變得更加方便。

更令人開心的是,在 ROS 1 的開源社群當中,已有相當多的開源項目進行了程式碼的移植,例如 Open Source Computer Vision Library (Open CV)、Point Cloud Library (PCL) 等,讓開發者可以使用豐富的資源實現機器人應用的快速開發。

4. 豐富的工具套件

移動式機器人的開發往往需要一些可視化工具或模擬軟體進行開發,ROS 1 使用組件化的方式將這些工具與軟體整合到系統中,並可以做為一個組件使用。

5. 開源的程式碼

ROS 1 遵循 Berkeley Software Distribution (BSD) 授權條款,這給予使用者有著較大的自由,允許使用者修改與重新發佈其中的程式碼。

四、ROS 1 的侷限性

ROS 1 最初設計的目標機器人是 PR2 機器人,這個機器人搭載當時候最先進的移動運算平台並且具有絕佳的網路性能,因此並不需要考慮即時計算的問題,主要應用於研究領域。

如今 ROS 1 的應用領域越來越廣泛,已逐漸從研究領域走向人們日常的生活,例如:輪型機器人、人型機器人、工業機器手臂、自動駕駛車、無人機等。也因此 ROS 1 在應用領域上,逐漸有以下五個問題的產生:

1. 多機器人(multi-robot) 系統的開發與應用

多機器人系統是機器人領域中的一個重點研究項目,這可以解決單一機器人系統的性能不足與無法應用等問題,也可以避免因為機器人故障時導致整體任務終止的情形發生。然而在 ROS 1 中,並沒有建立多機器人系統的標準方法。

2. 系統平台的高度依賴性

ROS 1 是基於 Linux 系統(相適性較高的為 Ubuntu 系統)所設計的機器人系統框架。這對其他的作業系統,像是 Windows、macOS、RTOS 等有著較高的侷限性,使得 ROS 1 在這些系統上會有部分功能無法應用或功能有限。

3. 即時性

很多應用場合中的機器人,對於即時性的要求較高,尤其是在工業領域,系統需要做到硬即時的性能要求,但是 ROS 1 缺乏即時性方面的設計。

4. 網路連接

ROS 1 的分散式設計需要有良好的網路環境才能夠保證資料傳輸的完整性,並且網路不具備數據加密、安全防護等功能,讓同一網路中的任意主機皆能夠取得節點發佈或接收的資料數據。

5. 產品化

ROS 1 透過主節點(Master Node)管理分散在各個主機中的發佈者或訂閱者節點,因此若是主節點發生問題,整個系統將會無法運作,這會導致很多機器人的研究開發到消費性產品的過渡非常困難。

五、小結

鑒於上述的問題,使得 ROS 1 因為最初設計的侷限性,在往後的應用發展上會越來越難以使用。因此在 ROSCon 2014 上,新一代 ROS 的設計架構正式公布,並且在2015 年 8 月發佈 ROS 2 的 alpha 版本。

ROS 教學系列」下一篇文章就要帶大家認識 ROS 2(Robot Operating System 2)的詳細內容。