ROS2入门教程—创建ROS2功能包(C++版)

  • 1 ROS2中的功能包
  • 2 创建功能包
  • 3 编译功能包
  • 4 设置环境变量
  • 5 运行功能包
  • 6 功能包中的内容
  • 7 修改package.xml文件

  功能包是ROS2中组织代码的基本容器,方便我们编译、安装、分发开发的代码,一般来讲,每个功能包都是用来完成某项具体的功能相对完整的单元。

1 ROS2中的功能包

  ROS2中的功能包可以使用CMake或者Python两种方式来编译(本篇文章主要介绍CMake),其本身是一个“文件夹”,但和文件夹不同的是,每个功能包中都会有这些文件:
  ∙\bullet∙ package.xml 功能包的描述信息
  ∙\bullet∙ CMakeLists.txt 描述CMake编译该功能包的规则
  每个工作空间中可以有多个功能包,CMake或者Python包都可以,但是功能包是不能嵌套的。典型的一个工作空间内功能包的结构如下:

workspace_folder/src/package_1/CMakeLists.txtpackage.xmlpackage_2/setup.pypackage.xmlresource/package_2...package_n/CMakeLists.txtpackage.xml

2 创建功能包

  还是使用之前已经创建好的dev_ws工作空间,我们在其中的src文件夹中来创建新功能包。打开终端后进入到dev_ws/src路径下:

cd ~/dev_ws/src

  然后就可以使用如下语法来创建功能包了:

ros2 pkg create --build-type ament_cmake <package_name>

  对于本教程,您将使用可选参数--node name,它在包中创建一个简单的Hello World类型的可执行文件。在终端中输入如下命令:

ros2 pkg create --build-type ament_cmake --node-name my_node my_package

  执行上述命令之后,就可以在src中看到一个新的文件夹叫做my_package,同时在终端中有很多日志信息:

going to create a new package
package name: my_package
destination directory: /home/libo/dev_ws/src
package format: 3
version: 0.0.0
description: TODO: Package description
maintainer: ['libo <libo@todo.todo>']
licenses: ['TODO: License declaration']
build type: ament_cmake
dependencies: []
node_name: my_node
creating folder ./my_package
creating ./my_package/package.xml
creating source and include folder
creating folder ./my_package/src
creating folder ./my_package/include/my_package
creating ./my_package/CMakeLists.txt
creating ./my_package/src/my_node.cpp

3 编译功能包

  将功能包放在工作空间中特别有价值,因为您可以通过在工作空间根目录中运行colcon build一次构建多个包。否则,您将不得不单独构建每个包。

  回到工作空间的根目录:

cd ~/dev_ws

  执行编译命令:

colcon build

  这个命令会编译工作空间中的所有功能包,如果只想编译某一个包的话,可以执行如下命令:

colcon build --packages-select my_package

4 设置环境变量

  要使用新的功能包和可执行文件,请首先打开一个新的终端,进入到工作空间的根目录dev_ws,然后执行以下命令:

. install/setup.bash

  现在您的工作空间已添加到路径中,这样才能让该终端找到新创建的包,接下来就可以在该终端中运行新建功能包的可执行文件了。

5 运行功能包

  使用如下命令运行上面创建的可执行文件:

ros2 run my_package my_node

  在终端中可以看到:

hello world my_package package

6 功能包中的内容

  在dev_ws/src/my_package中,您将看到ros2 pkg命令自动生成的文件和文件夹:

CMakeLists.txt  include  package.xml  src

  my_node.cpp位于src目录中。这是所有您的自定义C++节点将来都会用到的地方。

7 修改package.xml文件

  新建功能包中的package.xml文件需要我们手动完善一下,包括其中的descriptionlicense等,默认都有加“TODO”标志。这是因为功能包描述和使用许可证不是自动设置的,但是如果您想要发布功能包,则必须设置。可能还需要填写maintainer字段。

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3"><name>my_package</name><version>0.0.0</version><description>TODO: Package description</description><maintainer email="libo@todo.todo">libo</maintainer><license>TODO: License declaration</license><buildtool_depend>ament_cmake</buildtool_depend><test_depend>ament_lint_auto</test_depend><test_depend>ament_lint_common</test_depend><export><build_type>ament_cmake</build_type></export>
</package>

  如果第7行没有为您自动填充,请在第7行输入您的姓名和电子邮件。然后,编辑第6行上的描述,简单介绍一下该功能包的作用:

<description>Beginner client libraries tutorials practice package</description>

  然后,在第8行更新许可证。您可以在这里关于开放源代码许可证的信息。

  由于此功能包仅用于学习使用,因此使用任何许可证都是安全的。我们使用Apache License 2.0

<license>Apache License 2.0</license>

  除了这些基本信息之外,还可以看到不少以“_depend”结尾的标签,这些就是用来描述功能包依赖的,如果我们在编写代码过程中新增加了什么依赖,都可以手动添加到这里来。my_package很简单,没有任何依赖项,但您将在接下来的教程中看到这个空间的使用。

