使用colcon构建包

这是一个关于如何使用 colcon 创建和构建ROS 2工作区的简要教程。这是一个实用的教程,并非旨在取代colcon核心文档。 [小鱼@6976]

背景

编译工具 colcon 是在ROS 构建工具 catkin_make , catkin_make_isolated, catkin_toolsament_tools 上的再次迭代。关于设计colcon思路 在这篇文章中可以找到[小鱼@6977]

colcon代码源文件可以在 colcon GitHub 开源组 中找到。 [小鱼@6978]

先决条件

安装colcon

sudo apt install python3-colcon-common-extensions

安装ROS 2

要构建示例,您需要安装ROS 2。

可以看 安装一节. [小鱼@6982]

注意

如果从Debian包安装,本教程需要 desktop安装. [小鱼@6983]

基础知识

ROS工作区是具有特定结构的目录。通常有一个 src 子目录。在该子目录中是ROS包的源文件的位置。通常一开始目录是空的。 [小鱼@6985]

colcon在源代码外进行构建(这与Cmake默认在文件夹里不同)。默认情况下,它将在 ``src``同级目录下创建以下文件夹: [小鱼@6986]

  • build 目录将是中间文件的存储位置。对于每个包,将创建一个子文件夹,在其中调用例如CMake。 [小鱼@6987]

  • install 目录是每个软件包将安装到的位置。默认情况下,每个包都将安装到单独的子目录中。 [小鱼@6988]

  • log 目录包含有关每个colcon调用的各种日志信息。 [小鱼@6989]

注解

与catkin相比,没有 devel 目录。

创建工作空间

首先,创建一个目录 ( ros2_example_ws ) 来包含我们的工作区:

mkdir -p ~/ros2_example_ws/src
cd ~/ros2_example_ws

此时,工作区包含一个空目录 src :

.
└── src

1 directory, 0 files

添加一些代码文件 [小鱼@6994]

让我们将 examples 仓库克隆到工作区的 src 目录中:

git clone https://github.com/ros2/examples src/examples -b foxy

现在工作区应该有 ROS 2 examples 的源代码了: [小鱼@6996]

.
└── src
    └── examples
        ├── CONTRIBUTING.md
        ├── LICENSE
        ├── rclcpp
        ├── rclpy
        └── README.md

4 directories, 3 files

通过source添加依赖 [小鱼@6997]

在编译之前,一定记得要用source指令运行ROS 2安装目录下的setup脚本,通过该脚本为我们的工作区示例功能包提供必要构建依赖项。这是通过source二进制安装或源码文件安装的ROS2提供的安装脚本来实现的,在另一个colcon工作区 (见 Installation) 。我们称这个环境未为底层环境依赖。 [小鱼@6998]

我们的工作区 ros2_examples_ws 将覆盖现有ROS 2安装目录。一般来说,当您计划迭代少量包时,建议使用覆盖,而不是将所有包放入同一个工作区。 [小鱼@6999]

构建工作空间

注意

Windows构建包你需要在Visual Studio环境,具体请看 Building the ROS 2 Code 详情。 [小鱼@7001]

在工作区的根目录下,运行 colcon build 。由于建造类型 ament_cmake 不支持 devel 空间的概念,需要安装软件包,colcon支持 --symlink-install 选项。这使得安装文件通过改变文件 source 空间 (例如Python文件或其他不编译重新源文件) 更快的迭代。 [小鱼@7002]

colcon build --symlink-install

构建完成后,我们应该会看到 buildinstalllog 目录:

.
├── build
├── install
├── log
└── src

4 directories, 0 files

运行测试

要对我们刚刚构建的包运行测试,请运行以下命令:

colcon test

Source环境

当colcon成功完成构建后,输出将在 install 目录中。在使用任何已安装的可执行文件或库之前,需要将它们添加到路径和库路径中。colcon将在 install 目录中生成bash/bat文件,以帮助设置环境。这些文件将向您的路径和库路径添加所有必需的元素,并提供包导出的任何bash或shell命令。

. install/setup.bash

尝试一个例程

使用环境上下文的资源,我们可以运行colcon构建的可执行文件。让我们从示例中运行一个订阅服务器节点: [小鱼@7013]

ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function

在另一个终端中,让我们运行一个发布程序节点 (不要忘记 source install): [小鱼@7014]

ros2 run examples_rclcpp_minimal_publisher publisher_member_function

您应该会看到来自发布者和订阅者的消息,其中数字递增。

创建您自己的包

colcon使用 package.xml 定义在 REP 149 规范 (format 2 也被支持)。 [小鱼@7017]

colcon支持多种构建类型。推荐的构建类型是 ament_cmakeament_python ,还支持纯 cmake 包。 [小鱼@7018]

[需手动修复的语法] ament_python 建筑的一个例子是 ament_index_python package ,其中setup.py是建筑的主要入口。 [待校准@7019]

demo_nodes_cpp 这样的包使用 ament_cmake 构建类型,并使用CMake作为构建工具。 [待校准@7020]

为方便起见,您可以使用工具 ros2 pkg create 基于模板创建新的包。

注解

对于 catkin 使用者,这相当于 catkin_create_package

设置 colcon_cd

通过命令 colcon_cd ,您可以快速将shell的当前工作目录更改为包的目录。例如, colcon_cd some_ros_package 会很快将您带到目录 ~/ros2_install/src/some_ros_package[小鱼@7024]

echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "export _colcon_cd_root=/opt/ros/foxy/" >> ~/.bashrc

根据您安装 colcon_cd 的方式和工作区的位置,上述说明可能会有所不同,详情请参考 the documentation 。要在Linux和macOS中撤消此操作,请找到系统的shell启动脚本,并删除附加的源文件和导出命令。 [待校准@7026]

设置 colcon 标签完成 [待校准@7027]

命令 colcon supports command completion bash和bash类似贝壳如果 colcon-argcomplete 包安装。 [待校准@7028]

echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bashrc

根据您安装 colcon 的方式和工作区的位置,上述说明可能会有所不同,详情请参考 the documentation 。要在Linux和macOS中撤消此操作,请找到系统的shell启动脚本并删除附加的源文件命令。 [待校准@7029]

提示

  • 如果您不想构建特定的包,请在目录中放置一个名为 COLCON_IGNORE 的空文件,它将不会被索引。 [待校准@7031]

  • 如果你想避免在CMake包中配置和构建测试,你可以通过: --cmake-args -DBUILD_TESTING=0[待校准@7032]

  • 如果要从包中运行单个特定测试: [待校准@7033]

    colcon test --packages-select YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG