Beginner:Client libraries-3 创建一个包

发布时间 2023-06-02 11:10:26作者: gary_123

目标:使用CMake或者Python来创建一个新的包,运行可执行程序;

背景

1、ROS2的包是什么

一个包是作为ROS2代码的组织单元。如果你想安装你的代码或与他人共享,那么你需要将其组织在一个包中。有了软件包,您可以发布您的ROS 2作品,并允许其他人轻松构建和使用它。

在ROS2中包的创建使用ament作为它的编译系统,然后colcon作为它的编译工具。您可以使用官方支持的CMake或Python创建包,尽管也存在其他构建类型。

2、ROS2包由什么组成

ROS 2 Python和CMake软件包都有自己的最低要求内容:

CMake

CMakeLists.txt文件描述了怎样编译包中的代码;

include/<package_name>目录包含包中的公用头文件;

package.xml文件包含有关包的元信息;

src目录包含包中源代码;

最简单的包,如下所示:

my_package/
     CMakeLists.txt
     include/my_package/
     package.xml
     src/

3、工作空间中的包

一个工作区可以包含任意多个包,每个包都位于各自的文件夹中。

你也可以在一个工作区中有不同构建类型的包(CMake、Python等)。你不能有嵌套的包。

工作空间看起来如下:

workspace_folder/
    src/
      cpp_package_1/
          CMakeLists.txt
          include/cpp_package_1/
          package.xml
          src/

      py_package_1/
          package.xml
          resource/py_package_1
          setup.cfg
          setup.py
          py_package_1/
      ...
      cpp_package_n/
          CMakeLists.txt
          include/cpp_package_n/
          package.xml
          src/

 

任务

1、创建一个包

首先,source你的ros2安装目录

c++版本
ros2 pkg create --build-type ament_cmake <package_name>
python版本
ros2 pkg create --build-type ament_python <package_name>

--node-name指定节点的名字

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

会自动生成以下的信息

going to create a new package
package name: my_package
destination directory: /home/user/ros2_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、编译包

编译所有的包

colcon build

编译指定的包

colcon build --packages-select my_package

3、source setup文件

source install/local_setup.bash

你的工作空间已经添加到了你的path,可以使用新的包了。

4、使用package

ros2 run my_package my_node

会出现如下信息

hello world my_package package

5、检查包的内容

6、自定义package.xml

在创建包的时候,会返回description,license以及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="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>
比如
<description>Beginner client libraries tutorials practice package</description>
<license>Apache License 2.0</license>

总结

创建了一个包用于组织你的代码,并且于其他人容易使用;

您的包自动填充了必要的文件,然后您使用colcon构建它,以便在本地环境中使用它的可执行文件。