首頁 >運維 >linux運維 >ros是linux什麼版本

ros是linux什麼版本

青灯夜游
青灯夜游原創
2023-04-12 16:13:061441瀏覽

ros是linux發行版本。 ROS全名為Robot Operating System,譯為機器人作業系統;它基於Linux內核,只能在Linux下運作。 ROS提供一些標準作業系統服務,例如硬體抽象,底層設備控制,常用功能實現,進程間訊息以及封包管理。 ROS可以分成兩層,低層是上面描述的作業系統層,高層則是廣大用戶群貢獻的實現不同功能的各種軟體包,例如定位繪圖、行動規劃、感知等。

ros是linux什麼版本

本教學操作環境:linux7.3系統、Dell G3電腦。

ROS定義介紹

ROS全名為Robot Operating System,譯為機器人作業系統。基於Linux內核,目前只能在Linux下運作。

ROS設計者將ROS表述為“ROS = Plumbing Tools Capabilities Ecosystem”,即ROS是通訊機制、工具軟體包、機器人高層技能以及機器人生態系統的集合體。

顧名思義,ROS就是一個系統。它和我們用的普通作業系統類似,ROS將底層的機器人硬體封裝起來,也就是說,不同的機器人中包含的各種底層參數,在使用ROS進行開發的人員眼裡,都是一樣的。這裡還要提一下,目前ROS沒有一個視覺化介面。我們所使用的Windows、Linux能直接看到影像介面並操作,是因為它們有一個視覺化介面,而ROS沒有。我們所謂的作業系統,不一定是都要有視覺化介面才算的,如果有興趣的可以去看一下最早期的作業系統,只有命令列,並沒有絢麗多彩的介面。

ROS提供一些標準作業系統服務,例如硬體抽象,底層設備控制,常用功能實現,進程間訊息以及封包管理。 ROS是基於一種圖狀架構,從而不同節點的進程能接受,發布,聚合各種資訊(例如感測,控制,狀態,規劃等等)。

ROS可以分成兩層,低層是上面描述的操作系統層,高層則是廣大用戶群貢獻的實現不同功能的各種軟體包,例如定位繪圖,行動規劃,感知,模擬等等。

ROS是一個多義詞,它還可以是一種通訊機制。在ROS開發中,用節點(Node)表示應用程序,一個節點就是一個可執行程式。節點之間就是透過ROS進行通訊。 ROS透過節點管理器(Master)對各個節點進行管理。至於具體的原理實現等後續再說。

此外,ROS也代表一系列用於機器人開發的工具包、演算法、技能、平台、生態等。

ROS的歷史。說穿了,ROS就是一群大佬在開發機器人的時候覺得比較好的東西(可以是一些好用的函式庫、軟體,也可以是一些思想、協議、標準​​)匯集在一起後形成的東西。在機器人的開發中,各種各樣的機器人沒有統一的標準,每次開發一個自己沒見過的機器人都需要重新去學習大量的東西,十分的不方便,於是,大佬們借鑒操作系統產生的思想,覺得為什麼不可以給機器人也做一套系統來封裝底層呢?於是,ROS產生了。經過歲月的打磨,ROS越來越完善,用的人也越來越多了。

ROS功能作用

如果你要問我ROS是做什麼的,那你只要知道一句話就夠了。 ROS是用來做機器人或機器手臂開發的。

機器人開發的歷史中,標準化的工作還是沒有做到位。不同的機器人,所使用的系統、程式等等都不一樣,這樣導致只要跨平台,開發起來就十分的困難。為了解決這樣的問題,ROS誕生了。 ROS可以透過封裝,使得底層硬體對於開發者來說變得透明,大大降低了跨平台開發的難度。

之所以選擇ROS,上面說了那麼多其實大家也應該明白了,無非就是,用的人多,普及範圍廣。 ROS所包含的領域、資料、功能、內容、知識等十分豐富,不用它你想去自己編庫麼?

1. ROS的效能特色

在正式學習ROS之前,先介紹ROS的幾個特性,即元作業系統、分散式通訊機制、鬆散耦合軟體框架、豐富的開源功能庫等,來幫大家建立一些感性的認識。

