目标:使用 CMake 或 Python 创建一个新包,并运行其可执行文件。
教程级别:初学者
时间: 15分钟
内容
-
背景
-
1 什么是 ROS 2 包?
-
2 什么构成了 ROS 2 包?
-
3 工作区中的包
-
-
先决条件
-
任务
-
1 创建一个包
-
2 构建一个包
-
3 获取安装文件
-
4 使用包
-
5 检查包装内容
-
6 自定义 package.xml
-
-
概括
-
下一步
背景
1 什么是 ROS 2 包?
一个包可以被认为是你的 ROS 2 代码的容器。如果您希望能够安装您的代码或与他人共享,那么您需要将其组织在一个包中。借助软件包,您可以发布您的 ROS 2 作品并允许其他人轻松构建和使用它。
ROS 2 中使用 ament 作为包编译构建系统,并使用 colcon 作为其构建工具。您可以使用官方支持的 CMake 或 Python 创建包,也有其他创建方式。
2 什么构成了 ROS 2 包?
ROS 2 Python 和 CMake 包都有自己的最低要求内容:
-
package.xml
包含有关包的元信息的文件 -
CMakeLists.txt
描述如何在包中构建代码的文件
最简单的包可能具有如下所示的文件结构:
my_package/ CMakeLists.txt package.xml
3 工作区中的包
一个工作区可以包含任意数量的包,每个包都在自己的文件夹中。您还可以在一个工作区(CMake、Python 等)中包含不同构建类型的包。但不能有嵌套的包!
最佳做法是在您的工作区中有一个src
文件夹,并在其中创建您的包。这会使工作区的顶层保持“干净”。
一个普通的工作区可能看起来像:
workspace_folder/ src/ package_1/ CMakeLists.txt package.xml package_2/ setup.py package.xml resource/package_2 ... package_n/ CMakeLists.txt package.xml
先决条件
按照上一教程中的说明进行操作后,您应该拥有一个 ROS 2 工作区。您将在此工作区中创建包。
任务
1 创建一个包
首先,记得先 source 你的ros2环境变量。
这里使用上一章节创建的 dev_ws
工作空间。
在运行包创建命令之前,请确保您位于该文件夹中。
cd ~/dev_ws/src
在 ROS 2 中创建新包的命令语法是:
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
现在,您的工作区目录中将有一个名为 my_package 的文件夹
.
运行命令后,终端将返回信息:
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
您可以看到为新包自动生成的文件。
2 构建一个包
将包放在工作区中特别有价值,因为您可以通过在工作区根目录中运行来一次构建许多包。否则,您将不得不单独构建每个包。
返回到工作区的根目录:
cd ~/dev_ws
现在你可以构建你的包了:
colcon build
回想一下上一教程,ros_tutorials
也在 dev_ws
中。您可能已经注意到也运行构建了这个包。当您的工作区中只有几个包时,这很好,但是当有很多包时,可能会花费很长时间。
下次只构建包 my_package ,你可以运行:
colcon build --packages-select my_package
3 获取安装文件
要使用您的新包和可执行文件,首先打开一个新终端并source 你的 ros2 源。
然后,从 dev_ws
目录内部运行以下命令来获取您的工作区:
. install/setup.bash
现在您的工作区已添加到您的路径中,您将能够使用新包的可执行文件。
4 使用包
要运行您在包创建期间使用参数创建的可执行文件--node-name
,请输入命令:
ros2 run my_package my_node
这将向您的终端返回一条消息:
hello world my_package package
5 检查包装内容
在 dev_ws/src/my_package
里面,你会看到自动生成的文件和文件夹:
CMakeLists.txt include package.xml src
my_node.cpp
在src
目录内。这是您所有自定义 C++ 节点将来的位置。
6 自定义 package.xml
您可能已经在创建包后的返回消息中注意到字段description
和license
包含TODO
注释。这是因为包描述和许可证声明不会自动设置,但如果您想要发布包,则它们是必需的。maintainer
字段可能也需要填写。
使用您喜欢的文本编辑器打开 dev_ws/src/my_package
/package.xml
<?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="cas5144@163.com">rust</maintainer>
<license>Apache License 2.0</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 行输入您的姓名和电子邮件。然后,编辑第 6 行的描述以总结包:
<description>Beginner client libraries tutorials practice package</description>
然后,在第 8 行更新许可证。您可以在此处阅读有关开源许可证的更多信息。
由于此包仅用于练习,因此使用任何许可证都是安全的。我们使用:Apache License 2.0
<license>Apache License 2.0</license>
完成编辑后不要忘记保存。
在许可证标签下方,您会看到一些以 . 结尾的标签名称_depend
。这是您package.xml
将列出它对其他包的依赖项的地方,供 colcon 搜索。my_package
很简单,没有任何依赖关系,但您会在接下来的教程中看到这个标签的使用。
你现在已经完成了!
概括
您已经创建了一个包来组织您的代码并使其易于为他人使用。
您的包会自动填充必要的文件,然后您使用 colcon 构建它,以便您可以在本地环境中使用它的可执行文件。文章来源:https://www.toymoban.com/news/detail-758690.html
下一步
接下来,让我们向包中添加一些有意义的东西。您将从一个简单的发布者/订阅者系统开始,您可以选择用C++或Python编写它。文章来源地址https://www.toymoban.com/news/detail-758690.html
到了这里,关于【ROS2指南-11】创建ROS2功能包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!