ROS入门核心教程学习笔记4

上一节: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  [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

...
  catkin
  roscpp
  rospy
  std_msgs
...

(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) 描述标签

首先更新描述标签:

The beginner_tutorials package

将描述更改为您喜欢的任何内容,但是按照惯例,第一句话应该简短,同时涵盖包的范围。如果很难用一句话来描述这个包裹,那么它可能需要被分解。

(02) 维护标签

接下来是Maintainer标签:

  
  
  
  user

这是package.xml的一个必需且重要的标记,因为它让其他人知道该包的联系人。至少需要一个维护人员,但是如果您愿意,您可以有很多。维护者的名字进入标签的主体,但也有一个电子邮件属性需要填写:

Your Name

(03)许可证标签

接下来是许可证标签,这也是必需的:


  
  
  TODO

你应该选择一个许可证并在这里填写。一些常见的开源许可证包括BSD、MIT、Boost软件许可证、GPLv2、GPLv3、LGPLv2.1和LGPLv3。您可以在开源计划中阅读其中的一些内容。对于本教程,我们将使用BSD许可证,因为其他核心ROS组件已经使用了它:

BSD

(04)依赖项标记

下一组标记描述了包的依赖性。依赖项分为构建依赖项、构建工具依赖项、执行依赖项、测试依赖项。有关这些标记的更详细说明,请参阅有关catkin(http://wiki.ros.org/catkin/package.xml#Build.2C_Run.2C_and_Test_Dependencies)依赖项的文档。由于我们将std_msgs、roscpp和rospy作为参数传递给catkin_create_pkg,依赖项将如下所示:


  
  
  
  
  
  
  
  
  
  
  catkin
  roscpp
  rospy
  std_msgs

除了默认的buildtool依赖于catkin之外,所有列出的依赖项都已添加为build_dependent for us。在这种情况下,我们希望所有指定的依赖项在构建和运行时都可用,因此我们还将为每个依赖项添加exec_dependent标记:

 catkin

  roscpp
  rospy
  std_msgs

  roscpp
  rospy
  std_msgs

(05)最终package.xml

正如您所看到的,没有注释和未使用的标记的最终package.xml更加简洁:



  beginner_tutorials
  0.1.0
  The beginner_tutorials package

  Your Name
  BSD
  http://wiki.ros.org/beginner_tutorials
  Jane Doe

  catkin

  roscpp
  rospy
  std_msgs

  roscpp
  rospy
  std_msgs

自定义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包

 

你可能感兴趣的:(ROS)