Using colcon to build packages:使用colcon来构建软件包

简介: Using colcon to build packages:使用colcon来构建软件包

@[toc]

参考官方文档:Using colcon to build packages

这是一个关于如何用colcon创建和构建ROS 2工作区(workspace)的简要教程。它是一个实用的教程,而不是为了取代核心文档。

Colcon简介

colcon是ROS构建工具catkin_make、catkin_make_isolated、catkin_tools和ament_tools的迭代。关于colcon设计的更多信息,请参见A universal build tool

源代码可以在GitHub组织colcon中找到。

基本概念

一个ROS工作区是一个具有特定结构的目录。通常有一个src子目录。在这个子目录中,ROS软件包的源代码将被放在那里。通常情况下,该目录开始时是空的。

colcon进行源外构建。默认情况下,它将创建以下目录作为src目录的同级目录:

  • build目录将是存储中间文件的地方。每一个包都将创建一个子文件夹。
  • install目录是每个软件包将被安装到的地方。默认情况下,每个软件包将被安装到一个单独的子目录中。
  • log目录包含关于每个colcon调用的各种日志信息。

与catkin相比,没有devel目录。

创建一个工作空间

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws

现在工作空间只包含一个空文件夹 src:

.
└── src

1 directory, 0 files

添加一些源文件

示例代码下载到src目录中:

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

现在工作空间应该结构如下:

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

4 directories, 3 files

Source底层

为现有的ROS 2安装设置好环境可以为工作空间提供示例软件包构建所需的依赖项,这一点很重要。 这是通过source由二进制安装或源文件安装提供的安装脚本来实现的。我们称这种环境为底层。 我们的工作区 ros2_ws 将叠加在现有 ROS 2 安装之上。 通常,建议在计划迭代少量包时使用叠加,而不是将所有包放入同一个工作区。

构建工作空间

在工作区的根目录中,运行 colcon build。 由于 ament_cmake 等构建类型不支持开发空间的概念并且需要安装包,因此 colcon 支持选项 --symlink-install。 这允许通过更改源空间中的文件(例如 Python 文件或其他未编译的资源)来更改已安装的文件,以加快迭代速度。

colcon build --symlink-install

构建完成后,我们应该看到 build 、install 和 log 目录:

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

4 directories, 0 files

运行测试

要运行我们刚刚建立的软件包的测试,请运行以下命令:

colcon test

Source环境

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

. install/setup.bash

尝试演示

设置好环境后,我们可以运行由colcon构建的可执行文件。让我们运行例子中的一个订阅者节点:

ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function

在另一个终端中,让我们运行一个发布者节点(不要忘了设置环境):

ros2 run examples_rclcpp_minimal_publisher publisher_member_function

您应该看到来自发布者和订阅者的消息的数量在增加。

创建自己的软件包(package)

colcon使用REP 149中定义的package.xml规范(也支持format 2)。

colcon支持多种构建类型。推荐的构建类型是ament_cmake和ament_python。也支持纯cmake包。

ament_python构建的一个例子是ament_index_python package,其中setup.py是构建的主要入口。

demo_nodes_cpp这样的包使用ament_cmake构建类型,并使用CMake作为构建工具。

为了方便起见,你可以使用 ros2 pkg create 这个工具来创建一个基于模板的新软件包。对于catkin用户,这相当于catkin_create_package。

设置colcon_cd和tab补全

命令 colcon_cd 允许你快速地将shell的当前工作目录改为软件包的目录。举例来说,colcon_cd some_ros_package将迅速把你带到~/ros2_install/src/some_ros_package目录。

echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "export _colcon_cd_root=/opt/ros/humble/" >> ~/.bashrc
echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bashrc

对于zsh,使用

echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.zshrc
echo "export _colcon_cd_root=/opt/ros/humble/" >> ~/.zshrc
echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.zsh" >> ~/.zshrc

提示

  • 如果你不想构建某个特定的软件包,在这个软件包的目录中建立一个名为COLCON_IGNORE的空文件。
  • 如果您想避免在 CMake 包中配置和构建测试,您可以传递:--cmake-args -DBUILD_TESTING=0。
  • 如果你想从一个包中运行一个特定的测试,使用如下命令:
colcon test --packages-select YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG
相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
ROS入门实践
本课程将基于基础设施即代码 IaC 的理念,介绍阿里云自动化编排服务ROS的概念、功能和使用方式,并通过实际应用场景介绍如何借助ROS实现云资源的自动化部署,使得云上资源部署和运维工作更为高效。
目录
相关文章
|
Ubuntu Linux
在Linux中如何解压 .xz 和 tar.xz 文件?
【4月更文挑战第17天】
14603 6
在Linux中如何解压 .xz 和 tar.xz 文件?
|
机器学习/深度学习 人工智能 搜索推荐
技术革新下的培训新趋势:案例解析
从最初的“试试看”,到如今的“非做不可”,企业培训已经成为央国企和上市公司不可或缺的战略环节。无论是AI与大模型的赋能,DeepSeek,还是具身智能、智算技术和数据科学的实战应用,这些课程都在为企业打开新的可能性。
|
4月前
|
运维 Shell 应用服务中间件
【速查手册】Docker常用命令大全:这20%的命令解决了80%的问题
本文精炼总结 Docker 高频命令,按镜像管理、容器生命周期、排查调试、清理维护四大场景分类,详解常用参数与实战示例,附速查表,助你高效掌握核心操作,提升开发运维效率。
|
5月前
|
机器学习/深度学习 数据可视化 算法
Python | 随机搜索参数优化的XGBoost+SHAP可解释性分析回归预测及可视化算法
本教程将带你掌握Python中XGBoost模型的随机搜索调参、SHAP可解释性分析及多种可视化技术,涵盖特征相关性热图、散点密度图、超参数优化等核心内容,助力科研论文与实际项目应用。
311 2
|
7月前
|
人工智能 算法 机器人
2026:具身智能软件——开发者工具、范式与方向
具身智能的未来之战,本质上将是一场软件范式的竞争。正如早期PC和智能手机的革命最终由操作系统和应用生态所定义,具身智能的泛化能力和落地速度,也取决于其软件开发工具链和范式的革新。本报告将聚焦于加速这一转折的三大核心软件范式,深入剖析其技术内涵、主流工具,并为具身智能开发者构建一份面向2026年的前瞻性技能图谱。
993 4
|
机器人
ROS2教程 05 服务Service
本文是关于ROS2(机器人操作系统2)中服务(Service)机制的教程,介绍了服务与话题(Topic)的区别、ROS2服务的相关命令,包括列出服务、查找服务、获取服务类型和调用服务,并通过示例代码展示了如何创建服务端(Server)和客户端(Client),以及如何测试服务调用过程。
1057 0
ROS2教程 05 服务Service
|
Ubuntu 机器人 虚拟化
Ubuntu22.04配置ROS2 Humble
这篇文章是关于如何在Ubuntu 22.04系统上配置ROS2 Humble的详细教程,包括虚拟机安装、环境配置、网络设置、软件源更换、ROS1和ROS2的安装步骤。
6424 1
|
Shell Linux iOS开发
使用 pipx 安装并执行 Python 应用程序 (1)
使用 pipx 安装并执行 Python 应用程序 (1)
使用 pipx 安装并执行 Python 应用程序 (1)
|
机器人 Shell 开发者
ROS2教程08 ROS2的功能包、依赖管理、工作空间配置与编译
这篇文章是关于ROS2(Robot Operating System 2)中功能包、依赖管理、工作空间配置和编译的教程,涵盖了ROS2工作空间的概念、如何获取和安装功能包的依赖、构建工作空间的步骤,以及如何创建和管理ROS2功能包,包括使用命令行工具对功能包进行操作的方法。
3091 0
ROS2教程08 ROS2的功能包、依赖管理、工作空间配置与编译
|
Docker 容器
docker:记录如何在x86架构上构造和使用arm架构的镜像
为了实现国产化适配,需将原x86平台上的Docker镜像转换为适用于ARM平台的镜像。本文介绍了如何配置Docker buildx环境,包括检查Docker版本、安装buildx插件、启用实验性功能及构建多平台镜像的具体步骤。通过这些操作,可以在x86平台上成功构建并运行ARM64镜像,实现跨平台的应用部署。
11171 3