当前位置: 首页 > news >正文

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_makecatkin_make_isolatedcatkin_toolsament_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 

编译完成后,我们应该能看到buildinstalllog目录:

.
├── build  
├── install  
├── log  
└── src  4 directories, 0 files  

5 Run tests

要运行我们刚刚构建的软件包的测试,请运行以下程序:

colcon test  

6 Source the environment

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

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_cmakeament_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 的方式和工作区的位置,上述说明可能会有所不同,详情请参考文档。要在 LinuxmacOS 中撤销此操作,请找到系统的 shell 启动脚本并删除附加的源代码命令。

Setup colcon tab completion

如果安装了 colcon-argcomplete 软件包,命令 colcon 将支持 bash 和类 bash shell 的命令完成。

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

根据您安装 colcon 的方式和工作区的位置,上述说明可能会有所不同,详情请参考文档。要在 LinuxmacOS 中撤销此操作,请找到系统的 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&#xff1a;使用 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技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着计算机科学的迅猛…...

npm淘宝镜像过期解决办法

npm淘宝镜像过期解决办法 因为npm 官方镜像&#xff08;registry.npmjs.org&#xff09;在国内访问很慢&#xff0c;我们基本上都会选择切换到国内的一些 npm 镜像&#xff08;淘宝镜像、腾讯云镜像等&#xff09;。由于淘宝原来的镜像&#xff08;registry.npm.taobao.org&am…...

Arduino 官网上下载和使用开发板

在 Arduino 官网上下载和使用开发板可以按照以下步骤进行&#xff1a; 打开浏览器&#xff0c;访问 Arduino 官网&#xff08;https://www.arduino.cc/&#xff09;。在官网首页&#xff0c;可以看到各种型号的 Arduino 开发板和相关产品。根据自己的需求选 择合适的开发板型号…...

k8s学习-DaemonSet和Job

1.1DaemonSet是什么 Deployment部署的副本Pod会分布在各个Node上&#xff0c;每个Node都可能运行好几个副本。DaemonSet的不同之处在于&#xff1a;每个Node上最多只能运行⼀个副本。DaemonSet的典型应用场景有&#xff1a; &#xff08;1&#xff09;在集群的每个节点上运⾏存…...

【开源】SpringBoot框架开发海南旅游景点推荐系统

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

Windows10更新失败 错误 0x80070643、KB5034441的解决方法之二

Windows10更新失败 错误 0x80070643、KB5034441 在知乎Windows10更新失败 错误 0x80070643、KB5034441的原因分析和几个解决方法 - 知乎 参考文章进行操作&#xff0c;更详细信息自己看上面链接。 我电脑的硬盘是mbr格式&#xff0c;而且没有划分恢复分区。 Microsoft Windo…...

SQL中LIMIT的简单用法

在SQL的世界里&#xff0c;有一位神秘而强大的限制者&#xff0c;它就是 LIMIT。今天&#xff0c;我们将深入探讨这个神秘的SQL关键字&#xff0c;揭开它的神秘面纱&#xff0c;让你能够更好地使用它来操控你的数据。 背景 首先&#xff0c;让我们了解一下为什么我们需要 LIM…...

canvas自定义扩展方法:文字自动换行

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

【2024全网最详细】Google 搜索命令终极指南

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 你是否尝试过使用 Google 搜索作为免费的 SEO …...

R-kknn包-类别插值可视化绘制

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

探究HMAC算法:消息认证与数据完整性的完美结合

Hash-based Message Authentication Code&#xff08;基于哈希的消息认证码&#xff0c;简称HMAC&#xff09;算法作为一种广泛应用的消息认证码&#xff08;MAC&#xff09;算法&#xff0c;在现代信息安全领域起着至关重要的作用。本文将从算法原理、优缺点、实际应用等方面&…...

10s 内得到一个干净、开箱即用的 Linux 系统

