零之前言
要想真的用好ROS這款框架,需要我們需要比較好了解整個框架的架構。本文只做概念性的記錄,後面會詳細編寫其內容。
對於這一節內容,我選擇了幾個比較好的博客鏈接分享:
ROS學習筆記二:ROS系統架構及概念
一、三層級
ROS被分爲三部分與層級:文件系統級
、計算圖級
、開源社區級
。
1.文件系統級
引用一張圖,其中文件系統級可以由綜合功能包和功能包構成,綜合功能包由許多功能包構成,ROS提供了許多的綜合功能包以便我們調用。而功能包裏的東西,是我們的重點。
我們來看看一個ROS的裏的文件結構的例子,等會兒講解的時候也可以對照着這組圖來看:
①工作空間
我們先tree一個目錄(該目錄就是工作目錄
),這個目錄裏有:build
、devel
、src
三個子文件夾。其中的build
和devel
分別是編譯的中間產物和結果,我們可以不用太去管它,最重要的就是src這個文件夾了,我們編寫的東西,基本上都存放在這裏。
②功能包
結合圖例,我們的功能包就是這個src文件夾裏的example,這個包就叫做功能包,裏面可能會有以下東西:
類型 | 必需 | 路徑 | 作用 |
---|---|---|---|
文件夾 | 必需 | /include/包名 | 用於存放我們寫的代碼的頭文件 |
文件夾 | 否 | /msg | 用於編寫我們非標準通信數據類型格式 |
文件夾 | 否 | /svr | 用於編寫我們服務的數據格式 |
文件夾 | 否 | /script | 用於存放腳本文件,python代碼也放這裏 |
文件夾 | 必需 | /src | 用於存放我們編寫的節點的源碼 |
文件 | 必需 | / | 用於編譯的Cmake語句 |
文件 | 必需 | / | 功能包清單文件 |
對於功能包的管理,ROS推出了一些類似於Linux的命令,例如roscd
、rosls
等,至於用法不贅述,可以看這裏的詳細例子:創客智造-ROS入門教程-1.1.2 ROS文件系統介紹
③綜合功能包
綜合功能包是一些只有一個package.xml文件的特定包,它不包含其他文件,如代碼等。綜合功能包用於引用其他功能特性類似的功能包。
④消息
消息存放在功能包的/src/msg裏,用於規定通信的非標準數據類型。
⑤服務
服務存放於功能包的/srv裏,用於規定通信的非標準數據類型。
ROS使用了一種簡化的服務描述語言來描述ROS的服務類型
2.計算圖集
ROS的計算圖集由下圖所示組成
這圖展示了運行時它們的關係:
名稱 | 作用 |
---|---|
節點(node) | 節點是主要的計算執行進程,推薦一個節點只對應一個功能 |
節點管理器(master) | 顧名思義,可以直接理解爲管理這些節點是否存活,管理它們之間的關係的東西,也就是我們運行時用roscore啓動的東西之一 |
參數服務器(parameter server) | 參數服務器是可通過網絡訪問的共享的多變量字典。節點使用此服務器來存儲和檢索運行時的參數。 |
消息(message) | 消息包括一個節點發生到話題到其他節點的數據類型 |
話題(topic) | 話題相當於消息的中轉站,多個節點可以給同一個節點發送同一種消息,多個節點也可以在節點力接收同一種消息 |
服務(service) | 用於節點至節點的傳輸(不經過話題) ,其數據類型也可能需要自定義 |
消息記錄包(bag) | 消息紀錄包是由ROS創建的一組文件。它使用 .bag 格式保存消息、主題、服務和其他ROS數據信息。(類似於日誌文件,查錯方便) |
說明:話題和服務是兩種不同不同的通信方式。兩者有所差別,詳細的內容可以看這些博客:
ROS學習筆記6~Topic(話題) 和Service(服務)的區別
ROS話題和服務
我們可以大概可以這樣理解消息話題與服務,話題與服務是節點的通訊方式,而消息是話題的數據類型。
3.開源社區級別
這一級別的內容沒有什麼可以說的,主要就是可以學習ROS的資源包括一下內容:
- 發行版
- 軟件庫
- ROS維基
- Bug提交系統
- 郵件列表
- ROS問答
- 博客
- ……