ROS是一個機器人領域的元操作系統。也就是說,它並不是真正意義上的作業系統,其底層的任務調度、編譯、裝置驅動等還是由它的原生作業系統Ubuntu Linux完成。

ROS實際上是運行在Ubuntu Linux上的亞操作系統,或者說軟體框架,但提供硬體抽象、函數呼叫、進程管理這些類似作業系統的功能,也提供用於取得、編譯、跨平台的函數和工具。

ROS的核心思想就是將機器人的軟體功能做成一個個節點,節點之間透過互相傳送訊息進行溝通。 這些節點可以部署在同一台主機上,也可以部署在不同主機上,甚至可以部署在網路上。 ROS網路通訊機制中的主節點(master)負責對網路中各個節點之間的通訊過程進行管理調度,同時提供一個用於配置網路中全域參數的服務。

ROS是鬆散耦合軟體框架,利用分散式通訊機制實現節點間的進程通訊。 ROS的軟體程式碼以鬆散耦合方式組織,開發流程靈活,管理維護方便。

ROS具有豐富的開源功能庫。 ROS是基於BSD(Berkeley Software Distribution,伯克利軟體發行)協定的開源軟體,允許任何人修改、重複使用、重新發布以及在商業和閉源產品中使用,使用ROS能夠快速地建立自己的機器人原型。

2. ROS的發行版本

與Linux發行版類似,ROS發行版內建了一系列常用功能包,即將ROS系統打包安裝到原生系統中。 ROS最初是基於Ubuntu系統開發的,ROS的發行版本名稱也和Ubuntu採用了同樣的規則,即版本名稱由兩個相同首字母的英文單字組成,版本首字母按字母表遞增順序選取,圖1- 1展示了ROS的一些主要版本。

ros是linux什麼版本
圖1-1 ROS的主要版本

##ROS系統架構

安裝完ROS後,很多朋友應該迫不及待想立刻開始寫程式。由於ROS的架構較為複雜,為了後面容易理解遇到的各種概念,這裡先討論一下ROS的系統架構,好讓大家對ROS中的各種概念有全面性把控。根據官方的說法,可以分別從

計算圖檔案系統開源社群視角來理解ROS架構。

1. 從計算圖視角理解ROS架構

ROS中可執行程式的基本單位叫做

節點(node),節點之間透過訊息機制進行通信,這樣就組成了一張網狀圖,也叫計算圖,如圖1-3所示。

ros是linux什麼版本圖1-3 ROS的計算圖結構
節點是可執行程序,通常也叫進程。 ROS功能包中所建立的每個執行程式在啟動載入到系統流程後,就是一個ROS節點,如圖1-3的節點1、節點2、節點3等。

節點之間透過收發訊息進行通信,訊息收發機制分為

主題(topic)、服務(service)和動作( action)三種,如圖1-3的節點2與節點3、節點2與節點5採用話題通信,節點2與節點4採用服務通信,節點1與節點2採用動作通信。 計算圖中的節點、話題、服務、動作都要有唯一名稱作為識別。

ROS利用節點將程式碼和功能解耦,提高了系統的容錯性和可維護性。所以最好讓每個節點都有特定的單一功能,而不是創造一個包羅萬象的龐大節點。如果用C 寫節點,需要用到ROS提供的roscpp函式庫;如果用Python寫節點,需要用到ROS提供的rospy函式庫。

訊息是構成計算圖的關鍵,包括訊息機制和訊息類型兩部分。訊息機制有話題、服務和動作三種,每種訊息機制中傳遞的資料都有特定的資料類型(即訊息類型),訊息類型可分為話題訊息類型、服務訊息類型和動作訊息類型。訊息機制和訊息類型將在1.5節中展開講解。

封包(rosbag)是ROS中專門用來保存和回放話題中資料的文件,可以將一些難以收集的感測器資料用資料包錄製下來,然後反覆回放來進行演算法性能調試。