安装 使用官方脚本安装我的服务器不行 官方脚本 mkdir instantbox && cd $_ bash <(curl -sSL https://raw.githubusercontent.com/instantbox/instantbox/master/init.sh) 下面是我的完整安装过程 mkdir /opt/instantbox cd /opt/instantbox 1.脚本文件 (这个没…...

轮转数组[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个整数数组nums&#xff0c;将数组中的元素向右轮转k个位置&#xff0c;其中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行业有哪些证书含金量高?强烈推荐前言区别项目配置&#xff1a;依赖管理&#xff1a;内嵌服务器&#xff1a;开发体验&#xff1a; 实例Spring项目示例&#xff1a;Spring Boot项目示例&#xff1a; 总结强烈推荐专栏集锦写在最后 强烈…...

idea自动生成实体类

第一步&#xff1a;idea连接数据库 出现这个就连接成功 第二步&#xff1a;选择数据库 第三步&#xff1a;创建实体类 也可以点击数据库一下子全部创建 选择创建实体类所放位置 这样就完成了&#xff0c;点击看看对其做相应修改...

uniapp -- picker民族选择器

目录 一、实现思路 二、实现步骤 ①view部分展示 ② JavaScript 内容 ③css中样式展示 三、效果展示...

生信学习笔记1:学习如何用OPLS-DA分析代谢组数据(从入门到掌握)

偏最小二乘法(PLS)和正交偏最小二乘法(OPLS)是统计模型,用于寻找两组数据矩阵之间的关系。它们广泛应用于化学计量学、生物信息学、经济预测等领域。 偏最小二乘法(PLS) 偏最小二乘法是一种多变量分析方法,主要用于找到两组数据(通常是预测变量集和响应变量集)之间…...

CDR2024最新版本怎么下载?Coreldraw相关快捷键教程分享

想必从事平面设计的大咖们都知道&#xff0c;Coreldraw是一款优秀的图形设计软件&#xff0c;被广泛地运用在平面设计、包装设计、服装设计各个生活领域&#xff0c;因此了解一些关于CorelDRAW快捷键的知识是很有必要的。因为使用快捷键不仅使用起来方便快捷&#xff0c;而且提…...

C语言实战项目<贪吃蛇>

我们这篇会使用C语言在Windows环境的控制台中模拟实现经典小游戏贪吃蛇 实现基本的功能&#xff1a; 结果如下: 1.一些Win32 API知识 本次实现呢我们会用到一些Win32 API的知识(WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口): 1)控制窗口大小 我们可以使用…...

BACnet4j实战:从模拟设备到点位数据采集的完整流程解析

1. BACnet4j与工业物联网数据采集入门 第一次接触BACnet协议时&#xff0c;我被各种专业术语搞得晕头转向。直到用BACnet4j成功读取到第一个温度传感器的数据&#xff0c;才真正理解这个协议的价值。BACnet/IP就像工业设备间的普通话&#xff0c;而BACnet4j就是让Java程序能说这…...

告别云端:在百元ESP32-S3上实现离线婴儿哭声识别,隐私与实时性我全都要

边缘智能革命&#xff1a;用ESP32-S3打造零隐私风险的婴儿监护终端 当科技与育儿需求碰撞&#xff0c;我们面临一个核心矛盾&#xff1a;如何在不牺牲隐私的前提下实现智能化监护&#xff1f;传统方案依赖云端处理&#xff0c;却让敏感数据暴露在传输与存储环节。本文将揭示一种…...

如何极速获取金融市场数据:5分钟实战指南

如何极速获取金融市场数据&#xff1a;5分钟实战指南 【免费下载链接】qstock qstock由“Python金融量化”公众号开发&#xff0c;试图打造成个人量化投研分析包&#xff0c;目前包括数据获取&#xff08;data&#xff09;、可视化(plot)、选股(stock)和量化回测&#xff08;策…...

TradingAgents-CN智能交易系统:3种部署方案让你5分钟开启AI投资分析

TradingAgents-CN智能交易系统&#xff1a;3种部署方案让你5分钟开启AI投资分析 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 还在为复杂的金融…...

PFC(5.0)模拟:GBM模型(grain- based model ) pb-sj或pb-...

PFC(5.0)模拟:GBM模型&#xff08;grain- based model &#xff09; pb-sj或pb-pb 单轴压缩。 模拟花岗岩等矿物晶体岩石&#xff0c;多种矿物晶体模型&#xff0c;其中矿物种类 数量分布可以自定义。 可以监测sj裂纹&#xff0c;和各矿物内裂纹。PFC5.0的GBM模型玩岩石破裂是真…...

深耕纪实创作 AVG Media 以专业能力赋能纪录片产业发展

在全球内容产业快速迭代的当下&#xff0c;纪录片凭借真实的叙事力量、深厚的人文价值与多元的传播场景&#xff0c;成为内容领域中兼具艺术价值与商业价值的重要载体。国内纪录片行业历经多年发展&#xff0c;形成了多元主体参与、创作方向细分、国际合作深化的行业格局&#…...

GitHub开源项目分享:SenseVoice-Small模型微调与领域适配工具链

GitHub开源项目分享&#xff1a;SenseVoice-Small模型微调与领域适配工具链 最近在语音识别领域&#xff0c;一个挺有意思的现象是&#xff0c;很多通用模型虽然能力很强&#xff0c;但一遇到专业领域的对话&#xff0c;比如医生讨论病例、律师分析法条&#xff0c;准确率就容…...

OBS Advanced Timer:全场景直播计时神器,让你的直播节奏掌控自如

OBS Advanced Timer&#xff1a;全场景直播计时神器&#xff0c;让你的直播节奏掌控自如 【免费下载链接】obs-advanced-timer 项目地址: https://gitcode.com/gh_mirrors/ob/obs-advanced-timer 作为主播&#xff0c;你是否曾因手动计时失误导致直播环节超时&#xff…...

Z-Image-GGUF模型量化与压缩教程:在低显存GPU上运行大模型

Z-Image-GGUF模型量化与压缩教程&#xff1a;在低显存GPU上运行大模型 想用AI生成图片&#xff0c;但一看模型大小和显存要求就头疼&#xff1f;手头只有一张8GB显存的消费级显卡&#xff0c;是不是就只能和那些功能强大的图像生成模型说再见了&#xff1f; 别急着放弃。今天…...

为什么MedNeXt能超越Transformer?揭秘大卷积核在医学图像分割中的独特优势

MedNeXt如何用大卷积核重塑医学图像分割&#xff1f;技术优势全解析 当你在深夜的医院影像科&#xff0c;看着屏幕上模糊的CT扫描图&#xff0c;试图从那些灰度渐变中分辨出肿瘤边界时&#xff0c;是否会想过AI模型眼中的世界&#xff1f;医学图像分割——这个决定患者治疗方案…...