日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

ROS2学习(十六).ROS概念 - 构建系统

發布時間:2023/12/15 windows 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS2学习(十六).ROS概念 - 构建系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于ROS 2的構建系統

  • `ament_package`包
    • **package.xml**
    • **ament package**
  • `ament_cmake`代碼庫
  • `ament_lint`代碼庫
  • 構建工具
  • 參考

構建系統是一切的基石。在ROS生態中,我們從ROS 1 開始考慮構建系統。這一套構建系統相關的包從ROS 1的catkin迭代至今ament。將名字改為ament中的部分原因是我們希望它不會與catkin相沖突,以便我們需要混合使用它們,并防止與現有的catkin文檔混淆。ament的主要職責是使開發和維護ROS 2核心包變得更容易。當然,這種工具也可以提供給任何愿意遵循ROS構建系統約定和工具的用戶。此外,它可以使包更加規范的,這樣開發人員應該能夠挑選任何基于ament構建的包。此規范約束了包如何工作、如何檢查以及如何構建或使用。

ament由幾個重要的庫組成,它們都在GitHub的ament組織中:

  • ament_package包
  • ament_cmake庫
  • ament_lint庫
  • 構建工具

ament_package包

ament/ament_package庫包含了一個單獨的ament Python包,它為ament包提供了各種實用工具,例如環境hook的模板。

無論底層的編譯系統是什么,所有的組件包都必須在包的根目錄中包含一個package.xml文件。“manifest”文件package.xml包含處理和操作一個包所需的信息。其中包含了全局唯一的包名和包的依賴項。package.xml還可以作為標記文件,標明包在文件系統中的位置。

在ROS 1中,catkin_pkg提供了對package.xml文件的解析,解析后可以在文件系統中定位相關包。在ROS 2中構建工具(如colcon)負責對這些package.xml文件的解析。

package.xml

包清單文件,它描述了包的根目錄,包的元信息,包括它的名稱、版本、描述、維護者、許可證、依賴關系等等。清單的內容是機器可讀的XML格式,相關格式在REPs 127和140中進行了描述,并有可能在未來的REPs中進一步演進。

因此,每當某個包被稱為ament package時,這意味著它是使用package.xml清單文件描述的單個軟件單元(源代碼、構建文件、測試、文檔和其他資源)。

ament package

任何遵循ament打包指南的包,其中包含有package.xml文件。與底層構建系統無關。

由于ament package與構建系統無關,所以存在有ament CMake包、ament Python包等不同種類的ament包。

CMake package

包含普通CMake項目和package.xml清單文件的包。

ament CMake package

遵循ament打包指南的CMake package。

Python package

包含基于setuptools的Python項目和package.xml清單文件的包。

ament Python package

遵循ament打包指南的Python package。

ament_cmake代碼庫

位于GitHub的ament/ament_cmake,這個庫提供了在CMake中創建“ament CMake”package所需的基礎設施,包含許多“ament CMake”和純CMake package。“ament CMake” package指的是:使用CMake構建的ament package。因此,這個庫中的包提供了必要的CMake函數/宏和CMake模塊,以便創建更多的“ament CMake”(或ament_cmake)包。這種類型的包在package.xml文件用<export>的<build_type>ament_cmake</build_type>tag進行標記。

上述代碼庫中的包是非常模塊化的,只有一個“瓶頸”包ament_cmake。ament_cmake包聚合了這個代碼庫中所有包的功能。該庫中包含有以下包:

  • ament_cmake
    • 聚合此存儲庫中的所有其他包的功能,用戶只需要依賴于此。
  • ament_cmake_auto
    • 提供了方便的CMake函數,可以自動編寫包的CMakeLists.txt文件的許多繁瑣部分
  • ament_cmake_core
    • 為ament提供所有內置的核心概念,例如環境鉤子、資源索引、符號鏈接安裝等
  • ament_cmake_gmock
    • 為基于gmock的單元測試添加的功能
  • ament_cmake_gtest
    • 為基于gtest的自動化測試添加的功能
  • ament_cmake_nose
    • 為基于nosetests的python自動化測試添加的功能
  • ament_cmake_python
    • 為包含Python代碼的包提供CMake函數
  • ament_cmake_test
    • 使用CTest在單個目標下聚合不同種類的測試,例如gtest和nosetests

ament_cmake_core包中包含大量的CMake基礎設施,使包之間能夠輕易地通過傳統接口傳遞信息。這使得包之間的構建更為解耦,促進了包的重用,并鼓勵不同包的構建系統中的約定。例如,它提供了在包之間傳遞包含目錄、庫、定義和依賴項的標準方法,以便該信息的使用者可以以傳統方式訪問該信息。

ament_cmake_core包還提供了ament構建系統的特性,比如符號鏈接安裝,它允許您象征性地將文件從源空間或構建空間鏈接到安裝空間,而無需復制它們。這允許您僅需進行一次安裝,然后改動非生成的資源,如Python代碼和配置文件,而無需重新運行安裝步驟就可使其生效。這一功能本質上取代了catkin中的“devel space”,因為它帶來了大量的優點和很少的復雜性或缺點。

ament_cmake_core提供的另一個特性是包資源索引,這為包提供了一種表明它們包含某種類型的資源的方法。這個特性的設計使它可以更有效地回答一些簡單的問題,比如這個前綴中有哪些包(例如/usr/local),他只需要你列出該前綴下單個可能位置中的文件。你可以在資源索引的設計文檔中關于這個特性的內容。

像catkin一樣,ament_cmake_core也提供了環境設置文件和包特定的環境鉤子。常見的環境設置文件如setup.bash,是包開發人員定義使用其包所需的環境更改。開發人員可以使用“環境鉤子”來實現這一點,它基本上是一個任意的shell代碼,可以設置或修改環境變量,定義shell函數,設置自動完成規則等等。這個特性提供了類似于在catkin不知道ROS的發布版本的情況下,使ROS 1設置ROS_DISTRO環境變量。

ament_lint代碼庫

這個代碼庫位于GitHub的ament/ament_lint,它以方便和一致的方式提供了幾個檢測和測試服務的包。目前有一些包支持使用uncrustify進行C++風格檢測,使用cppcheck進行靜態c++代碼檢查,檢查源代碼版權,使用pep8進行Python風格檢測,以及其他功能。helper包的列表將來可能會增長。

構建工具

構建工具通過一次調用來執行一次構建包工作區的任務。從ROS 2發行Ardent版本開始提供了構建工具ament_tools。從ROS 2 Bouncy開始,ament_tools已經被colcon取代,這在通用構建工具中有所描述。

參考

總結

以上是生活随笔為你收集整理的ROS2学习(十六).ROS概念 - 构建系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。