參數伺服器能夠為整個ROS網路中的節點提供方便修改的參數。參數可以認為是節點中可供外部修改的全域變量,有靜態參數和動態參數。靜態參數一般用於在節點啟動時設定節點工作模式;動態參數可用於在節點運作時動態配置節點或改變節點工作狀態,例如馬達控制節點裡的PID控制參數。

主節點負責各個節點之間通訊過程的調度管理。因此主節點必須先啟動,可以透過roscore指令啟動。

2. 從檔案系統視角理解ROS架構

ROS程式的不同元件要放在不同的資料夾中,這些資料夾根據不同的功能對文件進行組織,這就是ROS的檔案系統結構,如圖1-4所示。

ros是linux什麼版本
圖1-4 ROS的檔案系統結構

工作空間是一個包含功能包、編譯包和編譯後可執行檔的資料夾,使用者可以根據自己的需求建立多個工作空間,在每個工作空間中開發不同用途的功能包。在圖1-4中,我們建立了一個名為catkin_ws的工作空間,其中包含src、build和devel三個資料夾。

  • src資料夾放置各個功能包和設定功能包的CMake設定檔CMakeLists.txt。這裡說明一下,由於ROS中的原始碼採用catkin工具進行編譯,而catkin工具又基於CMake技術,所以我們在src原始檔空間和各個功能包中都會見到一個CMake設定檔CMakeLists.txt,這個檔起到配置編譯的作用。
  • build資料夾放置編譯CMake和catkin功能包時產生的快取、設定、中間檔案等。
  • devel資料夾放置編譯好的可執行程序,這些執行程式是不需要安裝就能直接執行的。一旦功能包原始碼編譯和測試通過後,可以將這些編譯好的可執行檔直接匯出與其他開發人員分享。

功能包是ROS中軟體組織的基本形式,具有創建ROS程式的最小結構和最少內容,它包含ROS節點原始碼、腳本、設定檔等。

i. CMakeLists.txt是功能包設定文件,用於編譯Cmake功能包編譯時的編譯配置。

ii. package.xml是功能包清單文件,用xml的標籤格式標記該功能包的各類相關信息,例如包的名稱、開發者信息、依賴關係等,主要是為了使功能包的安裝和分發更容易。

iii. include/是功能包頭檔目錄,可以把功能包程式中包含的*.h頭檔放在這裡。 include目錄之所以還要加一級路徑是為了更好地區分自己定義的頭文件和系統標準頭文件,用實際功能包的名稱替代。不過這個資料夾不是必要項,例如有些程式沒有頭檔。

iv. msg、srv和action這三個資料夾分別用來存放非標準話題訊息、服務訊息和動作訊息的定義檔。 ROS支援用戶自訂訊息通訊過程中使用的訊息類型。這些自訂訊息不是必要的,例如程式只使用標準訊息類型。

v. scripts目錄存放Bash、Python等腳本文件,為非必要項目。

vi. launch目錄存放節點的啟動文件,*.launch文件用於啟動一個或多個節點,在含有多個節點的大型專案中很有用,為非必要項。

vii. src目錄存放功能包節點所對應的原始程式碼,一個功能包中可以有多個節點程式來完成不同的功能,每個節點程式都可以單獨運行。這裡src目錄存放的是這些節點程式的原始碼,你可以按需建立資料夾和檔案來組織原始碼,原始碼可以用C 、Python等寫。

3. 從開源社群視角理解ROS架構

ROS是開源軟體,各個獨立的網路社群分享和貢獻軟體及教程,形成了強大的ROS開源社區,如圖1-5所示。

ros是linux什麼版本
圖1-5 ROS的開源社群結構

ROS的發展依賴於開源和共享的軟體,這些程式碼由不同的機構共享和發布,例如GitHub源碼共享、Ubuntu軟體倉庫發布、第三方庫等。 ROS的官方wiki是重要的文檔討論社區,在裡面可以很方便地發布與修改相應的文檔頁面。 ROS的answer主頁裡有大量ROS開發者的提問和回答,對ROS開發中遇到的各種問題的討論很活躍。

相關推薦:《Linux影片教學

以上是ros是linux什麼版本的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn