Home >> Blog >> 什麼是ROS-Robot Operating System?
什麼是ROS-Robot Operating System?
當你優化完成一整天的SEO項目後,轉而想開發機器人應用程式,並且發現了 ROS。但是你很困惑……什麼是ROS?
ROS 表示機器人操作系統。
從一開始就很難理解什麼是 ROS。
是操作系統嗎?一個框架?你應該用它做什麼?幾年前我們剛開始接觸的時候,花了很長時間才理解 ROS 背後的概念。
在這篇文章中,將向您解釋原因、時間和內容。
這篇文章也是關於 ROS 的系列文章的開始。最後,將為您提供有用的資源,以了解什麼是 ROS 核心概念和通信工具。
為什麼選擇 ROS?
機器人開發中一個很常見的故事是:
有一天,一名學生/工程師開始了一個新的酷機器人項目。她開始計劃和處理該項目。很快,她發現事情並沒有那麼簡單。機器人學很難學,為機器人開發一個好的軟體需要時間。因此,她開始花時間研究如何在所有程式之間進行通信,如何實現機器人的 3D 模擬等等。
項目告一段落。沒有取得真正的進展,開發人員開始失去信心。她一直在嘗試編寫機器人框架,但在實際項目上只做了一點工作。很快這個項目就被放棄了,或者她可能設法用一些被黑的程式碼完成了一些事情。
許多從事機器人軟體開發工作的人實際上並沒有開發機器人應用程式。他們開發的機器人框架最終無法重用、不受支持、不為人所知,很快就被遺忘了。
這種情況經常發生在攻讀博士學位的人身上,項目時間為 2-3 年。
這是減緩機器人研發的主要因素之一,而 ROS 正試圖解決這個問題。
機器人操作系統主要目標
ROS 允許您停止重新發明輪子。重新發明輪子是新的創新應用的主要殺手之一。
ROS 的目標是為機器人軟體開發提供一個標準,您可以在任何機器人上使用它。
無論您是在為移動機器人、機械臂、無人機、船、自動售貨機程式碼,嗯……您都可以使用機器人操作系統。
每次啟動新應用程式時,它都會變得更容易。您不必重新學習如何使用 ROS。您還可以輕鬆切換到其他人開發的現有 機器人作業系統 項目而不會丟失。每個新的機器人應用程式都是從頭開始開發的,每次都使用不同的程式碼庫,時代已經結束。
該標准允許您使用現有的基礎真正專注於應用程式的關鍵功能,而不是嘗試自己做所有事情。
什麼是ROS?
首先,它不是什麼:
機器人操作系統,儘管它的名字,不是一個操作系統。它也不是一個真正的框架。
ROS 更像是一個中間件,類似於基於現有操作系統的低級“框架”。機器人作業系統 主要支持的操作系統是 Ubuntu。您必須在操作系統上安裝 ROS 才能使用它。
機器人操作系統主要由兩部分組成:
- 帶有通信工具的核心(中間件)
- 一組即插即用庫
什麼是中間件
基本上,中間件負責處理分佈式系統中程式之間的通信。
開發新軟體時,您可以選擇: A. 開發一個程式碼庫,所有內容都在一個塊中編譯和運行,或者 B. 創建子程式,為應用程式的每個子任務/功能創建一個子程式。
沒有任何懸念,第二種方案是開發機器人軟體時的最佳選擇。您確實需要能夠開發應用程式的一部分(例如,傳感器的驅動程式),並在沒有整個應用程式的情況下運行它。
因此,您現在正在編寫許多小模組,它們需要相互通信。機器人作業系統 核心可以幫助您做到這一點。
ROS核心和通訊工具
使用 ROS,您將能夠輕鬆地將程式碼庫分成包含小程式的包,稱為節點。
如何使這些程式相互通信?
在這裡,ROS 帶有3 個主要的通信工具:
- 話題-這些將主要用於在節點之間發送數據流。示例:您正在監控機器人上電機的溫度。監控該電機的節點將發送帶有溫度的數據流。現在,任何其他節點都可以訂閱該主題並獲取數據。
- 服務-它們將允許您在節點之間創建簡單的同步客戶端/伺服器通信。對於更改機器人的設置或請求特定操作非常有用:啟用自由駕駛模式、請求特定數據等。
- 行動-稍微複雜一點,它們實際上是基於主題的。它們的存在是為了為您提供異步客戶端/伺服器架構,客戶端可以在其中發送需要很長時間的請求(例如:要求將機器人移動到新位置)。客戶端可以異步監控伺服器的狀態,隨時取消請求。
要使用這些通信工具,您只需在程式碼中使用適當的庫,並定義特定的消息。
在您的 機器人作業系統 環境中,您還可以創建一些名為parameters的全局設置,因此多個節點可以從機器人應用程式的任何位置訪問同一組設置。並且您將能夠僅使用一個稱為啟動文件的 XML 文件啟動您的完整應用程式。
機器人作業系統 還包括一個完整的日誌系統,非常易於使用。
有了所有這些功能,您就擁有了開發分佈式系統所需的一切。您會將應用程式分解為許多包,每個包將包含一些獨立的節點。
創建節點後,您將使用主題、服務和操作使它們相互通信。
ROS 語言
機器人操作系統主要使用 2 種語言開發:C++ 和 Python。在開發機器人應用程式時,這些通常是最受歡迎和使用的語言。您將使用 roscpp 庫編寫 C++ 程式碼,並使用 rospy 庫編寫 Python 程式碼。還有一些庫可以與其他語言建立橋樑,例如用於 Java 的 rosjava,以及用於 JavaScript 的 roslibjs 或 rosnodejs。
現在,要使用 ROS,您應該使用哪種語言?如果有幾種語言,哪些是相互兼容的?
好吧,您必須知道機器人作業系統與語言無關。這意味著您編寫的子程式(節點)可以用任何語言編寫。因此,您的應用程式可以讓一個用 Python 編寫的節點與一個用 C++ 編寫的節點進行通信。
這是為什麼?僅僅因為通信層低於“語言層”。由於它作為中間件工作,機器人作業系統 使用標準 TCP/IP 套接字在節點之間進行通信。
ROS 庫
機器人作業系統 並沒有以一組核心功能和通信工具結束。遠不止於此。
實際上,您可以直接在程式碼中使用大量現有的 機器人作業系統 庫。
這些庫將在很多方面為您提供幫助。
想像一下,您正在為移動機器人開發軟體。在計劃在此機器人上開發什麼時,您可能會列出:
- 電機驅動器
- PID控制迴路
- 運動規劃
- 3D 可視化
- 攝像頭驅動
如果您想添加很多功能,該列表可能會變得非常大。清單上的每一項都需要大量的時間。你怎麼可能在有移動障礙物的擁擠環境中開發運動規划算法?在為您的相機開發硬件驅動程式的同時,如何在很短的期限內開發 3D 模擬工具?
好吧,機器人操作系統解決了 90% 的問題。對於機器人技術中的大多數常見開發模組,您可以找到一個開源 機器人作業系統 包。這就是開源軟體的魔力。當有人開發了一個不錯的包時,他/她可以發布它並與社群分享。然後,其他人可以使用它並繼續改進它,共同創造一個良性循環。
所以,回到我們的庫/包:
- 許多電機和相機都有現有的 ROS 驅動程式,或者至少可以使用一些東西來避免從頭開始。
- 對於您的機器人主控制迴路,請使用ros_control。
- 要表示機器人的 3D 模型,只需使用URDF格式的 XML 對其進行描述。
- 對於路徑和運動規劃,請使用Moveit。Moveit 將重用您之前創建的 URDF 文件。
- 要移動移動機器人,您可以找到完整的導航堆棧。
- 對於 3D 可視化,使用Rviz。
- 如果你想要一個更強大的模擬工具,有物理約束,看看Gazebo——你甚至可以讓無人機在重力和風的作用下飛行。如果它在 Gazebo 上飛行,它很有可能真的會飛。
- 借助 rosbridge包,您還可以在 ROS 和非 ROS 環境之間進行通信。
使用 ROS 時,一旦您嘗試開發新的包/功能,請檢查是否有人在您之前這樣做並將程式碼發佈在互聯網上(大多數 ROS 包可以在 GitHub 上找到)。如果是這種情況,請使用這個庫——當然要檢查開源許可證,看看你能做什麼/不能做什麼——如果可能的話,幫助這個庫變得更好!
ROS提供的仿真工具也超級好用。開發機器人時最大的浪費時間之一是總是必須設置和運行物理機器人來進行測試。使用仿真工具,您可以直接在計算機上開發完整的應用程式(高於硬件驅動程式級別)。
機器人操作系統社群
事實上,ROS 不僅僅是一套通信工具和有用的庫。它也是一個龐大且不斷發展的社群。
這一點非常非常重要。當使用庫、框架、中間件以及任何與軟體相關的東西時,您想要檢查社群是否活躍,以及開發是否活躍。
使用 ROS,您可以檢查所有驗證框。ROS最初是由一家名為 Willow Garage 的公司於 2007 年創建的。
ROS目前正由全世界許多有奉獻精神的人積極開發。此外,許多公司正在讚助一些與 ROS 相關的開源開發。
與大型開源項目的讚助商合作非常普遍,這通常是市場驗證的證明,因為公司願意為此付費。如果您擔心該項目在幾個月/幾年後被放棄,這是一個很好的保證。
有一個全球 ROS 委員會Open Robotics,負責維護願景並決定核心開發的全球路徑。他們經常提供一些關於正在發生的事情的資訊,並從全球社群獲得反饋以獲取想法並了解對 ROS 用戶來說重要的內容。
每年,ROS 委員會都會組織一場名為 ROSCON 的全球性活動。每年國家和城市都會發生變化,因此您總有一天有機會參與其中。在 ROSCON 期間,解釋了新的關鍵特性和開發進度。會談的影片可在線獲取。有時您可以在這些demo文稿中找到真正有價值的資訊。
ROS 社群在網上也很活躍:
- 羅斯維基。在這裡您可以找到大多數教程、概念解釋和不同軟體包的指南。這是一個非常好的網站,但有時並不完整併且缺乏一些指導方針,因此您必須在其他地方找到更多資訊。
- ROS 答案。一個問答網站,因此您可以提出所有面向技術的問題。您已經可以檢查大量已回答的問題。通常,如果您在 Wiki 上找不到某些內容,您很可能會在這裡找到它。
- ROS話語。這是一個討論未來發展、使用 ROS 的項目以及與 ROS 相關的任何事情的論壇。這是不時檢查的好資源,因此您確定不會錯過任何內容。
- GitHub。大多數 ROS 包都可以在 GitHub 上找到。在這裡,您將能夠瀏覽程式碼並做出一些貢獻。
何時使用 ROS?
ROS 真的適合你的應用嗎?或者它是一個矯枉過正的解決方案?
這實際上取決於您要達到的目標。對於某些應用程式,使用 ROS 顯然太多了,尤其是如果您沒有任何 ROS 知識。
我們先來說說什麼時候不使用 ROS。如果您的機器人非常基礎,例如:打開帶有人類存在檢測器的門,沿著地面上的一條線移動一個 2 輪機器人,那麼對於這些應用,一個簡單的 Arduino 板可能就足夠了。
但是,如果您想將您的機器人與另一個機器人或更大的系統連接起來,或者添加許多其他傳感器,那麼 ROS 可能更有意義。
這是您想要使用 ROS 的時候:
- 您的機器人包含許多不同的傳感器和執行器。ROS 將幫助您為所有這些組件創建一個分佈式系統,而不是擁有一個難以維護和擴展的大型單體程式碼庫。
- 你正在學習機器人技術。ROS 將允許您快速運行完整的機器人應用程式並查看更大的圖景。一旦您對 ROS 充滿信心,您將能夠快速為許多不同的機器人編寫程式碼。
- 你在做機器人研究。ROS 簡直就是完美的選擇。通常,您的研究將是關於一個非常特殊的點,您應該把所有的重點放在哪裡。使用 ROS,由於您已經擁有構建機器人軟體的所有程式碼、通信工具和庫,因此您確實可以專注於您的研究主題,而不是試圖重新發明整個系統。
- 您正在製作機器人原型。原型設計通常意味著您希望盡快完成工作。如果您了解 ROS,那麼您可能只需要幾天時間就可以為任何移動底座或機械臂創建完整的原型軟體。這將為您節省數月的辛勤工作。
什麼是 ROS – 繼續本系列
關於 ROS 還有很多話要說,但我會在這裡總結一下。
ROS 是為機器人程式員維護和開發的機器人框架之一,如果不是最多的話。由於它是開源的(大多數核心包都是在 BSD 許可下發布的),因此您可以輕鬆找到程式碼並在您的程式中使用它。
ROS 的目標是為機器人軟體開發創建一個標準。它涉及:
- 核心基地
- 與語言無關的通信工具
- 即插即用庫
- 一個活躍且不斷發展的社群
- 以及更多…
如果您想認真開發機器人軟體,學習 ROS 可能是您可能做出的最佳決定之一。
即使您不使用 ROS 來實際開發最終產品或庫,這也將幫助您了解很多關於機器人的知識。這將使您有機會結識許多充滿激情且非常熟練的機器人開發人員。這將為您快速啟動任何機器人項目奠定基礎。
在這篇文章中,概述了什麼是機器人操作系統。我們沒有在這裡擴展核心基礎和通信工具的細節。這是您應該採取的下一步以了解更多資訊。