目标:使用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构建它,以便在本地环境中使用它的可执行文件。