当前位置:   article > 正文

【ROS2】概念:高级-构建系统

【ROS2】概念:高级-构建系统

目录

  •  构建工具

  •  构建助手

    •   ament_package 包

    •   ament_cmake 仓库

    •   ament_lint 仓库

  •  元构建工具

构建系统是允许开发人员根据需要构建其 ROS 2 代码的工具。ROS 2 在很大程度上依赖于将代码划分为包,每个包都包含一个清单文件 package.xml )。此清单文件包含有关包的基本元数据,包括其对其他包的依赖性。此清单是元构建工具正常运行所必需的。

ROS 2 构建系统由三个主要概念组成。

构建工具 

这是控制单个包的编译和测试的软件。在 ROS 2 中,这通常是 C++ 的 CMake 和 Python 的 setuptools,但也支持其他构建工具。

构建助手 

这些是挂钩到构建工具以改善开发者体验的辅助函数。ROS 2 包通常依赖于 ament 系列包。 ament 由几个重要的存储库组成,这些存储库都在 GitHub 组织中。

  ament_package 包

位于 GitHub 上的 ament/ament_package,此存储库包含一个 ament Python 包,该包提供了各种 ament 包的实用程序,例如环境钩子的模板。

所有 ament 包必须包含一个位于包根目录的单一 package.xml 文件,无论其底层构建系统如何。package.xml “清单”文件包含处理和操作包所需的信息。此包信息包括包的名称(全局唯一)和包的依赖项。package.xml 文件还充当标记文件,指示包在文件系统上的位置。

package.xml 文件的解析由 catkin_pkg 提供(如在 ROS 1 中),而通过搜索文件系统中的这些 package.xml 文件来定位包的功能由 colcon 等构建工具提供。

  • package.xml

  • 包清单文件标记包的根目录,并包含有关包的元信息,包括其名称、版本、描述、维护者、许可证、依赖项等。清单的内容是机器可读的 XML 格式,内容在 REPs 127 和 140 中描述,并且在未来的 REPs 中可能会进一步修改。

因此,任何时候某个包被称为 ament 包,这意味着它是一个软件单元(源代码、构建文件、测试、文档和其他资源),这些资源是使用 package.xml 清单文件描述的。

  •  ament 包 

  • 任何包含 package.xml 并遵循 ament 的打包指南的包,无论底层构建系统如何。

由于术语 ament 包与构建系统无关,因此可以有不同种类的 ament 包,例如 ament CMake 包,ament Python 包等。

以下是您在此软件堆栈中可能遇到的常见包类型列表

  •  CMake 包 

  • 任何包含普通 CMake 项目和 package.xml 清单文件的包。

  •  ament CMake 包 

  • 一个遵循 ament 打包指南的 CMake 包。

  •  Python 包 

  • 任何包含基于 setuptools 的 Python 项目和 package.xml 清单文件的包。

  •  ament Python 包 

  • 一个也遵循 ament 打包指南的 Python 包。

  ament_cmake 存储库 

位于 GitHub 上的 ament/ament_cmake,这个仓库包含许多“ament CMake”和纯 CMake 包,这些包提供了在 CMake 中创建“ament CMake”包所需的基础设施。在此上下文中,“ament CMake”包的意思是: ament 使用 CMake 构建的包。因此,这个仓库中的包提供了必要的 CMake 函数/宏和 CMake 模块,以便于创建更多的“ament CMake”(或 ament_cmake )包。这种类型的包在 package.xml 文件的 <export> 标签中的 <build_type>ament_cmake</build_type> 标签中被标识。

此存储库中的软件包非常模块化,但有一个名为 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_python 用户文档

  • ament_cmake_test

    • 汇总不同种类的测试,例如 gtest 和 nosetests,在使用 CTest 的单个目标下

ament_cmake_core 包含了大量的 CMake 基础设施,使得可以通过常规接口在包之间干净地传递信息。这使得包与其他包的构建接口更加解耦,促进了它们的重用,并鼓励在不同包的构建系统中采用约定。例如,它提供了一种标准方式来传递包含目录、库、定义和依赖项,以便这些信息的使用者可以以常规方式访问这些信息

ament_cmake_core 包还提供了 ament 构建系统的功能,如符号链接安装,允许您将文件从源空间或构建空间符号链接到安装空间,而不是复制它们。这使您可以安装一次,然后编辑非生成资源(如 Python 代码和配置文件),而无需重新运行安装步骤即可生效。此功能本质上取代了 catkin 的“开发空间”,因为它具有大多数优点且几乎没有复杂性或缺点。

ament_cmake_core 提供的另一个功能是包资源索引,这是一种让包指示它们包含某种类型资源的方法。该功能的设计使得回答简单问题(例如, /usr/local 中有哪些包)更加高效,因为它只需要列出该前缀下单个可能位置的文件。您可以在资源索引的设计文档中阅读有关此功能的更多信息。

像 catkin 一样, ament_cmake_core 也提供环境设置文件和特定于包的环境钩子。环境设置文件通常命名为 setup.bash ,是包开发人员定义环境更改以使用其包的地方。开发人员可以使用“环境钩子”来做到这一点,环境钩子基本上是一段任意的 shell 代码,可以设置或修改环境变量,定义 shell 函数,设置自动完成规则等……例如,ROS 1 就是通过这种功能在 catkin 对 ROS 发行版一无所知的情况下设置了 ROS_DISTRO 环境变量。

  ament_lint 存储库 

位于 GitHub 上的 ament/ament_lint,这个仓库提供了几个包,这些包以方便和一致的方式提供 linting 和测试服务。目前有支持 C++ 风格 linting 的包,使用 uncrustify 进行静态 C++ 代码检查,检查源代码中的版权,使用 pep8 进行 Python 风格 linting,以及其他功能。辅助包的列表可能会在未来增加。

 元构建工具 

这是一款能够拓扑排序一组软件包,并按正确的依赖顺序构建或测试它们的软件。该软件将调用构建工具来完成编译、测试和安装软件包的实际工作。

在 ROS 2 中,名为 colcon  https://colcon.readthedocs.io/en/released/ 的工具用于此目的。

https://docs.ros.org/en/jazzy/Concepts/Advanced/About-Build-System.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/922319
推荐阅读
相关标签
  

闽ICP备14008679号