ROS 2官方文档(基于humble版本)学习笔记(四)

ROS 2官方文档(基于humble版本)学习笔记(四)

    • 2.客户端库
      • 使用colcon构建包(package)
        • 创建工作空间(workspace)
        • 构建工作空间
        • 执行测试(tests)
        • 导入环境(source the environment)
        • 试一下演示程序
        • 创建自己的包(package)
        • 设置colcon_cd
        • 小贴士
      • 创建一个工作空间(workspace)
        • 设置叠加层(overlay)
        • 修改覆盖层
      • 创建软件包
        • 什么是ROS2软件包(package)
        • 一个ROS 2软件包包含什么
        • 工作空间中的软件包

不好意思,停更了好久,官方文档是看了,只是没有时间整理,最近在外地出差,周末都在瞎忙,今天刚好有时间把接下来的部分总结一下,下面才是使用ROS库进行开发的开始。

2.客户端库

使用colcon构建包(package)

该章介绍如何使用colcon创建和构建一个ROS 2的工作空间(workspace)。colcon是 ROS构建工具catkin_make, catkin_make_isolated, catkin_tools and ament_tools的迭代.
使用如下命令安装colcon。

sudo apt install python3-colcon-common-extensions

一个ROS 工作空间有其特殊的目录结构。通常在工作空间中有一个空的src目录,这个目录下存放的是ROS包的源代码。colcon会在src同级的目录下创建build、install、log三个目录(比catkin构建的目录缺少了devel)。顾名思义,build目录是存放构建过程中产生的中间文件的,其中会为每一个包创建一个独立的目录。install目录存放的是每个包的安装文件,同样的每个包一个独立的目录。log目录中存放的是colcon构建时产生的日志文件。

创建工作空间(workspace)
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws

可以将example仓库的源码放到src目录下

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

就像我们在学习笔记(一)中安装完ROS 2之后写到.bashrc中的那句

source /opt/ros/humble/setup.bash

通过这句命令我们创建了ROS 2的底层环境,这个底层环境将为我们的工作空间提供必要的构建依赖。我们的工作空间ros2_ws将成为ROS 2环境之上的覆盖层环境。当你打算迭代少量软件包时,建议使用一个覆盖层,通常,建议当您打算迭代少量软件包时使用覆盖层,而不是将所有软件包放入相同的工作区中。

构建工作空间

在工作空间的根目录(ros2_ws)执行colcon build命令,同时还可以使用如下参数。

--packages-up-to'构建所需的包及其所有依赖项,而不是整个工作空间(节省时间)
--symlink-install 在您调整Python脚本时,无需每次重新构建
--event-handlers console_direct+ 在构建时显示控制台输出(否则可在log目录中找到)
--executor sequential 一个包一个包的处理而不是并行处理。

构建完成就会看到工作空间目录下有src,build,install,log四个目录。

执行测试(tests)

通过如下命令执行我们刚刚构建的包中的测试。

colcon test
导入环境(source the environment)

当colcon构建成功后,输出都放在install目录下,在你使用安装好的可执行程序和库之前,需要把他们加到你的path和库path中。幸运的是colcon会在install目录下产生bash/bat文件,来帮助你建立环境。这些文件将会把所有需要的元素添加到你的path和库path中,同时提供包导出的任何bash或者shell命令。

source install/setup.bash
试一下演示程序

通过执行如下命令分别启动订阅者和发布者演示程序:

ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
ros2 run examples_rclcpp_minimal_publisher publisher_member_function
创建自己的包(package)

colcon使用的包文件是package.xml,遵循REP149定义的规范。
colcon支持多种构建类型。建议的构建类型是ament_cmakeament_python,也支持纯cmake包。
方便起见,我们可以使用ros pkg create工具基于模板创建一个新包。

设置colcon_cd

这个命令可以快速的从当前目录切换到包目录,例如执行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/humble/" >> ~/.bashrc
小贴士

如果您不想构建特定的软件包,将一个名为colcon_ignore的空文件放在目录中,则不会索引。
如果要避免在CMAKE软件包中配置和建造测试(tests),则可以通过:-CMAKE -ARGS -DBUILD_TESTING = 0。
如果你想要从一个包单独运行一个特定的测试程序,可以执行下面的命令:

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

创建一个工作空间(workspace)

#导入环境
source /opt/ros/humble/setup.bash
#创建工作空间目录
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
#clone一份示例代码
git clone https://github.com/ros/ros_tutorials.git -b humble
#解决依赖,每次clone一份代码之后,检查一下依赖,这是一个好习惯
# cd if you're still in the ``src`` directory with the ``ros_tutorials`` clone
cd ..
rosdep install -i --from-path src --rosdistro humble -y
#如果您已经具备了所有的依赖项,控制台会返回:
#All required rosdeps installed successfully
colcon build

执行结果如下图:
rosdep
colcon build

设置叠加层(overlay)

在设置叠加层之前,非常重要的一点是要打开一个新的终端,与构建工作空间的终端分开。在同一个终端中设置叠加层或在设置叠加层的终端中进行构建可能会导致复杂的问题。

在新的终端中,将你的主要ROS 2环境作为“underlay”来源化,这样你就可以在其“之上”构建叠加层(overlay):

source /opt/ros/humble/setup.bash

进入你的工作空间的根目录:

cd ~/ros2_ws

在根目录中,将你的叠加层源化:

source install/local_setup.bash

local_setup的叠加层源化,只是把叠加层可用的软件包添加到您的环境中。setup源同时包含覆盖层和创建它的底层,使您能够同时利用两个工作区。

修改覆盖层

你可以在覆盖层中单独修改和重建软件包,而不影响底层。
覆盖层优先于底层。

建议在处理少量包时使用覆盖层,这样您就不必将所有内容放在同一个工作空间中,并且不必在每次迭代中重新构建一个庞大的工作空间。
在这里插入图片描述

创建软件包

什么是ROS2软件包(package)

软件包(package)是ROS 2代码的组织单元。如果您希望能够安装代码或与他人共享代码,那么您需要将其组织成一个包。通过包,您可以发布ROS 2工作并允许其他人轻松构建和使用它。

ROS 2中的包创建使用ament作为构建系统和colcon作为构建工具。您可以使用CMake或Python创建一个包,这两种方式得到官方支持,尽管还存在其他构建类型。

一个ROS 2软件包包含什么

CMake

  • CMakeLists.txt文件,描述了如何构建软件包内的代码
  • 包含该包的公共头文件的 include/<package_name> 目录
  • 包含有关该包的元信息的 package.xml 文件
  • 包含该包源代码的 src 目录

Python

  • 包含有关该包的元信息的package.xml 文件
  • 用于标记该包的resource/<package_name> 文件
  • 当一个软件包包含可执行文件时,需要使用setup.cfg,以便ros2 run能够找到它们
  • setup.py包含了安装该软件包的指令
  • <package_name> 是与软件包同名的目录,被ROS 2工具用于查找软件包,包含__init__.py
工作空间中的软件包

一个工作空间可以包含任意多个软件包,每个软件包位于自己的文件夹中。您还可以在一个工作空间中拥有不同构建类型的软件包(如CMake、Python等)。但不能嵌套软件包。

最佳实践是在工作空间中创建一个src文件夹,并在其中创建您的软件包。这样可以保持工作空间的顶层“清洁”。
在ROS 2中创建新包的命令语法如下:

CMake:
ros2 pkg create --build-type ament_python <package_name>
Python:
ros2 pkg create --build-type ament_python <package_name>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十四届蓝桥杯省赛C++B组G题【子串简写】题解(AC)

题目大意 给定字符串 s s s&#xff0c;字符 a , b a, b a,b&#xff0c;问字符串 s s s 中有多少个 a a a 开头 b b b 结尾的子串。 解题思路 20pts 使用二重循环枚举左端点和右端点&#xff0c;判断是否为 a a a 开头 b b b 结尾的字符串&#xff0c;是则答案加一…

Stable Diffusion:最全详细图解

Stable Diffusion&#xff0c;作为一种革命性的图像生成模型&#xff0c;自发布以来便因其卓越的生成质量和高效的计算性能而受到广泛关注。不同于以往的生成模型&#xff0c;Stable Diffusion在生成图像的过程中&#xff0c;采用了独特的扩散过程&#xff0c;结合深度学习技术…

2024亚太杯数学建模竞赛(B题)的全面解析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024亚太杯数学建模竞赛&#xff08;B题&#xff09;的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有详尽的建模过程和解…

【C++:类的基础认识和this指针】

C的类与C语言的struct结构体有啥区别&#xff1f; 默认的访问限定符不同 类的简要 关键字&#xff1a;class{}里面是类的主体&#xff0c;特别注意&#xff1a;{}后面的&#xff1b;不可以省略类中的变量叫做成员变量&#xff0c;类中的函数叫做成员函数类中访问有三种访问权限…

单/多线程--协程--异步爬虫

免责声明:本文仅做技术交流与学习... 目录 了解进程和线程 单个线程(主线程)在执行 多线程 线程池 协程(爬虫多用) 假异步:(同步) 真异步: 爬虫代码模版 异步-爬虫 同步效果--19秒 异步效果--7秒 了解进程和线程 ​ # --------------------> # ------> # …

MinIO:开源对象存储解决方案的领先者

MinIO:开源对象存储解决方案的领先者 MinIO 是一款开源的对象存储系统&#xff0c;致力于提供高性能、可伸缩、安全的数据存储解决方案。 官方解释&#xff1a;MinIO 是一个基于Apache License v2。0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适…

WAIC:生成式 AI 时代的到来,高通创新未来!

目录 01 在终端侧算力上&#xff0c;动作最快的就是高通 02 模型优化&#xff0c;完成最后一块拼图 在WAIC上&#xff0c;高通展示的生成式AI创新让我们看到了未来的曙光。 生成式 AI 的爆发带来了意想不到的产业格局变化&#xff0c;其速度之快令人惊叹。 仅在一个月前&…

Vue + SpringBoot:el-upload组件单文件、多文件上传实战解析

文章目录 单文件上传后端前端 多文件上传后端前端 单文件上传 后端 PostMapping("/uploadDxfFile") public R uploadDxfFile(RequestParam(value "file", required true) MultipartFile multipartFile) throws Exception {// 文件校验工作if (multipar…

web Worker学习笔记 | 浏览器切换标签,定时器失效的解决办法

文章目录 web Workerweb Worker介绍 - 多线程解决方案浏览器多进程架构 web workers 的使用关闭worker引用其他js文件 浏览器切换标签&#xff0c;定时器失效的解决办法窗口可见性 API解决定时器失效的方案 web Worker web Worker介绍 - 多线程解决方案 Web Workers 是Html5提…

服务器数据恢复—DS5300存储raid5阵列数据恢复案例

服务器存储数据恢复环境&#xff1a; 某单位一台某品牌DS5300存储&#xff0c;1个机头4个扩展柜&#xff0c;50块硬盘组建2组RAID5磁盘阵列&#xff08;一组raid5阵列有27块成员盘&#xff0c;存放Oracle数据库文件&#xff1b;另外一组raid5阵列有23块成员盘&#xff09;。存储…

HashMap中的put()方法

一. HashMap底层结构 HashMap底层是由哈希表(数组),链表,红黑树构成,哈希表存储的类型是一个节点类型,哈希表默认长度为16,它不会每个位置都用,当哈希表中的元素个数大于等于负载因子(0.75)*哈希表长度就会扩容到原来的2倍 二. 底层的一些常量 三. HashMap的put()方法 当插入一…

ONLYOFFICE最新8.1版本——桌面编辑器简单测评

前言 大家好&#xff0c;我是小雨&#xff0c;看到最近ONLYOFFICE更新了最新的版本&#xff0c;更新了一下当前版本来具体的测评一下&#xff0c;先来看看官网提供的各类更新信息&#xff0c;下面是我找到的三个主页&#xff0c;包括功能演示链接&#xff0c;官网连接以及专门…

阿里云存储

传统存储面临的挑战 现如今&#xff0c;数据与土地、劳动力、资本、技术并称为五大生产要素&#xff0c;数据成为数字经济发展的重要引擎。大数据时代&#xff0c;数据处理的需求急剧增长&#xff0c;越来越多的智能设备以及新应用如区块链、机器学习训练和AI等产生大量的数据…

复分析——第10章——Θ函数应用(E.M. Stein R. Shakarchi)

第10章 Θ函数的应用 (Applications of Theta Functions) The problem of the representation of an integer n as the sum of a given number k of integral squares is one of the most celebrated in the theory of numbers. Its history may be traced back to Diopha…

CV03_mAP计算以及COCO评价标准

COCO数据集回顾&#xff1a;CV02_超强数据集&#xff1a;MSCOCO数据集的简单介绍-CSDN博客 1.1 简介 在目标检测领域中&#xff0c;mAP&#xff08;mean Average Precision&#xff0c;平均精度均值&#xff09;是一个广泛使用的性能评估指标&#xff0c;用于衡量目标检测模型…

短信验证码实现

一、设置AccessKey 创建用户并配置使用权限&#xff0c;使我们拥有调用 aliyunAPI 的权限&#xff0c;之后会生成 AccessKeyID 和 AccessKey密码&#xff0c;后面我们会使用到。需要注意的是 AccessKeyID 和 AccessKey密码生成后我们需要将他保存起来&#xff0c;否则后期无法查…

奇迹MU 骷髅战士在哪

BOSS分布图介绍 我为大家带来各地区怪物分布图。在游戏前期&#xff0c;很多玩家可能会不知道该去哪里寻找怪物&#xff0c;也不知道哪些怪物值得打。如果选择了太强的怪物&#xff0c;弱小的玩家可能会无法抵御攻击。如果选择了低等级的boss&#xff0c;收益可能并不理想。所…

智能家居安防系统教学解决方案

前言 随着科技的不断进步和智能家居概念的深入人心&#xff0c;智能家居安防系统作为智能家居领域的重要组成部分&#xff0c;其重要性日益凸显。智能家居安防系统不仅能够提供环境和人员的监测功能&#xff0c;还能够采取措施降低或避免人员伤亡及财产损失。因此&#xff0c;…

word文档没有保存就关闭了怎么恢复?找到正确的方法

昨天写教程的时候&#xff0c;终于完成了一个word文档&#xff0c;以为保存了就直接关了。word提醒我“是否保存”&#xff0c;我直接忽略了。动作一气呵成&#xff0c;毫不犹豫的关闭了。之后才发现我没有保存word文档。这种情况大家有遇到过吗?我们该如何在没有保存的情况下…

迎接AI新时代:GPT-5即将登场的巨大变革与应用前瞻

迎接AI新时代&#xff1a;GPT-5即将登场的巨大变革与应用前瞻 &#x1f48e;1. GPT-5 一年半后发布&#xff1a;AI新时代的来临1.1 GPT-5的飞跃&#xff1a;从高中生到博士生 &#x1f48e;2. GPT-5的潜在应用场景&#x1f48e;2.1 医疗诊断和健康管理&#x1f48e;2.2 教育领域…