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


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

1 ROS2中的功能包

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

workspace_folder/
    src/
      package_1/
          CMakeLists.txt
          package.xml

      package_2/
          setup.py
          package.xml
          resource/package_2
      ...
      package_n/
          CMakeLists.txt
          package.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很简单,没有任何依赖项,但您将在接下来的教程中看到这个空间的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roar冷颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值