ROS2 学习笔记12:使用 colcon 构建软件包
ROS2 学习笔记12:使用 colcon 构建软件包
- Background 背景
- Prerequisites 前提
- 1 Install colcon
- 2 Install ROS 2
- Basics 基础
- 1 Create a workspace
- 2 Add some sources
- 3 Source an underlay
- 4 Build the workspace
- 5 Run tests
- 6 Source the environment
- 7 Try a demo
- Create your own package
- Setup `colcon_cd`
- Setup colcon tab completion
- Tips
Background 背景
colcon
是对ROS
构建工具 catkin_make
、catkin_make_isolated
、catkin_tools
和 ament_tools
的迭代。有关 colcon
设计的更多信息,请参阅本文档https://design.ros2.org/articles/build_tool.html
。
colcon
源代码可在GitHub
中找到 https://github.com/colcon
思考及疑问: 组合工作空间,可以同时运行不同发行版本的ROS吗,还是可只能切换?
Prerequisites 前提
1 Install colcon
sudo apt install python3-colcon-common-extensions
查看 colcon-core
版本:colcon version-check
查看 colcon-core
是否是最新的
2 Install ROS 2
备注: 可在终端通过 sudo apt install ros-<distro>-<package>
直接安装; 默认路径:opt/ros/<distro>
Basics 基础
ROS
工作区是一个具有特定结构的目录。通常会有一个 src
子目录。在该子目录中,存放着 ROS
软件包的源代码。通常情况下,该目录一开始是空的。
colcon
会进行源代码外编译。默认情况下,它将创建以下目录作为 src
目录的同级目录:
-
build
目录将存放中间文件。每个软件包都将创建一个子文件夹,例如CMake
将在其中调用。 -
install
目录是每个软件包的安装目录。默认情况下,每个软件包都将安装到一个单独的子目录中。 -
log
目录包含有关每次调用 colcon 的各种日志信息。
注:与
catkin
相比,没有devel
目录。
1 Create a workspace
首先,创建一个包含的工作区目录 (ros2_ws
)
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
此时,工作区只包含一个空目录 src
:
.
└── src 1 directory, 0 files
2 Add some sources
让我们将示例库克隆到工作区的 src
目录中:
git clone https://github.com/ros2/examples src/examples -b iron
现在,工作区中应该有 ROS 2 示例的源代码:
.
└── src └── examples ├── CONTRIBUTING.md ├── LICENSE ├── rclcpp ├── rclpy └── README.md 4 directories, 3 files
3 Source an underlay
重要的是,我们要为现有的 ROS 2
安装提供环境,以便为我们的工作区提供示例软件包所需的构建依赖项。这可以通过二进制安装或源安装(即另一个 colcon
工作区)提供的设置脚本来实现(请参阅 “安装”)。我们称这种环境为 “底层”。
我们的工作区 ros2_ws
将是现有 ROS 2
安装的顶层。一般来说,当你计划迭代少量软件包时,建议使用顶层,而不是把所有软件包都放到同一个工作区。
4 Build the workspace
在工作区的根目录下运行 colcon build
。由于 ament_cmake
等联编类型不支持开发空间的概念,需要安装软件包,因此 colcon
支持选项 --symlink-install
。这允许通过更改源代码空间中的文件(如 Python
文件或其他非编译资源)来更改已安装的文件,从而加快迭代速度。
colcon build --symlink-install
编译完成后,我们应该能看到build
、install
和log
目录:
.
├── build
├── install
├── log
└── src 4 directories, 0 files
5 Run tests
要运行我们刚刚构建的软件包的测试,请运行以下程序:
colcon test
6 Source the environment
当 colcon
成功完成构建后,输出结果将出现在安装目录中。在使用任何已安装的可执行文件或库之前,您需要将它们添加到路径和库路径中。colcon
会在安装目录中生成 bash/bat
文件,以帮助设置环境。这些文件会将所有必要元素添加到路径和库路径中,并提供软件包导出的任何 bash
或 shell
命令。
source install/setup.bash
7 Try a demo
有了源环境,我们就可以运行由 colcon
构建的可执行文件。让我们运行示例中的一个用户节点:
ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
在另一个终端,让我们运行一个发布节点(别忘了源设置脚本):
ros2 run examples_rclcpp_minimal_publisher publisher_member_function
您应该会看到来自发布者和订阅者的信息,数字会递增。
Create your own package
colcon
使用 REP 149
中定义的 package.xml
规范(也支持格式 2)。
colcon
支持多种构建类型。推荐的构建类型是 ament_cmake
和 ament_python
。此外还支持纯 cmake
软件包。
ament_python
构建的一个例子是 ament_index_python
软件包,其中 setup.py
是构建的主要入口。
demo_nodes_cpp
等软件包使用 ament_cmake
构建类型,并使用CMake
作为构建工具。
为方便起见,你可以使用 ros2 pkg create
工具根据模板创建新软件包。
注:对于
catkin
用户,这相当于catkin_create_package
。
Setup colcon_cd
使用 colcon_cd
命令可以快速将 shell
的当前工作目录更改为软件包的目录。例如,colcon_cd some_ros_package
可以快速将你带到 ~/ros2_ws/src/some_ros_package
目录。
echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "export _colcon_cd_root=/opt/ros/iron/" >> ~/.bashrc
根据您安装 colcon_cd
的方式和工作区的位置,上述说明可能会有所不同,详情请参考文档。要在 Linux
和 macOS
中撤销此操作,请找到系统的 shell
启动脚本并删除附加的源代码命令。
Setup colcon tab completion
如果安装了 colcon-argcomplete
软件包,命令 colcon
将支持 bash
和类 bash shell
的命令完成。
echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bashrc
根据您安装 colcon
的方式和工作区的位置,上述说明可能会有所不同,详情请参考文档。要在 Linux
和 macOS
中撤销此操作,请找到系统的 shell
启动脚本并删除附加的源代码命令。
Tips
-
如果不想构建特定软件包,请在目录中放置一个名为
COLCON_IGNORE
的空文件,这样它就不会被索引。 -
如果不想在
CMake
软件包中配置和编译测试,可以通过--cmake-args -DBUILD_TESTING=0
。 -
如果您想从软件包中运行一个特定的测试:
colcon test --packages-select YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG
相关文章:
ROS2 学习笔记12:使用 colcon 构建软件包
ROS2 学习笔记12:使用 colcon 构建软件包 Background 背景Prerequisites 前提1 Install colcon2 Install ROS 2 Basics 基础1 Create a workspace2 Add some sources3 Source an underlay4 Build the workspace5 Run tests6 Source the environment7 Try a demo Cre…...

