ROS架構(三)——檔案系統

我不是“耀”神發表於2020-12-21

ROS架構(三)——檔案系統

總述

眾所周知,ROS類似於作業系統,將所有檔案按照一定的規則進行組織,而不同功能的檔案被放置在不同的資料夾下。
功能包(Package):功能包是ROS軟體中的基本單元,包含ROS節點、庫、配置檔案等。
功能包清單(Package Manifest):每個功能包都包含一個名為package.xml的功能包清單,用於記錄功能包的基本資訊,包含作者資訊、許可資訊、依賴選項、編譯標誌等。
元功能包(Meta Package):在新版的ROS中,將原有功能包集(Stack)的概念升級為“元功能包”,主要作用都是組織多個用於同一目的的功能包。例如一個ROS導航的元功能包中會包含建模、定位、導航等多個功能包。
元功能包清單:元功能包清單中可能會包含執行時需要依賴的功能包或者宣告一些引用的標籤。
訊息(Message)型別:訊息是ROS節點之間釋出/訂閱的通訊資訊,可以使用ROS提供的訊息型別,也可以使用.msg檔案在功能包的msg資料夾下自定義所需要的訊息型別。
服務(Service)型別:服務型別定義了ROS客戶端/伺服器通訊模型下的請求與應答資料型別,可以使用ROS系統提供的服務型別,也可以使用.srv檔案在功能包的srv資料夾中進行定義。
程式碼(Code):用來放置功能包節點原始碼的資料夾。

一、功能包

這些資料夾的主要功能如下。
1)config:放置功能包中的配置檔案,由使用者建立,檔名可以不同。
2)include:放置功能包中需要用到的標頭檔案。
3)scripts:放置可以直接執行的Python指令碼。
4)src:放置需要編譯的C++程式碼。
5)launch:放置功能包中所有啟動檔案。
6)msg:放置功能包自定義的訊息型別。
7)srv:放置功能包自定義的服務型別。
8)action:放置功能包自定義的動作指令。
9)CMakeLists.txt:編譯器編譯功能包的規則。
10)package.xml:功能包清單。
從功能包清單中可以清晰地看到該功能包的名稱、版本號、資訊描述、作者資訊和許可資訊。除此之外,<build_depend></build_depend>標籤定義了功能包中程式碼編譯所依賴的其他功能包,而<run_depend></run_depend>標籤定義了功能包中可執行程式執行時所依賴的其他功能包。在開發ROS功能包的過程中,這些資訊需要根據功能包的具體內容進行修改。
ROS針對功能包的建立、編譯、修改、執行設計了一系列命令。

二、元功能包

元功能包是一種特殊的功能包,只包含一個package.xml元功能包清單檔案。它的主要作用是將多個功能包整合成為一個邏輯上獨立的功能包,類似於功能包集合的概念。
雖然元功能包清單的package.xml檔案與功能包的package.xml檔案類似,但是需要包含一個引用的標籤如下:

<export>
    <metapackage/>
</export>

此外,元功能包清單不需要<build_depend>標籤宣告編譯過程依賴的其他功能包,只需要使用<run_depend>標籤宣告功能包執行時依賴的其他功能包。
以導航元功能包為例,可以通過以下命令看到該元功能包中package.xml檔案的內容。

$ roscd navigation
$ gedit package.xml

相關文章