ROS教程(三):创建ROS程序包

【ros2】ROS2功能包(Package)完全指南 接口包需用ament_cmake,依赖rosidl_default_generators(接口生成工具) ros2 pkg create my_interfaces --build-type ament_cmake --dependencies rosidl_default_generators std_msgs功能包是ROS2开发的基础单元,命令通过指定构建类型和依赖,可快速生成标准化的功能包结构。根据语言选择构建类型(for C++,正确配置(元信息与依赖)和编译脚本(setup.py。 阅读详情

创建ROS程序包

Description:  本教程介绍如何使用 roscreate-pkg 或 catkin 创建一个新程序包,并使用 rospack 查看程序包的依赖关系。

Tutorial Level:  BEGINNER

Next Tutorial:   编译ROS程序包

一个catkin程序包由什么组成?

一个程序包要想称为catkin程序包必须符合以下要求:

  • 该程序包必须包含catkin compliant package.xml文件

    • 这个package.xml文件提供有关程序包的元信息。
  • 程序包必须包含一个catkin 版本的CMakeLists.txt文件,而Catkin metapackages中必须包含一个对CMakeList.txt文件的引用。

  • 每个目录下只能有一个程序包。
    • 这意味着在同一个目录下不能有嵌套的或者多个程序包存在。

最简单的程序包也许看起来就像这样:

  • my_package/
      CMakeLists.txt
      package.xml

在catkin工作空间中的程序包

开发catkin程序包的一个推荐方法是使用catkin工作空间,但是你也可以单独开发(standalone)catkin 软件包。一个简单的工作空间也许看起来像这样:

  • workspace_folder/        -- WORKSPACE
      src/                   -- SOURCE SPACE
        CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
        package_1/
          CMakeLists.txt     -- CMakeLists.txt file for package_1
          package.xml        -- Package manifest for package_1
        ...
        package_n/
          CMakeLists.txt     -- CMakeLists.txt file for package_n
          package.xml        -- Package manifest for package_n

在继续本教程之前请先按照创建catkin工作空间教程创建一个空白的catkin工作空间。

创建一个catkin程序包

本部分教程将演示如何使用catkin_create_pkg命令来创建一个新的catkin程序包以及创建之后都能做些什么。

首先切换到之前通过创建catkin工作空间教程创建的catkin工作空间中的src目录下:

# You should have created this in the Creating a Workspace Tutorial
$ cd ~/catkin_ws/src

现在使用catkin_create_pkg命令来创建一个名为'beginner_tutorials'的新程序包,这个程序包依赖于std_msgs、roscpp和rospy:

$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

这将会创建一个名为beginner_tutorials的文件夹,这个文件夹里面包含一个package.xml文件和一个CMakeLists.txt文件,这两个文件都已经自动包含了部分你在执行catkin_create_pkg命令时提供的信息。

catkin_create_pkg命令会要求你输入package_name,如果有需要你还可以在后面添加一些需要依赖的其它程序包:

# This is an example, do not try to run this
# catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

catkin_create_pkg命令也有更多的高级功能,这些功能在catkin/commands/catkin_create_pkg中有描述。

程序包依赖关系

一级依赖

之前在使用catkin_create_pkg命令时提供了几个程序包作为依赖包,现在我们可以使用rospack命令工具来查看一级依赖包。

(Jan 9, 2013) There is a bug reported and already fixed in rospack in groovy, which takes sometime until the change gets reflected on your computer. If you see a similar issue like this with the next command, you can skip to the next command.

$ rospack depends1 beginner_tutorials 
  • std_msgs
    rospy
    roscpp

就像你看到的,rospack列出了在运行catkin_create_pkg命令时作为参数的依赖包,这些依赖包随后保存在package.xml文件中。

$ roscd beginner_tutorials
$ cat package.xml
  • <package>
    ...
      <buildtool_depend>catkin</buildtool_depend>
      <build_depend>roscpp</build_depend>
      <build_depend>rospy</build_depend>
      <build_depend>std_msgs</build_depend>
    ...
    </package>

间接依赖

在很多情况中,一个依赖包还会有它自己的依赖包,比如,rospy还有其它依赖包。

(Jan 9, 2013) There is a bug reported and already fixed in rospack in groovy, which takes sometime until the change gets reflected on your computer. If you see a similar issue like this with the next command, you can skip to the next command.

$ rospack depends1 rospy
  • genpy
    rosgraph
    rosgraph_msgs
    roslib
    std_msgs

一个程序包还可以有好几个间接的依赖包,幸运的是使用rospack可以递归检测出所有的依赖包。

$ rospack depends beginner_tutorials
cpp_common
rostime
roscpp_traits
roscpp_serialization
genmsg
genpy
message_runtime
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
catkin
rospack
roslib
rospy

自定义你的程序包

本部分教程将剖析catkin_create_pkg命令生成的每个文件并详细描述这些文件的组成部分以及如何自定义这些文件。

自定义 package.xml

自动生成的package.xml文件应该在你的新程序包中。现在让我们一起来看看新生成的package.xml文件以及每一个需要你注意的标签元素。

描述标签

首先更新描述标签:

切换行号显示
   5   <description>The beginner_tutorials package</description>

将描述信息修改为任何你喜欢的内容,但是按照约定第一句话应该简短一些,因为它覆盖了程序包的范围。如果用一句话难以描述完全那就需要换行了。

维护者标签

接下来是维护者标签:

切换行号显示
   7   <!-- One maintainer tag required, multiple allowed, one person per tag --> 
   8   <!-- Example:  -->
   9   <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
  10   <maintainer email="user@todo.todo">user</maintainer>

这是package.xml中要求填写的一个重要标签,因为它能够让其他人联系到程序包的相关人员。至少需要填写一个维护者名称,但如果有需要的话你可以添加多个。除了在标签里面填写维护者的名称外,还应该在标签的email属性中填写邮箱地址:

切换行号显示
   7   <maintainer email="you@yourdomain.tld">Your Name</maintainer>

许可标签

再接下来是许可标签,同样的也需要:

切换行号显示
  12   <!-- One license tag required, multiple allowed, one license per tag -->
  13   <!-- Commonly used license strings: -->
  14   <!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
  15   <license>TODO</license>

你应该选择一种许可协议并将它填写到这里。一些常见的开源许可协议有BSD、MIT、Boost Software License、GPLv2、GPLv3、LGPLv2.1和LGPLv3。你可以在Open Source Initiative中阅读其中的若干个许可协议的相关信息。对于本教程我们将使用BSD协议,因为ROS核心组件的剩余部分已经使用了该协议:

切换行号显示
   8   <license>BSD</license>

依赖项标签

接下来的标签用来描述程序包的各种依赖项,这些依赖项分为build_depend、buildtool_depend、run_depend、test_depend。关于这些标签的更详细介绍请参考Catkin Dependencies相关的文档。在之前的操作中,因为我们将 std_msgs、 roscpp、 和 rospy作为catkin_create_pkg命令的参数,所以生成的依赖项看起来如下:

切换行号显示
  27   <!-- The *_depend tags are used to specify dependencies -->
  28   <!-- Dependencies can be catkin packages or system dependencies -->
  29   <!-- Examples: -->
  30   <!-- Use build_depend for packages you need at compile time: -->
  31   <!--   <build_depend>genmsg</build_depend> -->
  32   <!-- Use buildtool_depend for build tool packages: -->
  33   <!--   <buildtool_depend>catkin</buildtool_depend> -->
  34   <!-- Use run_depend for packages you need at runtime: -->
  35   <!--   <run_depend>python-yaml</run_depend> -->
  36   <!-- Use test_depend for packages you need only for testing: -->
  37   <!--   <test_depend>gtest</test_depend> -->
  38   <buildtool_depend>catkin</buildtool_depend>
  39   <build_depend>roscpp</build_depend>
  40   <build_depend>rospy</build_depend>
  41   <build_depend>std_msgs</build_depend>

除了catkin中默认提供的buildtool_depend,所有我们列出的依赖包都已经被添加到build_depend标签中。在本例中,因为在编译和运行时我们需要用到所有指定的依赖包,因此还需要将每一个依赖包分别添加到run_depend标签中:

切换行号显示
  12   <buildtool_depend>catkin</buildtool_depend>
  13 
  14   <build_depend>roscpp</build_depend>
  15   <build_depend>rospy</build_depend>
  16   <build_depend>std_msgs</build_depend>
  17 
  18   <run_depend>roscpp</run_depend>
  19   <run_depend>rospy</run_depend>
  20   <run_depend>std_msgs</run_depend>

最后完成的 package.xml

现在看下面最后去掉了注释和未使用标签后的package.xml文件就显得更加简洁了:

切换行号显示
   1 <?xml version="1.0"?>
   2 <package>
   3   <name>beginner_tutorials</name>
   4   <version>0.1.0</version>
   5   <description>The beginner_tutorials package</description>
   6 
   7   <maintainer email="you@yourdomain.tld">Your Name</maintainer>
   8   <license>BSD</license>
   9   <url type="website">http://wiki.ros.org/beginner_tutorials</url>
  10   <author email="you@yourdomain.tld">Jane Doe</author>
  11 
  12   <buildtool_depend>catkin</buildtool_depend>
  13 
  14   <build_depend>roscpp</build_depend>
  15   <build_depend>rospy</build_depend>
  16   <build_depend>std_msgs</build_depend>
  17 
  18   <run_depend>roscpp</run_depend>
  19   <run_depend>rospy</run_depend>
  20   <run_depend>std_msgs</run_depend>
  21 
  22 </package>

自定义 CMakeLists.txt

到此,这个包含程序包元信息的package.xml文件已经按照需要完成了裁剪整理,现在你可以继续下面的教程了。catkin_create_pkg命令生成的CMakeLists.txt文件将在后续关于编译ROS程序代码的教程中讲述。

现在你已经创建了一个新的ROS程序包,接下来我们开始编译这个程序包

ROS2 学习--新建ros2工作空间和功能包 如何新建ROS2功能包和节点,提供一个完整的创建和编译过程。 阅读详情

相关推荐

ROS教程(三):创建程序包及节点(图文)

文章目录前言一、创建功能包二、创建节点三、修改CMakeList.txt四、配置package.xml文件五、编译并执行1.编译2.执行六、rostopic工具总结 前言 根据前篇教程已经创建好了工作空间,并已经成功生效了环境变量,接下来创建一个功能包 一、创建功能包 功能包的名字根据我们这个功能包的作用来命名。比如我现在的功能包是用来学习ROS的C++编程,那么我的功能包名称就叫做learning_cplus。 打开终端,输入下面指令。 cd catkin_ws/src catkin_create_

Leslie的博客 13万+

3.3 创建一个 ROS 功能包

本节主要介绍如何用 catkin 来创建一个新的功能包,并且使用前面介绍的 rospack 命令去查看功能包的依赖。

敏而好学,不耻下问 3992

ROS教程(四):RVIZ使用教程(详细图文)

前言 根据前面的教程已经学会了创建功能包,那么本篇文章主要内容则是通过节点来发布数据至RVIZ

Leslie的博客 17万+

实现ROS基本功能

测试订阅和发布节点新开3个终端,分别输入roscore发布者发布的消息:订阅者收到的消息测试自定义消息格式下面使用自定义的消息格式int64 age需要修改①加入消息头文件 ②修改发布类型为beginner_tutorials::MyFirstMsg.msg ③修改终端输出#include // 虽然.msg不算头文件,但这样写就能包括进来// 包名/消息名.h在while函数中修改(赋值+显示+发布)

TheRun的博客 1431

ROS学习笔记(2):在ROS中使用OpenCV进行简单的图像处理---代码实现篇

再上一篇blog中,笔者总结了ROS系统中使用OpenCV库的进行简单图像处理的原理、系统相关的设置和程序包的下载。在这篇博客中,笔者将从代码层面介绍如何实现在ROS系统中读取图片,并使用OpenCV进行图像处理,在返回结果。

Robogreen的博客 2万+

深入了解ROS的细节,ROS文件系统、创建ROS程序包、编译ROS程序包、理解ROS节点、理解ROS话题(topic)

深入了解ROS的细节 这篇博客旨在深入地了解ROS平台,详细解析多个命令的功能以及利用场景,这里要用到一个模拟器产生一个小乌龟的节点来演示各个命令的使用 这篇文章讲的是关于ROS平台的细节信息,建立在安装好ROS的前提下,安装过程和创建工作空间参考 ROS文件系统介绍 文件系统概念 Packages:软件包是ROS应用层程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其它手动...

习惯积淀的博客 1483

ROS总结——ROS程序包(一)

创建ROS程序包本博客是对http://wiki.ros.org/上ROS教程的学习总结,欢迎大家交流学习。1.catkin程序包组成 程序包要想称为catkin程序包必须符合以下要求: 该程序包必须包含catkin compliant package.xml文件 ,这个package.xml文件提供有关程序包的元信息。 程序包必须包含一个catkin 版本的CMakeLists.txt文件,而C

YongqiangGao的专栏 3589

ROS - 命令行工具(Command-line tools)

当在 $ROS_ROOT 中调用顶级 make 时,会联编下列工具。它们会被安装到 $ROS_ROOT/bin,作为安装过程的一部分,PATH 变量中应该已经添加了这些工具。如果不是这种情况,请按照安装指南。

机器人控制与仿真应用 1606

ROS教程3:创建ROS程序包

创建ROS程序包1 catkin程序包组成和文件结构2 创建catkin程序包3 解析程序包依赖关系3.1 查看程序包的一级依赖3.2 间接依赖:查看一级依赖包的依赖3.3 查看程序包的所有依赖包4 package.xml和CmakeLists.txt的解读和自定义 1 catkin程序包组成和文件结构 catkin程序包必须满足以下条件: 每个目录下只有一个程序包 包含package.xml ...

吉大秦少游 1083

关键词‖旋变传感器

旋转变压器(以下简称旋变)安装在永磁同步驱动电机的非传动端,其作用是检测转子的位置和速度。目前,通常采采用结构简单、坚固耐用、环境适应性好的磁阻式旋变作为位置传感器。

m0_72345077的博客 2149

vba 修改下拉列表_Excel联想式下拉菜单制作教程II

?点击关注Excel表哥公众号上期我们分享了Excel联想式下拉菜单制作教程,可以简化大家在下拉菜单过长时的数据录入工作。文章末尾给大家提出了一个问题:为什么下拉列表数据源需要先排序?今天我们继续分享一个不用对数据源排序也能实现的下拉列表制作方法。先看最终的效果动图:今日分享难度指数:★★★★☆01创建辅助列在需要设置下拉列表的工作表中创建一列辅助列,如下图所示:在辅助列F3单元格输入下...

weixin_39593718的博客 1576

ROS入门(四)编译ROS程序包

描述 :本教程介筛ROS程序包的编译方法 1编译程序包 一旦安装的所需的系统依赖项,我们就可以开始编译刚才创建的程序包了。 注意: 如果你是通过apt或者其它软件包管理工具来安装ROS的,那么系统已经默认安装好所有依赖项。 记得事先source你的环境配置(setup)文件,在Ubuntu中的操作指令如下: $ source /opt/ros/groovy/setup.bash 使用cat...

小鱼儿飞丫飞 2401

什么是无人机巡检?如何实现无人机自动巡检?

复亚智能的无人机自动巡检系统通过高度自动化的技术,实现了无人机的高效巡检作业。无人机自动机场支持无人机的自动起降和电池更换,自动飞行算法确保无人机在复杂环境中的精准飞行和拍摄,而云端识别诊断和AI感知算法平台则实现图像的实时传输和智能分析。复亚智能,作为无人机技术的创新者和推动者,致力于开发先进的无人机自动巡检解决方案,助力各行各业实现智能化、自动化的巡检工作,引领智能巡检的未来。利用人工智能和机器学习算法,无人机可以被训练来识别特定的模式和异常,如结构损坏、热泄漏等,从而提高巡检的准确性和效率。

foiadrone的博客 2842

ROS入坑 创建与编译ROS程序包

创建ROS程序包一个catkin程序包packages由什么组成?在catkin工作空间中的程序包创建一个catkin程序包程序包依赖关系一级依赖间接依赖自定义你的程序包自定义 package.xml描述标签维护者标签许可标签依赖项标签最后完成简单清爽的package.xml自定义 CMakeLists.txt编译ROS程序包使用 catkin_make开始编译你的程序包 一个catkin程序包packages由什么组成? 一个程序包要想称为catkin程序包必须符合以下要求: 程序包必须包含catki

GungnirsPledge的博客 1613

Visual Studio 2015 插件开发 从入门到放弃(一)

必需知识:C#和Visual Studio (1)安装 Visual Studio 2015 的时候选择 Visual Studio 扩展性工具(Visual Studio Extensibility Tools)。对于已经安装好 Visual Studio 2015 的小伙伴,可以找VS2015的安装包,或者在程序与功能中找VS2015双击,在VS2015界面中选择 修改,再选择

AncientPeople的博客 2万+

逆向选择启示录:一个失败高频策略如何意外跑赢市场

本文探讨了高频交易中的逆向选择现象,揭示了一个失败的高频策略如何通过简化意外跑赢市场。通过加密货币市场的实证分析和蒙特卡洛模拟,研究发现低预测性的简单策略反而更具鲁棒性,有效规避了逆向选择风险。文章还提供了小币种做市策略的优化框架和实践建议,为量化交易者提供了宝贵洞见。

weixin_29191669的博客 401

ROS入门(三)创建ROS程序包

1.一个catkin程序包由什么组成? 一个程序包要想称为catkin程序包必须符合以下要求: 该程序包必须包含catkin compliant package.xml文件 这个package.xml文件提供有关程序包的元信息。 程序包必须包含一个catkin 版本的CMakeLists.txt文件,而Catkin metapackages中必须包含一个对CMakeList.txt文件的引...

小鱼儿飞丫飞 656

GROMACS+PLUMED联合安装避坑指南:为什么你的plumed patch总是失败?

本文深入解析GROMACS与PLUMED联合安装中补丁失败的常见原因,并提供详细的避坑指南。针对版本兼容性、环境配置和编译选项等关键问题,给出从源码选择、环境搭建到手动合并补丁的完整解决方案,帮助用户成功整合这两个强大的分子动力学工具,实现增强采样模拟。

weixin_29302047的博客 287

ROS学习笔记(三): 创建ROS程序包

二、创建ROS程序包 0.1 catkin软件包组成 该程序包必须包含catkin compliant package.xml文件 这个package.xml文件提供有关程序包的元信息。 程序包必须包含一个catkin 版本的CMakeLists.txt文件,而Catkin metapackages中必须包含一个对CMakeList.txt文件的引用。 每个目录下只能有一个程序包。 意味着在同一个目录下不能有嵌套的或者多个程序包存在。 0.2 在catkin工作空间中的程序包 开发

qq_42910179的博客 1041

汇川Easy系列PLC系统PID指令编程应用(增量型)

增量式PIDS7-1200/1500增量式PID(输出归一化、支持PWM输出)_西门子1200pid算法公式-优快云博客文章浏览阅读1k次。本文介绍了S7-1200/1500 PLC中增量式PID算法的应用,包括输出归一化和PWM输出。通过详细解析,阐述了PID输出如何限制在0.0-1.0之间,并且如何将PID输出与PWM占空比关联,适用于温度等控制场景。

RXXW_Dor的博客 1422

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

创建ROS程序包

创建ROS程序包目录1.一个catkin程序包由什么组成?2.在catkin工作空间中的程序包3.创建一个catkin程序包4.程序包依赖关系4.1 一级依赖4.2 间接依赖5. 自定义程序包5.1 自定义 package.xml5.2 自定义 CMakeLists.txt 目录 本教程介绍如何使用roscreate-pkg或catkin创建一个新程序包,并使用rospack查看程序包的依赖关系。 1.一个catkin程序包由什么组成? 一个程序包要想称为catkin程序包必须符合以下要求: 1.该程序包必

Binnary的博客 388

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ROS总结——ROS程序包(二)

编译ROS程序包本博客是对http://wiki.ros.org/上ROS教程的学习总结,欢迎大家交流学习。在创建ROS程序包讲解了ROS程序包的创建,本部分讲解如何使用catkin_make对ROS程序包的编译。 1.使用 catkin_make catkin_make 是一个命令行工具,它简化了catkin的标准工作流程。你可以认为catkin_make是在CMake标准工作流程中依次调用了

YongqiangGao的专栏 1237

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ROS教程4: 编译ROS程序包

文章目录catkin_make命令说明开始编译程序包附录:如何用C++ 和Python写一个简单的订阅器和发布器 catkin_make命令说明 安装所需的系统依赖项之后,就可以编译刚才创建的程序包。反之,如果缺少对应的依赖包,编译将不能成功。 幸运的是:如果我们通过apt或者其他软件包管理工具来安装ROS,那么系统就会默认安装好所有的依赖项。 编译之前一般需要运行setup.bash将当前工作空...

吉大秦少游 660
上一篇: ROS教程(二):ROS文件系统介绍
下一篇: ROS教程(四):编译ROS程序包
沫尘雪痕
博客等级 码龄16年 166粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值