创建您的第一个ROS 2包 [待校准@7117]

Goal目标: using使用CMake或Python创建一个新包,并运行其可执行文件。 [待校准@7118]

教程级别: 初学者 [Alyssa@7088]

时间: 15分钟 [Alyssa@6755]

背景

1什么是ROS 2包? [待校准@7119]

包可以被视为ROS 2代码的容器。如果你想安装你的代码或者与其他人共享,那么你需要把它组织成一个包。有了包,你可以释放你的ROS 2工作,并允许其他人轻松构建和使用它。 [待校准@7120]

ROS 2中的包创建使用ament作为其构建系统,colcon作为其构建工具。您可以使用官方支持的CMake或Python创建包,尽管确实存在其他构建类型。 [待校准@7121]

2什么构成了ROS 2包? [待校准@7122]

ROS 2 Python和CMake包各有各自的最低要求内容: [待校准@7123]

最简单的包可能具有如下所示的文件结构: [待校准@7131]

my_package/
     CMakeLists.txt
     package.xml

工作区中的3个包 [待校准@7132]

单个工作区可以包含任意数量的包,每个包都在自己的文件夹中。您还可以在一个工作区 (CMake、Python等) 中拥有不同构建类型的包。您不能有嵌套包。 [待校准@7133]

最佳实践是在你的工作空间里有一个 src 文件夹,并在那里创建你的包。这使工作区的顶层保持 “干净”。 [待校准@7134]

琐碎的工作区可能如下所示: [待校准@7135]

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

      package_2/
          setup.py
          package.xml
          resource/package_2
      ...
      package_n/
          CMakeLists.txt
          package.xml

先决条件

按照 previous tutorial 中的说明操作后,您应该有一个ROS 2工作区。您将在此工作区中创建包。 [待校准@7136]

任务

1创建包

首先, sourc 你的ROS 2 安装空间[小鱼@7138]

让我们为您的新包使用您在 previous tutorial, `` dev_ws ”中创建的工作区。 [待校准@7139]

在运行包创建命令之前,请确保您位于 src 文件夹中。 [待校准@7140]

cd ~/dev_ws/src

在ROS 2中创建新包的命令语法是:

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

在本教程中,您将使用可选参数 --node-name ,它在包中创建一个简单的Hello World类型可执行文件。 [待校准@7142]

在终端中输入以下命令: [待校准@7143]

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

现在,您将在工作区的 src 目录中有一个新文件夹,名字为 my_package[小鱼@7144]

运行命令后,终端将返回以下消息: [待校准@7145]

going to create a new package
package name: my_package
destination directory: /home/user/dev_ws/src
package format: 3
version: 0.0.0
description: TODO: Package description
maintainer: ['<name> <email>']
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

您可以看到为新包自动调用y生成的文件。 [待校准@7146]

2构建一个包 [待校准@7147]

将包放入工作区特别有价值,因为您可以通过在工作区根目录下运行 colcon build 来同时构建多个包。否则,您将必须单独构建每个包。 [待校准@7148]

返回工作区的根目录: [待校准@7149]

cd ~/dev_ws

现在,您可以构建您的包: [待校准@7150]

colcon build

从上一个教程重新调用,你的 ros_tutorials 包也在你的 dev_ws 。你可能已经注意到运行 colcon build 也建立了 turtlesim 包。当你的工作空间里只有几个包的时候没关系,但是当有很多包的时候, colcon build 可能需要很长时间。 [待校准@7151]

要下次只构建 my_package 包,您可以运行: [待校准@7152]

colcon build --packages-select my_package

3电源安装文件 [待校准@7153]

要使用新的包和可执行文件,请首先打开一个新的终端,并为主ROS 2安装源文件。 [待校准@7154]

然后,在 dev_ws 目录中,运行以下命令来为您的工作区提供源文件: [待校准@7155]

. install/setup.bash

既然您的工作区已添加到路径中,您将能够使用新包的可执行文件。 [待校准@7156]

4使用包装 [待校准@7157]

要运行您在包创建期间使用 --node-name 参数创建的可执行文件,请输入以下命令: [待校准@7158]

ros2 run my_package my_node

它将向您的终端返回一条消息: [待校准@7159]

hello world my_package package

5检查包装内容 [待校准@7160]

dev_ws/src/my_package 内部,您将看到 ros2 pkg create 自动调用y生成的文件和文件夹: [待校准@7161]

CMakeLists.txt  include  package.xml  src

[需手动修复的语法]``my_node.cpp`` is inside the src directory。这就是你所有的自定义c + + 节点在未来的去向。 [待校准@7162]

6自定义包.xml [待校准@7164]

创建包裹后,您可能已经在回复信息中注意到 descriptionlicense 字段包含 TODO 注释。这是因为包描述和许可证声明不是自动调用y集,但如果您想释放包,则是必需的。 maintainer 田地也可能需要填写。 [待校准@7165]

dev_ws/src/my_package ,使用您喜欢的文本编辑器打开 package.xml : [待校准@7166]

<?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="user@todo.todo">user</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>

如果您没有自动调用 maintainer ,请在 maintainer 线上输入您的姓名和电子邮件。然后,编辑 description 行来总结包: [待校准@7167]

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

然后更新 license 线。你可以阅读更多关于开放源文件许可证 here 的信息。由于此软件包仅用于实践,因此使用任何许可证都是安全的。我们使用 Apache License 2.0 : [待校准@7168]

<license>Apache License 2.0</license>

完成编辑后,不要忘记保存。 [待校准@7169]

在许可证标签下面,你会看到一些以 _depend 结尾的标签名称。这是你的 package.xml 列出它对其他包的依赖的地方,供colcon搜索。 my_package 很简单,没有任何依赖关系,但是你会在即将到来的教程中看到这个空间。 [待校准@7170]

你们现在都完了! [待校准@7171]

总结

您已经创建了一个包来组织您的代码,并使其易于他人使用。 [待校准@7176]

您的包被自动调用y填充了必要的文件,然后您使用colcon构建它,以便您可以在本地环境中使用其可执行文件。 [待校准@7177]

下一步

接下来,让我们向包中添加一些有意义的内容。你将从一个简单的出版商/订阅者系统开始,你可以选择用 C++ or Python 写。 [待校准@7178]