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.xdnf.cn/news/1473677.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何搜索查找ICLR论文

记录有几个查找顶级会议文章的网址&#xff0c;不止ICLR ICLR 2024 还会有visualization模式&#xff1a; ICLR 2024 virtual 这个网站也很棒 Paper Copilot ICLR 2024 当然还有一个用图表示各论文相关关系的网站&#xff1a; connected papers

入职字节外包2个月后,我离职了...

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…

Python应用开发——30天学习Streamlit Python包进行APP的构建(13)

st.chat_input 显示聊天输入窗口小部件。 Function signature[source]st.chat_input(placeholder="Your message", *, key=None, max_chars=None, disabled=False, on_submit=None, args=None, kwargs=None) Returns(str or None) The current (non-empty) value of…

排序——数据结构与算法 总结8

目录 8.1 排序相关概念 8.2 插入排序 8.2.1 直接插入排序&#xff1a; 8.2.2 折半插入排序&#xff1a; 8.2.3 希尔排序&#xff1a; 8.3 交换排序 8.3.1 冒泡排序&#xff1a; 8.3.2 快速排序&#xff1a; 8.4 选择排序 8.4.1 简单选择排序 8.4.2 堆排序 8.5 归并…

Docker:一、安装与卸载、配置阿里云加速器(Ubuntu)

目录 &#x1f341;安装docker&#x1f332;1、环境准备&#x1f332;2、安装docker Engine&#x1f9ca;1、卸载旧版、任何冲突的包&#x1f9ca;2、使用存储库安装&#x1f9ca;3、安装 Docker 包。&#x1f9ca;4、查询是否安装成功&#x1f9ca;5、运行hello-world镜像&…

24西安电子科技大学马克思主义学院—考研录取情况

01、马克思主义学院各个方向 02、24马克思主义学院近三年复试分数线对比 PS&#xff1a;马院24年院线相对于23年院线增加15分&#xff0c;反映了大家对于马克思主义理论学习与研究的热情高涨&#xff0c;也彰显了学院在人才培养、学科建设及学术研究等方面的不断进步与成就。 6…

算法day02 回文 罗马数字转整数

回文 搞错了String类型的indexOf方法&#xff0c;理解成获取对应下标的值&#xff0c;实际上是在找对应值的下标。 4ms 耗时最少的方法尽量不会去调用jdk提供的方法&#xff0c;而是直接使用对应的数学逻辑关系来处理&#xff0c; 甚至用 代替equals方法。 罗马数字转整数 考…

设计模式探索:策略模式

1. 什么是策略模式&#xff08;Strategy Pattern&#xff09; 定义 策略模式&#xff08;Strategy Pattern&#xff09;的原始定义是&#xff1a;定义一系列算法&#xff0c;将每一个算法封装起来&#xff0c;并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而…

vue3+electron项目搭建,遇到的坑

我主要是写后端,所以对前端的vue啊vue-cli只是知其然,不知其所以然 这样也导致了我在开发前端时候遇到了很多的坑 第一个坑, vue2升级vue3始终升级不成功 第二个坑, vue add electron-builder一直卡进度,进度条走完就是不出提示succes 第一个坑的解决办法: 按照网上说的升级v…

Linux操作系统中逻辑卷的缩减

流程&#xff1a;第一步先是要缩减逻辑卷的文件系统。 第二步就是要去缩减逻辑卷的物理边界。 注意事项&#xff1a; 1.逻辑卷要处于卸载状态&#xff0c; 2.建议先备份数据 3.在缩减逻辑卷的时候&#xff0c;要注意xfs文件系统的逻辑卷是不支持直接进行缩减的。 4.在缩减…

利用级数公式计算圆周率(π)

π是是指圆的周长与直径的比值&#xff0c;是无限不循环小数&#xff0c;有很多种方法可以求得它的近似值。这里用比较容易实现的关于π的无穷级数来求它的前10000位的取值。 π / 2 π 具体的&#xff0c;用两个字符数组x,z分别存放当前计算得到的pi值&#xff0c;数组…

51单片机基础10——串口实验

串口实验 51单片机串口实验1. 软硬件条件2. 串口实验2.1 单片机与PC 发送字符2.1.1 效果2.1.2 代码2.1.3 优化 2.3 串口接收数据(指令控制单片机)2.3.1 非中断方式实现2.3.2 中断方式实现 51单片机串口实验 1. 软硬件条件 单片机型号&#xff1a;STC89C52RC开发环境&#xff…

文件、文本阅读与重定向、路径与理解指令——linux指令学习(一)

前言&#xff1a;本节内容标题虽然为指令&#xff0c;但是并不只是讲指令&#xff0c; 更多的是和指令相关的一些原理性的东西。 如果友友只想要查一查某个指令的用法&#xff0c; 很抱歉&#xff0c; 本节不是那种带有字典性质的文章。但是如果友友是想要来学习的&#xff0c;…

带有网站和 PHP 后端的占星咨询应用程序 | 包括聊天、音频视频通话源码

我们的应用程序基于 Astrotalk、Guruji 等热门业务&#xff0c;这些业务已经在市场上取得成功。 我们的应用程序配备了用 Laravel 开发的功能齐全的后端&#xff0c;Laravel 是一种广泛使用的基于 PHP 的 Web 应用程序框架。 总的来说&#xff0c;我们的新占星术应用程序对于…

Midway Serverless 发布 2

可以看看优化后的开发情况&#xff0c;不仅和应用一样&#xff0c;速度还比较快&#xff0c;也不会生成临时目录&#xff0c;修改实时生效。 这是 v2.0 和 v1.0 的根本性变化&#xff0c;也是整体架构升级带来的巨大优势。 当然&#xff0c;这一块并不是功能的新增&#xff0c…

AcWing 1550:完全二叉搜索树

【题目来源】https://www.acwing.com/problem/content/1552/【题目描述】二叉搜索树 (BST) 递归定义为具有以下属性的二叉树&#xff1a; &#xff08;1&#xff09;若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值 &#xff08;2&#xff09;若它的右…

有趣的算法

目录&#xff1a; 1、百钱买百鸡 2、韩信点兵 1&#xff09;概述 2&#xff09;正常取余算法 3&#xff09;循环算法 1、百钱买百鸡 我国古代《算经》中的“百钱买百鸡”问题&#xff1a; 鸡翁一&#xff0c;值钱五&#xff1b;鸡母一&#xff0c;值钱三&#xff1b;鸡…

《梦醒蝶飞:释放Excel函数与公式的力量》9.2 FV函数

9.2 FV函数 FV函数是Excel中用于计算投资或贷款在若干期后的未来值的函数。它是一个非常实用的财务函数&#xff0c;能够帮助我们快速计算投资的最终价值或贷款的期末余额。 9.2.1 函数简介 FV函数用于计算基于定期固定支付和固定利率的投资或贷款的未来值。未来值是指在一定…

【电商纯干货分享】干货速看!电商数据集数据API接口数据分析大全!

数据分析——深入探索中小企业数字化转型&#xff0c;专注提供各行业数据分析干货、分析技巧、工具推荐以及各类超实用分析模板&#xff0c;为钻研于数据分析的朋友们加油充电。 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09…

初学嵌入式是弄linux还是单片机?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;1、先入门了51先学了89c52…