ROS 2边学边练(13)-- 创建一个功能包

前言

功能包是啥

        简单理解,功能包就是一个文件夹,一个具备一定功能的文件夹,一个有组织有结构的文件夹,一个能方便分享给其他人使用的文件夹,比如我们的小海龟功能包,它就是一个文件夹,名字叫turtlesim,在turtlesim文件夹下包含了其他几个子文件夹(src、msg、srv、action、include等等),这几个子文件夹里面又包含了一些配置文件、源文件等等内容,它们总体组织成了具备海龟仿真功能的一份功能包,我们可以使用它来订阅cmd_vel主题、发布消息等等。

        在ROS 2的功能包开发环境中,ament充当其元编译系统(编译系统+构建工具,编译系统主要负责配置、编译和安装独立的功能包,而构建工具则负责将多个独立的功能包按照一定的拓扑结构进行链接),而colcon为其构建工具(用于构建、测试和分发功能包),官方支持通过CMake(跨平台编译工具,可以用简单的语句来描述所有平台的编译过程,能够产生makefile文件和project文件)或python创建一个功能包(当然,其他类型也是支持的)。

包里面都有啥

        上图为小海龟仿真功能包内况,由于其是官方为了演示ROS的诸项知识点而写的,所以文件内容较为齐全,它涵盖了功能包(C/C++类型)的几个基本必须项:

include/<package_name>:功能包所需的公共头文件;

src:功能包源代码文件;

CMakeLists.txt:构建功能包规则文件;

package.xml:包的一些原始信息文件。

而在python类型的包中(比C/C++类型啰嗦些):

package.xml:包的一些原始信息文件;

resource/<package_name>:包的标记文件;

setup.cfg:包被启动运行(ros2 run)时需要这个启动配置文件;

setup.py:包进行安装时的指导脚本文件;

<package_name>:与包同名的文件夹(包含了__init__.py,上一篇我们有通过修改它来解决rosdep update超时问题),ROS 2工具利用它来找到我们的包。

工作空间中的功能包

        一个工作空间中可以包含很多的包,这些包都有属于各自独立的文件夹(一个工作空间中包的类型不局限于某一个,而是可以百花齐放共存),这样组织架构就很简单明了,方便管理。我们可以在工作空间根src路径下创建这些功能包,包1、包2、包3...,这些包都处于同一级,也就是包之间不能相互嵌套(比如包2在包1内,这是不允许的)。

        常见的一个工作空间中包的的情况如下:

workspace_folder/src/cpp_package_1/CMakeLists.txtinclude/cpp_package_1/package.xmlsrc/py_package_1/package.xmlresource/py_package_1setup.cfgsetup.pypy_package_1/...cpp_package_n/CMakeLists.txtinclude/cpp_package_n/package.xmlsrc/

动动手

创建一个功能包

        我们打开一个终端,第一步要做的事情就是激活下基础层(underlay)的环境变量,因为我们的包都会依赖于一些基础层提供的支持,还记得命令不:

$source /opt/ros/iron/setup.bash

第二步,我们需要进入到ros2_ws/src路径下,因为这里是创建功能包的地方:

$cd ~/ros2_ws/src

第三步,使用下面的命令创建我们的新包:

$ros2 pkg create --build-type ament_cmake --license Apache-2.0 <package_name>

在官方提供的教程当中,我们会添加--node-name选项创建一个简单的Hello World类型的功能包,如下(--license为版本声明):

$ros2 pkg create --build-type ament_cmake --license Apache-2.0 --node-name my_node my_package

通过上面的命令它为我们在src路径下创建了一个名字为my_package的功能包文件夹,该文件夹下又生成了包的几个基本组成项,看下面:

 my_package/src下面也已经生成了一个名为my_node.cpp的源代码文件,里面的内容如下:

只是会打印一句“hello world my_package package”。

构建一个功能包

        现在我们需要退出到工作空间根路径下(cd ~/ros2_ws)进行功能包的构建工作:

$colcon build

上面这个命令会将src路径下的所有可用的功能包都会构建一遍,这样构建的时间与资源会与包的数量成正比关系,如果我们在src下有很多其他的功能包,我们只是想构建我们关心的包,那我们可用通过之前的colcon build --packages-up-to <package_name>命令以及下面的命令进行单独构建(我们可以在终端输入colcon build --hep进行查看更多的参数使用方法):

$colcon build --packages-select <package_name>

 我们来单独构建my_package包:

$colcon build --packages-select my_package

激活环境变量 

