上一节:3. 为Catkin创建工作区 https://mp.csdn.net/postedit/89311286
下一节:5. 在工作区中构建和使用Catkin包 https://mp.csdn.net/postedit/89313323
Note: This tutorial assumes that you have completed the previous tutorials: Creating a workspace for catkin.
4. 创建ROS包
参考官网:http://wiki.ros.org/catkin/Tutorials/CreatingPackage
Description: How to create a new ROS package using catkin.
01. 什么组成了一个catkin Package?
要将包装视为catkin Package,它必须满足以下几个要求:
-
The package must contain a catkin compliant package.xml file.
- 该package.xml文件提供有关包的元信息。
-
The package must contain a CMakeLists.txt which uses catkin.
-
如果是catkin metapackage (http://wiki.ros.org/catkin/package.xml#Metapackages),则必须具有相关的样板文件cmakelists.txt文件。
-
- Each package must have its own folder
- 这意味着没有嵌套包,也没有多个包共享同一目录。
最简单的包可能具有如下结构:
my_package/
CMakeLists.txt
package.xml
02. Catkin工作区中的包
使用catkin包的推荐方法是使用catkin工作区,但也可以独立构建catkin包。一个普通的工作区可能如下所示:
workspace_folder/ -- WORKSPACE
src/ -- SOURCE SPACE
CMakeLists.txt -- 'Toplevel' CMake file, provided by catkin
package_1/
CMakeLists.txt -- CMakeLists.txt file for package_1
package.xml -- Package manifest for package_1
...
package_n/
CMakeLists.txt -- CMakeLists.txt file for package_n
package.xml -- Package manifest for package_n
在继续本教程之前,请按照“为catkin创建工作空间”教程创建空的catkin工作空间。http://wiki.ros.org/catkin/Tutorials/create_a_workspace
见上节:https://mp.csdn.net/postedit/89311286
03. 创建Catkin包
本教程将演示如何使用catkin_create_pkg(http://wiki.ros.org/catkin/commands/catkin_create_pkg)脚本创建新的catkin包,以及在创建后可以如何使用它。
首先更改为在“为Catkin创建工作空间”教程中创建的Catkin工作空间的源空间目录:
# 您应该在“创建工作空间”教程中创建了这个。
$ cd ~/catkin_ws/src
现在使用catkin_create_pkg脚本创建一个名为“beginner_tutorials”的新包,该包依赖于std_msgs、roscpp和rospy:
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
这将创建一个“beginner_tutorials”文件夹,其中包含package.xml和cmakelists.txt,其中部分内容是您提供的catkin_create_pkg信息。
catkin_create_pkg要求您给它一个包名称和一个包依赖的依赖项列表:
# This is an example, do not try to run this
# catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
catkin_create_pkg还具有更高级的功能,如catkin/commands/catkin_create_pkg中所述。http://wiki.ros.org/catkin/commands/catkin_create_pkg
04. 构建Catkin工作区并获取设置文件
现在,您需要在Catkin工作区中构建包:
$ cd ~/catkin_ws
$ catkin_make
在构建工作空间之后,它在devel子文件夹中创建了一个类似的结构,您通常可以在/opt/ros/$rosdistro_name下找到。
要将工作区添加到ROS环境,您需要源代码生成的安装文件:
$ . ~/catkin_ws/devel/setup.bash
05.包依赖项
(1) 一阶相关性
以前使用catkin_create_pkg时,提供了一些包依赖项。现在可以使用rospack工具查看这些一阶依赖项。
$ rospack depends1 beginner_tutorials
roscpp
rospy
std_msgs
如您所见,rospack列出了运行catkin_create_pkg时用作参数的相同依赖项。包的这些依赖项存储在package.xml文件中:
$ roscd beginner_tutorials
$ cat package.xml
<package format="2">
...
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
...
</package>
(2) 间接依赖关系
在许多情况下,依赖项也有自己的依赖项。例如,Rospy有其他依赖项。
$ rospack depends1 rospy
输出:
genpy
roscpp
rosgraph
rosgraph_msgs
roslib
std_msgs
一个包可以有相当多的间接依赖项。幸运的是,rospack可以递归地确定所有嵌套的依赖项。
$ rospack depends beginner_tutorials
cpp_common
rostime
roscpp_traits
roscpp_serialization
catkin
genmsg
genpy
message_runtime
gencpp
geneus
gennodejs
genlisp
message_generation
rosbuild
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
ros_environment
rospack
roslib
rospy
06. 自定义包
本教程的这一部分将查看catkin_create_pkg生成的每个文件,并逐行描述这些文件的每个组件,以及如何为您的包定制它们。
(1) 自定义package.xml
生成的package.xml应该在新包中。现在,让我们浏览一下新的package.xml并修补任何需要注意的元素。
(01) 描述标签
首先更新描述标签:
<description>The beginner_tutorials package</description>
将描述更改为您喜欢的任何内容,但是按照惯例,第一句话应该简短,同时涵盖包的范围。如果很难用一句话来描述这个包裹,那么它可能需要被分解。
(02) 维护标签
接下来是Maintainer标签:
<!-- One maintainer tag required, multiple allowed, one person per tag -->
<!-- Example: -->
<!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
<maintainer email="user@todo.todo">user</maintainer>
这是package.xml的一个必需且重要的标记,因为它让其他人知道该包的联系人。至少需要一个维护人员,但是如果您愿意,您可以有很多。维护者的名字进入标签的主体,但也有一个电子邮件属性需要填写:
<maintainer email="you@yourdomain.tld">Your Name</maintainer>
(03)许可证标签
接下来是许可证标签,这也是必需的:
<!-- One license tag required, multiple allowed, one license per tag -->
<!-- Commonly used license strings: -->
<!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
<license>TODO</license>
你应该选择一个许可证并在这里填写。一些常见的开源许可证包括BSD、MIT、Boost软件许可证、GPLv2、GPLv3、LGPLv2.1和LGPLv3。您可以在开源计划中阅读其中的一些内容。对于本教程,我们将使用BSD许可证,因为其他核心ROS组件已经使用了它:
<license>BSD</license>
(04)依赖项标记
下一组标记描述了包的依赖性。依赖项分为构建依赖项、构建工具依赖项、执行依赖项、测试依赖项。有关这些标记的更详细说明,请参阅有关catkin(http://wiki.ros.org/catkin/package.xml#Build.2C_Run.2C_and_Test_Dependencies)依赖项的文档。由于我们将std_msgs、roscpp和rospy作为参数传递给catkin_create_pkg,依赖项将如下所示:
<!-- The *_depend tags are used to specify dependencies -->
<!-- Dependencies can be catkin packages or system dependencies -->
<!-- Examples: -->
<!-- Use build_depend for packages you need at compile time: -->
<!-- <build_depend>genmsg</build_depend> -->
<!-- Use buildtool_depend for build tool packages: -->
<!-- <buildtool_depend>catkin</buildtool_depend> -->
<!-- Use exec_depend for packages you need at runtime: -->
<!-- <exec_depend>python-yaml</exec_depend> -->
<!-- Use test_depend for packages you need only for testing: -->
<!-- <test_depend>gtest</test_depend> -->
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
除了默认的buildtool依赖于catkin之外,所有列出的依赖项都已添加为build_dependent for us。在这种情况下,我们希望所有指定的依赖项在构建和运行时都可用,因此我们还将为每个依赖项添加exec_dependent标记:
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
(05)最终package.xml
正如您所看到的,没有注释和未使用的标记的最终package.xml更加简洁:
<?xml version="1.0"?>
<package format="2">
<name>beginner_tutorials</name>
<version>0.1.0</version>
<description>The beginner_tutorials package</description>
<maintainer email="you@yourdomain.tld">Your Name</maintainer>
<license>BSD</license>
<url type="website">http://wiki.ros.org/beginner_tutorials</url>
<author email="you@yourdomain.tld">Jane Doe</author>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
</package>
自定义cmakelists.txt
现在的package.xml元,其中包含的信息,已被定制到您的包,你是准备继续在教程。在cmakelists.txt文件创建 catkin_create_pkg (http://wiki.ros.org/catkin/commands/catkin_create_pkg)的在以后的教程将覆盖在ROS的代码建设。
Next: Building and using catkin packages in a workspace
在工作区中构建和使用Catkin包