ROS2入门教程—创建ROS2功能包(C++版)相关推荐

  1. ROS2入门教程—创建一个简单的订阅者和发布者(C++版)

    ROS2入门教程-创建一个简单的订阅者和发布者(C++版) 1 创建功能包 2 创建发布者节点 3 设置发布者节点依赖项 4 设置发布者节点编译规则 5 创建订阅者 6 编译并运行   节点是通过RO ...

  2. ros2与Python入门教程-创建ros2包 - 创客智造

    来源: https://www.ncnynl.com/archives/202008/3817.html 说明: 介绍如何创建ros2软件包 步骤: 新建ros2包 cd ~/dev_ws/src r ...

  3. ROS2入门教程—理解话题(Topic)

    ROS2入门教程-理解话题(Topic) 1 启动小海龟仿真器 2 rqt_graph 3 ros2 topic list 4 ros2 topic echo 5 ros2 topic info 6 ...

  4. oak深度相机入门教程-创建自定义模型

      系列文章目录: oak深度相机入门教程-识别眼睛的凝视方向 oak深度相机入门教程-检测是否佩戴口罩 oak深度相机入门教程-文本检测+光学字符识别(OCR)管道 oak深度相机入门教程-识别人的 ...

  5. ros自带package在哪里_【ROS】创建ROS功能包(ROS package)

    创建功能包(ROS package) 1 常用工具 roscreate-pkg catkin 2 catkin package组成 命名规则 只允许使用小写字母,数字,下划线三种元素组成,并且首字母必 ...

  6. ros学习(1)工作空间创建和功能包

    1.创建空间 mkdir -p ~/testROS_ws/src cd ~/testROS_ws/src catkin_init_workspace 2.编译工作空间 cd ~/testROS_ws ...

  7. ROS2与C++入门教程-创建服务(srv)文件 - 创客智造

    来源:https://www.ncnynl.com/archives/201806/2492.html 说明: 介绍如何创建服务srv文件 步骤: 使用已经建好的工作空间dev_ws 新建包,如果已经 ...

  8. cad怎么向下位移_CAD制图初学入门教程:阵列功能的使用技巧

    阵列在浩辰CAD软件中也是比较常用的功能之一,但是有些CAD制图初学入门者对此并不是很了解.那么在浩辰CAD软件中阵列功能怎么用呢?接下来就给大家分享一些关于阵列功能的CAD制图初学入门技巧吧! 首先 ...

  9. CAD中 OLE不能旋转_CAD制图初学入门教程:阵列功能的使用技巧

    阵列在浩辰CAD软件中也是比较常用的功能之一,但是有些CAD制图初学入门者对此并不是很了解.那么在浩辰CAD软件中阵列功能怎么用呢?接下来就给大家分享一些关于阵列功能的CAD制图初学入门技巧吧! 首先 ...

最新文章

  1. rm 空间不释放_rm删除文件之后,空间就被释放了吗?
  2. 转义字符 /r与/n的区别
  3. 3天,我用Python手撕了一个深度学习框架!
  4. Python之路--Django--auth认证系统
  5. php视图,PHP的Yii框架中View视图的使用进阶
  6. easyui tree json php,easyui tree json
  7. [知了堂学习笔记]_IO流之File类的应用
  8. 小汪Hibernate 学习之一 Hibernate 小例子
  9. 20款优秀的基于浏览器的在线代码编辑器
  10. [ZT]新点子,就在空气中飘荡着...
  11. 博客-需求说明答辩总结
  12. 如何用Visio画出总线(空心的箭头)
  13. php strpos无效,php问题:strpos功能不起作用
  14. win7桌面上计算机图标名称怎么改,win7电脑桌面图标排列方式如何设置 win7电脑桌面图标排列方法...
  15. Hibernate框架简介④
  16. unity瓦片地图调整图片大小
  17. java 求次方_Java递归例子——求x的y幂次方
  18. linux zip和gzip的区别
  19. 小白深度学习入坑指南
  20. UI导航栏设计规范及注意事项有哪些?

热门文章

  1. mongodb 计算坐标距离
  2. 【LabVIEW懒人系列教程-小白入门】1.24LabVIEW文件IO之txt文本...
  3. 如何在人工智能时代不被抛弃:听李开复博士怎么说
  4. odoo定义view表自定义sql来创建表及反写操作
  5. 2017第九届中国(深圳)国际物联网博览会会刊(参展商名录)
  6. cocos2dx-3.0 环境安装
  7. 【分享】双12了,也没啥可送大家的,就送大家点商业源码吧!
  8. Python三国华容道程序-深度优先
  9. 动感相册源码--类似QQ动感影集.rar
  10. Power2Go 13中文版