我们再打开一个新终端(运行和构建的环境最好分开,以免蹦出一些令人懵逼尴尬的东西),先source ROS 2安装环境(underlay)的工作变量(source /opt/ros/iron/setup.bash)再进入我们的ros2_ws路径source 工作空间的环境变量(overlay),这可以让我们的工作空间能够添加到路径当中,我们就能正常使用功能包了。

$source install/local_setup.bash

使用功能包

$ros2 run <package_name> <node_name>

        通过上面的命令使用我们的功能包,<package_name>是功能包的名字,<node_name>是这个功能包支持的节点的名字(如果不清楚有哪些节点,我们可以在输入完包名字后连续两次按tab键,它会罗列出可用的节点,就像下图所演示的那样),我们试试:

$ros2 run my_package my_node

这个节点打印出了“hello world my_package package”,同my_node.cpp里面写的那样。

自定义package.xml

         在前言里面我们曾提到过package.xml这个文件,它描述了这个功能包的一些基本信息,如作者信息、版本信息、构建类型、依赖信息等等,同时在创建我们的my_package包时,它有打印出下图的信息内容:

其中你能看到“description: TODO: Package description ”及“maintainer:['mike <mike@todo.todo>']”,这个TODO意思是需要我们手动重新编辑填充的,并不是由相关工具进行自动填充设置。下图是my_package包里面的package.xml文件内容:

我们来完善这个包信息文件,修改后的内容如下(别忘了编辑完保存):

本篇完。 

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

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

相关文章

WPS 不登录无法使用基本功能的解决办法

使用wps时&#xff0c;常常有个比较让人烦恼的事&#xff0c;在不登录的情况下&#xff0c;新建或者打开文档时&#xff0c;wps不让你使用其基本的功能&#xff0c;如设置字体等&#xff0c;相关界面变成灰色&#xff0c;这时Wps提示用户登录注册或登录&#xff0c;但我又不想登…

【QT入门】 无边框窗口设计之综合运用,实现WPS的tab页面

往期回顾&#xff1a; 【QT入门】 无边框窗口设计之实现窗口阴影-CSDN博客 【QT入门】 无边框窗口设计之实现圆角窗口-CSDN博客 【QT入门】 无边框窗口设计综合运用之自定义标题栏带圆角阴影的窗口-CSDN博客 【QT入门】 无边框窗口设计之综合运用&#xff0c;实现WPS的tab页面 …

Nexus的docker安装,maven私服

文章目录 前言安装创建文件夹设置文件夹权限docker创建指令制作docker-compose.yaml文件 查看网站访问网页查看密码 前言 nexus作为私服的maven仓库&#xff0c;在企业级应用中&#xff0c;提供了依赖来源的稳定性&#xff0c;为构建庞大的微服务体系&#xff0c;打下基础 安…

算法——分治(快速排序)

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享分治算法关于快速排序的专题 对于快速排序在我个人主页专栏 <排序> 有详细的介绍,此专题对快排进行了优化操作,并介绍了优化后的快排的几种运用 如果有不足的或者错误的请…

【正点原子探索者STM32F4】TFTLCD实验学习记录:FSMC控制 TFTLCD的寄存器配置

FSMC控制 TFTLCD的寄存器配置 异步模式 A控制 TFTLCDFSMC寄存器配置ILI9341电平持续时间要求 参考 异步模式 A控制 TFTLCD LCD以ILI9341为例 FSMC寄存器配置 对于异步突发访问方式&#xff0c; FSMC 主要设置 3 个时间参数&#xff1a;地址建立时间(ADDSET)、 数据 建立时间…

Unity之PUN实现多人联机射击游戏的优化(Section 2)

目录 &#x1f3ae;一、准备工作 &#x1f3ae;二、实现手雷投掷动作 &#x1f3ae;三、手雷投掷同步 &#x1f4a4;3.1 photonView.RPC &#x1f3ae;四、同步手雷伤害 这几周都给我布置任务了&#xff0c;最近可忙。现在终于有机会更新了&#xff0c;也谢谢大家的阅读&a…

JavaSE-11笔记【多线程2(+2024新)】

文章目录 6.线程安全6.1 线程安全问题6.2 线程同步机制6.3 关于线程同步的面试题6.3.1 版本16.3.2 版本26.3.3 版本36.3.4 版本4 7.死锁7.1 多线程卖票问题 8.线程通信8.1 wait()和sleep的区别&#xff1f;8.2 两个线程交替输出8.3 三个线程交替输出8.4 线程通信-生产者和消费者…

Tailwind 4.0 即将到来:前端开发的“速度与激情”

