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,它必须满足以下几个要求:

最简单的包可能具有如下结构:

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包

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值