Using colcon to build packages:使用colcon来构建软件包
创始人
2025-05-30 09:21:34
0

文章目录

  • Colcon简介
  • 安装Colcon
  • 基本概念
  • 创建一个工作空间
  • 添加一些源文件
  • Source底层
  • 构建工作空间
  • 运行测试
  • Source环境
  • 尝试演示
  • 创建自己的软件包(package)
  • 设置colcon_cd和tab补全
  • 提示

参考官方文档: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中找到。

安装Colcon

sudo apt install python3-colcon-common-extensions

基本概念

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

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

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

与catkin相比,没有devel目录。

创建一个工作空间

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

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

.
└── src1 directory, 0 files

添加一些源文件

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

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

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

.
└── src└── examples├── CONTRIBUTING.md├── LICENSE├── rclcpp├── rclpy└── README.md4 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
└── src4 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

相关内容

热门资讯

Notion汉化 市面上笔记软件五花八门,都各有特色。wolai、语雀、飞书、印象笔记、石墨、幕布、为知...
最新或2023(历届)5月20... 我们用全部的爱关爱家人,我们期待孩子健康快乐的长大,我们竭尽所有把最好的给孩子!每一个小天使的降临,...
最新或2023(历届).5.9... 亲爱的家人朋友们:欢迎您来到美丽的杭州,参加最新或2023(历届)5月9日—5月11日(周二至周四)...
孩子写作业总是拖拖拉拉?家庭教... 成就孩子美好人生!上城区学生成长支持中心第三讲“督促孩子完成作业的窍门 ”,欢迎家长朋友通过微信报名...
反腐正剧《人民的名义》,是一部... 《人民的名义》自最新或2023(历届)3月28日开播以来,已接近一个月,热度不减,而据CSM52城市...
Spring Boot 自定义... 概述 因为最近一直在为公司搭建底层框架, 好久没有更新博客了,本次搭建的框架结构...
想提升宝宝情商,家庭教育很关键... 爸爸妈妈们,你们是否有过对于如何培养宝宝情商的问题的犯难?可能我们可以给宝宝上最好的学校,或者根据宝...
Redis(九):并发问题 前言 上一篇介绍了 Redis 的内存管理。这节开始介绍 Redis 并发方面的问题。 Redis ...
python多线程 文章目录一、简介1.1 多线程的特性1.2 GIL二、线程1.2 单线程1.3 多线程三、线程池3....
綦江区成为家校共育区域性研究实... 4月26日—27日,中国教育学会“十三五”教育科研重点课题“基础教育阶段家校共育的理论与实践研究”现...
曲阜《教子有方》&lt... 一个孩子的教育成功,是全家人的成功!一个孩子的教育失败,是全家人的失败!——————赵国彦任何事业的...
《家庭教育》杂志创刊三十年贺词... 中国家庭教育学会副会长、北京师范大学教授赵忠心(杭州《家庭教育》杂志最新或2023(历届)第一二期)...
美国男人为什么不包二奶? 外国... 1、信仰美国的社会,大部分人们对宗教很虔诚。而对于教徒对婚姻、家庭的忠诚,宗教有很明确的要求,有些宗...
DirectX12(D3D12... 目录1、前言1.1、一些感慨1.2、运行效果展示1.3、示例简介1.4、示例操作说明1.5、本章内容...
《扬帆优配》机构关注目标锁定,... 证券时报·数据宝统计,3月13日至17日,A股市场58家组织算计进行66...
家庭教育三个关键词——陪伴、阅... 通过什么方式来重视家庭教育?家庭教育中父母也需要通过阅读来成长读什么比阅读更重要。现在每年中国出版量...
最新或2023(历届)朔州市小... 朔州市凡年满6周岁(8月31日以前满6岁,年龄截止日期以当年8月31日为准,2009年8月31日前出...
最新或2023(历届)晋城市小... 016年晋城高平市小学一年级新生招生报名工作即将启动,晋城高平市的很多家长关心最新或2023(历届)...
最运动 最博物 最辽阔 最人文... 终于,我们的第一个夏令营来了。这三年来,总有朋友在追问,博雅有没有夏令营,我们想送孩子来。我们也越来...
哈佛专家:最毁孩子的9个家庭教... 哈佛大学心理学硕士张璐将做客“青榄公开课”,为广大家长和孩子免费讲授一堂公开课《读懂孩子的小秘密》。...