随着前端开发技术的不断进步&#xff0c;我们每天都在寻找更快、更简洁的解决方案来提升我们的开发效率和用户体验。今天&#xff0c;我要为大家介绍一项令人振奋的新技术进展——Tailwind 4.0的来临&#xff01; 对于经常使用Tailwind的朋友们来说&#xff0c;这个消息无疑是激…

阿里云短信服务业务

一、了解阿里云用户权限操作 1.注册账号、实名认证&#xff1b; 2.使用AccessKey 步骤一 点击头像&#xff0c;权限安全的AccessKey 步骤二 设置子用户AccessKey 步骤三 添加用户组和用户 步骤四 添加用户组记得绑定短信服务权限 步骤五 添加用户记得勾选openApi访问 添加…

Educational Codeforces Round 162 (Rated for Div. 2) ----- E. Count Paths --- 题解

E. Count Paths&#xff1a; 题目大意&#xff1a; 思路解析&#xff1a; 根据题目中定义的美丽路径&#xff0c;我们可以发现路径只有两种情况&#xff1a; 当前结点作为起始结点&#xff0c;那我们只需要知道它的子树下有多少个相同颜色的结点&#xff0c;并且相同颜色的结…

使用 HTMX 和 Bun 进行全栈 Web 开发

将 HTMX 放在前端&#xff0c;Bun 放在后端&#xff0c;然后将它们与 Elysia 和 MongoDB 连接起来&#xff0c;形成快速便捷的技术栈&#xff0c;使开发 Web 应用程序变得轻而易举。 Bun 和 HTMX 是目前软件领域最有趣的两个事情。 Bun 是一个速度极快的一体化服务器端 JavaSc…

如何创建一个TCP多人聊天室?

一、什么是TCP&#xff1f; TCP&#xff08;Transmission Control Protocol&#xff09;是一种可靠的 面向连接的协议 &#xff0c;可以保证数据在传输过程中不会丢失、重复或乱序。 利用TCP实现简单聊天程序&#xff0c;需要客户端和服务器端之间建立TCP连接&#xff0c;并通…

MATLAB近红外光谱分析技术应用

郁磊副教授&#xff0c;主要从事MATLAB编程、机器学习与数据挖掘、数据可视化和软件开发、生理系统建模与仿真、生物医学信号处理&#xff0c;具有丰富的实战应用经验&#xff0c;主编《MATLAB智能算法30个案例分析》、《MATLAB神经网络43个案例分析》相关著作。已发表多篇高水…

C# MES通信从入门到精通(8)——C#调用Webservice服务进行数据交互

前言 在上位机开发领域,使用webservice来访问客户的终端Mes系统是一项必备的技能,本文详细介绍了如何在c#中调用webservice服务,不仅介绍了使用添加服务引用直接调用webservice中的方法外还介绍了使用http的post方法调用webservice方法,过程详细且均为实战经验总结,对于初…

港口核心!达梦数据助力上港集团罗泾码头 I-TOS 系统升级改造

港口作为交通运输的枢纽和联通世界的窗口&#xff0c;肩负着带动区域经济发展及服务国际经贸的双重责任。在信息化浪潮推动下&#xff0c;自动化、数字化、智能化成为港口航运业转型发展的关键。 达梦数据积极推进港口数字化转型升级 &#xff0c;助力上港集团罗泾码头实现 I-T…

青蛙过河(二分+前缀和)

题目描述 小青蛙住在一条河边&#xff0c;它想到河对岸的学校去学习。小青蛙打算经过河里的石头跳到对岸。 河里的石头排成了一条直线&#xff0c;小青蛙每次跳跃必须落在一块石头或者岸上。不过&#xff0c;每块石头有一个高度&#xff0c;每次小青蛙从一块石头起跳&#xf…

[问题记录] oracle问题汇总记录

plsql问题 1、oracle-initialization error could not locate OCI.dll 下载plsql客户端后&#xff0c;登录显示如图所示的错误 解决方法&#xff0c;点击下方链接&#xff0c;下载64位客户端 Instant Client for Microsoft Windows (x64) 64-bit (oracle.com) 2、显示中文乱…

【资源分享】最全ChatGPT镜像免梯子

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

leetCode第十题 : 正则表达式匹配 动态规划【10/1000 python】

&#x1f464;作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 LeetCode解锁1000题: 打怪升级之旅htt…

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--初尝php

初尝php 打开你下载的wordpress文件夹&#xff0c;如果你用的xampp那它就在xampp安装的文件夹–htdocs文件夹–你可以新建一个test文件夹–新建一个test.php文件 <html><head><title>First attempt at PHP</title></head><body><?ph…