ros是linux發行版本。 ROS全名為Robot Operating System,譯為機器人作業系統;它基於Linux內核,只能在Linux下運作。 ROS提供一些標準作業系統服務,例如硬體抽象,底層設備控制,常用功能實現,進程間訊息以及封包管理。 ROS可以分成兩層,低層是上面描述的作業系統層,高層則是廣大用戶群貢獻的實現不同功能的各種軟體包,例如定位繪圖、行動規劃、感知等。
本教學操作環境:linux7.3系統、Dell G3電腦。
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之前,先介紹ROS的幾個特性,即元作業系統、分散式通訊機制、鬆散耦合軟體框架、豐富的開源功能庫等,來幫大家建立一些感性的認識。
ROS是一個機器人領域的元操作系統。也就是說,它並不是真正意義上的作業系統,其底層的任務調度、編譯、裝置驅動等還是由它的原生作業系統Ubuntu Linux完成。
ROS實際上是運行在Ubuntu Linux上的亞操作系統,或者說軟體框架,但提供硬體抽象、函數呼叫、進程管理這些類似作業系統的功能,也提供用於取得、編譯、跨平台的函數和工具。
ROS的核心思想就是將機器人的軟體功能做成一個個節點,節點之間透過互相傳送訊息進行溝通。 這些節點可以部署在同一台主機上,也可以部署在不同主機上,甚至可以部署在網路上。 ROS網路通訊機制中的主節點(master)負責對網路中各個節點之間的通訊過程進行管理調度,同時提供一個用於配置網路中全域參數的服務。
ROS是鬆散耦合軟體框架,利用分散式通訊機制實現節點間的進程通訊。 ROS的軟體程式碼以鬆散耦合方式組織,開發流程靈活,管理維護方便。
ROS具有豐富的開源功能庫。 ROS是基於BSD(Berkeley Software Distribution,伯克利軟體發行)協定的開源軟體,允許任何人修改、重複使用、重新發布以及在商業和閉源產品中使用,使用ROS能夠快速地建立自己的機器人原型。
與Linux發行版類似,ROS發行版內建了一系列常用功能包,即將ROS系統打包安裝到原生系統中。 ROS最初是基於Ubuntu系統開發的,ROS的發行版本名稱也和Ubuntu採用了同樣的規則,即版本名稱由兩個相同首字母的英文單字組成,版本首字母按字母表遞增順序選取,圖1- 1展示了ROS的一些主要版本。
計算圖、檔案系統和開源社群視角來理解ROS架構。
節點(node),節點之間透過訊息機制進行通信,這樣就組成了一張網狀圖,也叫計算圖,如圖1-3所示。
節點是可執行程序,通常也叫進程。 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指令啟動。
ROS程式的不同元件要放在不同的資料夾中,這些資料夾根據不同的功能對文件進行組織,這就是ROS的檔案系統結構,如圖1-4所示。
工作空間是一個包含功能包、編譯包和編譯後可執行檔的資料夾,使用者可以根據自己的需求建立多個工作空間,在每個工作空間中開發不同用途的功能包。在圖1-4中,我們建立了一個名為catkin_ws的工作空間,其中包含src、build和devel三個資料夾。
功能包是ROS中軟體組織的基本形式,具有創建ROS程式的最小結構和最少內容,它包含ROS節點原始碼、腳本、設定檔等。
i. CMakeLists.txt是功能包設定文件,用於編譯Cmake功能包編譯時的編譯配置。
ii. package.xml是功能包清單文件,用xml的標籤格式標記該功能包的各類相關信息,例如包的名稱、開發者信息、依賴關係等,主要是為了使功能包的安裝和分發更容易。
iii. include/
iv. msg、srv和action這三個資料夾分別用來存放非標準話題訊息、服務訊息和動作訊息的定義檔。 ROS支援用戶自訂訊息通訊過程中使用的訊息類型。這些自訂訊息不是必要的,例如程式只使用標準訊息類型。
v. scripts目錄存放Bash、Python等腳本文件,為非必要項目。
vi. launch目錄存放節點的啟動文件,*.launch文件用於啟動一個或多個節點,在含有多個節點的大型專案中很有用,為非必要項。
vii. src目錄存放功能包節點所對應的原始程式碼,一個功能包中可以有多個節點程式來完成不同的功能,每個節點程式都可以單獨運行。這裡src目錄存放的是這些節點程式的原始碼,你可以按需建立資料夾和檔案來組織原始碼,原始碼可以用C 、Python等寫。
ROS是開源軟體,各個獨立的網路社群分享和貢獻軟體及教程,形成了強大的ROS開源社區,如圖1-5所示。
ROS的發展依賴於開源和共享的軟體,這些程式碼由不同的機構共享和發布,例如GitHub源碼共享、Ubuntu軟體倉庫發布、第三方庫等。 ROS的官方wiki是重要的文檔討論社區,在裡面可以很方便地發布與修改相應的文檔頁面。 ROS的answer主頁裡有大量ROS開發者的提問和回答,對ROS開發中遇到的各種問題的討論很活躍。
相關推薦:《Linux影片教學》
以上是ros是linux什麼版本的詳細內容。更多資訊請關注PHP中文網其他相關文章!