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

news2024/10/5 14:53:53

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.coloradmin.cn/o/1901349.html

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

相关文章

Java项目:基于SSM框架实现的会员积分管理系统分前后台【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的会员积分管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能…

springcloud-alibba之FeignClient

代码地址&#xff1a;springcloud系列: springcloud 组件分析拆解 1.FeignClient的集成 springboot版本&#xff1a;3.1.5 springcloud组件版本&#xff1a;2022.0.4 nacos客户端的版本&#xff1a;2.3.2 1.引pom 这里引入了nacos和feginclient的版本 <dependency>…

moonlight+sunshine+ParsecVDisplay ipad8-windows 局域网串流

1.sunshine PC 安装 2.设置任意账户密码登录 3.setting 里 network启用UPNP IPV4IPV6 save apply 4.ParsecVDisplay虚拟显示器安装 5.ipad appstore download moonlight 6.以ipad 8 为例 2160*1620屏幕分辨率 7.ParsecVDisplay里面 custom设置2160*1620 240hz&#xff0c;…

org.springframework.jdbc.BadSqlGrammarException异常

Bug 记录 概述 在执行定时任务更新电子书统计信息时&#xff0c;遇到了 org.springframework.jdbc.BadSqlGrammarException 异常&#xff0c;具体表现为 SQL 函数 count 被错误地解析为自定义函数 wiki.count&#xff0c;导致数据库更新操作失败。 详细描述 错误信息&#x…

本地部署到服务器上的资源路径问题

本地部署到服务器上的资源路径问题 服务器端的源代码的静态资源目录层级 当使用Thymeleaf时&#xff0c;在templates的目录下为返回的html页面&#xff0c;下面以两个例子解释当将代码部署到tomcat时访问资源的路径配置问题 例子一 index.html&#xff08;在templates的根目录…

【算法专题】双指针算法

1. 移动零 题目分析 对于这类数组分块的问题&#xff0c;我们应该首先想到用双指针的思路来进行处理&#xff0c;因为数组可以通过下标进行访问&#xff0c;所以说我们不用真的定义指针&#xff0c;用下标即可。比如本题就要求将数组划分为零区域和非零区域&#xff0c;我们不…

JavaScript-websocket的基本使用

JavaScript-websocket的基本使用 文章说明JavaScript端后台--服务端连接演示 文章说明 本文主要介绍JavaScript中websocket的基本使用&#xff0c;后台采用Java编写WebSocket服务端 JavaScript端 websocket工具类 class Socket {constructor(url, onopen, onmessage, onerror, …

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

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

第十四届蓝桥杯省赛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;是则答案加一…

代码随想录——划分字母区间(Leetcode763)

题目链接 贪心 class Solution {public List<Integer> partitionLabels(String s) {int[] count new int[27];Arrays.fill(count,0);// 统计元素最后一次出现的位置for(int i 0; i < s.length(); i){count[s.charAt(i) - a] i;}List<Integer> res new Ar…

rk3588 Android HDMI IN热插拔解决

一、前言 1、公司在使用 别的厂商的板卡遇到一个问题&#xff0c;开机我们的app自启就会闪退&#xff0c;后来定位发现是camera 的open出错了&#xff0c;这个问题的出现是因为没有插HDMI IN输入的问题导致的,所以需要对HDMI IN的热插拔进行检测&#xff0c;后面我把这个问题也…

【文献解析】一种像素级的激光雷达相机配准方法

大家好呀&#xff0c;我是一个SLAM方向的在读博士&#xff0c;深知SLAM学习过程一路走来的坎坷&#xff0c;也十分感谢各位大佬的优质文章和源码。随着知识的越来越多&#xff0c;越来越细&#xff0c;我准备整理一个自己的激光SLAM学习笔记专栏&#xff0c;从0带大家快速上手激…

leetcode-每日一题

3101. 交替子数组计数https://leetcode.cn/problems/count-alternating-subarrays/ 给你一个 二进制数组 nums 。 如果一个 子数组 中 不存在 两个 相邻 元素的值 相同 的情况&#xff0c;我们称这样的子数组为 交替子数组 。 返回数组 nums 中交替子数组的数量。 示例 …

Linux|信号

Linux|信号 信号的概念信号处理的三种方式捕捉信号的System Call -- signal 1.产生信号的5种方式2.信号的保存2.1 core 标志位 2.信号的保存2.1 对pending 表 和 block 表操作2.2 阻塞SIGINT信号 并打印pending表例子 捕捉信号sigaction 函数验证当前正在处理某信号&#xff0c…

win11自动删除文件的问题,安全中心提示

win11自动删除文件的问题&#xff0c;解决方法&#xff1a; 1.点击任务栏上的开始图标&#xff0c;在显示的应用中&#xff0c;点击打开设置。 或者点击电脑右下角的开始也可以 2.点击设置。也可以按Wini打开设置窗口。 3.左侧点击隐私和安全性&#xff0c;右侧点击Windows安全…

学习笔记——动态路由——IS-IS中间系统到中间系统(区域划分)

三、IS-IS区域划分 根据IS-IS路由器邻居关系&#xff0c;可以将IS-IS划分为两个区域——骨干区域和非骨干区域。&#xff08;注意&#xff0c;这里的区域不是上文中提到的Area ID&#xff09;由L2的IS-IS邻居构成的区域为骨干区域&#xff0c;由L1的IS-IS邻居构成的区域为非骨…

动态路由--RIP配置(思科cisco)

一、简介 RIP协议&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;是一种基于距离矢量的动态路由选择协议。 在RIP协议中&#xff0c;如果路由器A和网络B直接相连&#xff0c;那么路由器A到网络B的距离被定义为1跳。若从路由器A出发到达网络B需要…

在原有的iconfont.css文件中加入新的字体图标

前言&#xff1a;在阿里图标库中&#xff0c;如果你没有这个字体图标的线上项目&#xff0c;那么你怎么在本地项目中的原始图标文件中添加新的图标呢&#xff1f; 背景&#xff1a;现有一个vue项目&#xff0c;下面是这个前端项目的字体图标文件。现在需要新开发功能页&#x…

论文阅读--Simple Baselines for Image Restoration

这篇文章是 2022 ECCV 的一篇文章&#xff0c;是旷视科技的一篇文章&#xff0c;针对图像恢复任务各种网络结构进行了梳理&#xff0c;最后总结出一种非常简单却高效的网络结构&#xff0c;这个网络结构甚至不需要非线性激活函数。 文章一开始就提到&#xff0c;虽然在图像复原…

DB-GPT-PaperReading

DB-GPT: Empowering Database Interactions with Private Large Language Models 1. 基本介绍 DB-GPT 旨在理解自然语言查询,提供上下文感知响应,并生成高精度的复杂 SQL 查询,使其成为从新手到专家的用户不可或缺的工具。DB-GPT 的核心创新在于其私有 LLM 技术,该技术在…