基于JAVA+SpringBoot+Vue的前后端分离的医院管理系统
✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着计算机科学的迅猛…...

npm淘宝镜像过期解决办法
npm淘宝镜像过期解决办法 因为npm 官方镜像(registry.npmjs.org)在国内访问很慢,我们基本上都会选择切换到国内的一些 npm 镜像(淘宝镜像、腾讯云镜像等)。由于淘宝原来的镜像(registry.npm.taobao.org&am…...
Arduino 官网上下载和使用开发板
在 Arduino 官网上下载和使用开发板可以按照以下步骤进行: 打开浏览器,访问 Arduino 官网(https://www.arduino.cc/)。在官网首页,可以看到各种型号的 Arduino 开发板和相关产品。根据自己的需求选 择合适的开发板型号…...
k8s学习-DaemonSet和Job
1.1DaemonSet是什么 Deployment部署的副本Pod会分布在各个Node上,每个Node都可能运行好几个副本。DaemonSet的不同之处在于:每个Node上最多只能运行⼀个副本。DaemonSet的典型应用场景有: (1)在集群的每个节点上运⾏存…...

【开源】SpringBoot框架开发海南旅游景点推荐系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统ÿ…...

Windows10更新失败 错误 0x80070643、KB5034441的解决方法之二
Windows10更新失败 错误 0x80070643、KB5034441 在知乎Windows10更新失败 错误 0x80070643、KB5034441的原因分析和几个解决方法 - 知乎 参考文章进行操作,更详细信息自己看上面链接。 我电脑的硬盘是mbr格式,而且没有划分恢复分区。 Microsoft Windo…...
SQL中LIMIT的简单用法
在SQL的世界里,有一位神秘而强大的限制者,它就是 LIMIT。今天,我们将深入探讨这个神秘的SQL关键字,揭开它的神秘面纱,让你能够更好地使用它来操控你的数据。 背景 首先,让我们了解一下为什么我们需要 LIM…...

canvas自定义扩展方法:文字自动换行
查看专栏目录 canvas实例应用100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…...

【2024全网最详细】Google 搜索命令终极指南
💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 你是否尝试过使用 Google 搜索作为免费的 SEO …...

R-kknn包-类别插值可视化绘制
前面的推文我们介绍了使用scikit-learn结合分类散点数据,构建机器学习分类模型并将模型结果可视化展示,具体链接如下: 机器学习和可视化还能一起这样用?Python教你全搞定。今天这篇推文,我们就使用R语言的kknn包进行类…...

探究HMAC算法:消息认证与数据完整性的完美结合
Hash-based Message Authentication Code(基于哈希的消息认证码,简称HMAC)算法作为一种广泛应用的消息认证码(MAC)算法,在现代信息安全领域起着至关重要的作用。本文将从算法原理、优缺点、实际应用等方面&…...

10s 内得到一个干净、开箱即用的 Linux 系统
安装 使用官方脚本安装我的服务器不行 官方脚本 mkdir instantbox && cd $_ bash <(curl -sSL https://raw.githubusercontent.com/instantbox/instantbox/master/init.sh) 下面是我的完整安装过程 mkdir /opt/instantbox cd /opt/instantbox 1.脚本文件 (这个没…...

轮转数组[中等]
优质博文:IT-BLOG-CN 一、题目 给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,…...

【SpringBoot系列】自动装配的魅力:Spring Boot vs 传统Spring
IT行业有哪些证书含金量高? 文章目录 IT行业有哪些证书含金量高?强烈推荐前言区别项目配置:依赖管理:内嵌服务器:开发体验: 实例Spring项目示例:Spring Boot项目示例: 总结强烈推荐专栏集锦写在最后 强烈…...

idea自动生成实体类
第一步:idea连接数据库 出现这个就连接成功 第二步:选择数据库 第三步:创建实体类 也可以点击数据库一下子全部创建 选择创建实体类所放位置 这样就完成了,点击看看对其做相应修改...
uniapp -- picker民族选择器
目录 一、实现思路 二、实现步骤 ①view部分展示 ② JavaScript 内容 ③css中样式展示 三、效果展示...
生信学习笔记1:学习如何用OPLS-DA分析代谢组数据(从入门到掌握)
偏最小二乘法(PLS)和正交偏最小二乘法(OPLS)是统计模型,用于寻找两组数据矩阵之间的关系。它们广泛应用于化学计量学、生物信息学、经济预测等领域。 偏最小二乘法(PLS) 偏最小二乘法是一种多变量分析方法,主要用于找到两组数据(通常是预测变量集和响应变量集)之间…...

CDR2024最新版本怎么下载?Coreldraw相关快捷键教程分享
想必从事平面设计的大咖们都知道,Coreldraw是一款优秀的图形设计软件,被广泛地运用在平面设计、包装设计、服装设计各个生活领域,因此了解一些关于CorelDRAW快捷键的知识是很有必要的。因为使用快捷键不仅使用起来方便快捷,而且提…...

C语言实战项目<贪吃蛇>
我们这篇会使用C语言在Windows环境的控制台中模拟实现经典小游戏贪吃蛇 实现基本的功能: 结果如下: 1.一些Win32 API知识 本次实现呢我们会用到一些Win32 API的知识(WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口): 1)控制窗口大小 我们可以使用…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...