ros学习日志(2)-CreatingPackage

Creating a ROS Package由什么组成?

要将catkin包装视为catkin包装,必须满足以下要求:

该软件包必须包含符合catkin的package.xml文件。
    该package.xml文件提供有关软件包的元信息。 

程序包必须包含使用catkin的CMakeLists.txt。

    如果它是catkin元包,则必须具有相关的样板CMakeLists.txt文件。
每个程序包必须有自己的文件夹
    这意味着没有嵌套软件包,也没有多个软件包共享同一目录。 

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

my_package /
  CMakeLists.txt
  package.xml

catkin工作区中的软件包

推荐的使用catkin软件包的方法是使用catkin工作区,但您也可以独立构建catkin软件包。一个琐碎的工作区可能看起来像这样:

workspace_folder /-工作空间
  src /-源空间
    CMakeLists.txt-由catkin提供的'顶级'CMake文件
    package_1 /
      CMakeLists.txt-package_1的CMakeLists.txt文件
      package.xml-package_1的软件包清单
    ...
    package_n /
      CMakeLists.txt-package_n的CMakeLists.txt文件
      package.xml-package_n的软件包清单

创建一个catkin功能包

本教程将演示如何使用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要求您给它一个package_name以及一个可选的软件包依赖关系的列表:

#这是一个示例,请勿尝试运行
#catkin_create_pkg <程序包名称> [depend1] [depend2] [depend3]

建立一个catkin工作区并获取安装文件

现在,您需要在catkin工作区中构建软件包:

$ cd〜/ catkin_ws
$ catkin_make

构建工作空间后,它在devel子文件夹中创建了一个与通常在/ opt / ros / $ ROSDISTRO_NAME下找到的结构类似的结构。

要将工作空间添加到您的ROS环境中,您需要获取生成的安装文件:

$〜/ catkin_ws / devel / setup.bash

5.包依赖

一阶依赖

较早使用catkin_create_pkg时,提供了一些软件包依赖项。 现在可以使用rospack工具查看这些一阶依赖项

$ rospack depends1 beginner_tutorials 

提示 :

[rospack] Error: no such package beginner_tutorials

后来弄明白了,原来在我新建工程后,忘记了source 一下。

$ source devel/setup.bash

再次

[rospack] Error: the rosdep view is empty: call 'sudo rosdep init' and 'rosdep update'

解决方法

$ sudo rosdep init
sudo: rosdep:找不到命令
$sudo apt install python-rosdep2
$ sudo rosdep init
ERROR: cannot download default sources list from:
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.

https://blog.csdn.net/qq_33466661/article/details/107046438?%3E

rosdep update中途超时报错等错误解决办法
rosdep update出错:一直timed out
更改 /usr/lib/python2.7/dist-packages/rosdep2/下的三个文件sources_list.py、gbpdistro_support.py、rep3.py
中的DOWNLOAD_TIMEOUT = 15.0值,改大一点就可以了。
操作如下

sudo vim /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
sudo vim /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
sudo vim /usr/lib/python2.7/dist-packages/rosdep2/rep3.py

如您所见,rospack列出了运行catkin_create_pkg时用作参数的依赖项。 程序包的这些依赖项存储在package.xml文件中:

$ roscd beginner_tutorials
$ cat package.xml

...
  catkin
  roscpp
  rospy
  std_msgs
...

显示查看文件内容(cat filename)

6.定制包装

本教程的这一部分将研究catkin_create_pkg生成的每个文件,并逐行描述这些文件的每个组件,以及如何为软件包自定义它们。

自定义package.xml

生成的package.xml应该在您的新软件包中。现在,让我们浏览新的package.xml并修饰所有需要注意的元素。
描述标签

首先更新描述标签:

切换行号显示

   5    beginner_tutorials程序包

将描述更改为您喜欢的任何内容,但按照惯例,第一句话应简短,同时涵盖程序包的范围。如果很难用一个句子来描述软件包,则可能需要将其分解。

维护者标签

接下来是维护者标签:

切换行号显示

   7   <!-需要一个维护者标签,允许多个,每个标签一个人-> 
   8   <!-例如:-> 
   9   <!-简Doe -> 
  10   用户

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

切换行号显示

   7   您的姓名

许可证标签

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

切换行号显示

  12   <!-需要一个许可证标签,允许多个许可证,每个标签一个许可证-> 
  13   <!-常用的许可证字符串:-> 
  14   <!-BSD,MIT,Boost软件许可,GPLv2,GPLv3,LGPLv2.1,LGPLv3-> 
  15    TODO 

您应该选择一个许可证并在此处填写。一些常见的开源许可证是BSD,MIT,Boost软件许可证,GPLv2,GPLv3,LGPLv2.1和LGPLv3。您可以在“ 开源倡议”中阅读其中的一些内容。在本教程中,我们将使用BSD许可证,因为其他核心ROS组件已经使用了它:

切换行号显示

   8    BSD 

依赖标签

下一组标记描述了程序包的依赖性。的依赖分成build_depend,buildtool_depend,exec_depend,test_depend。有关这些标签的详细说明,请参阅有关Catkin依赖关系的文档。由于我们将std_msgs,roscpp和rospy作为参数传递给catkin_create_pkg,因此依赖项如下所示:

切换行号显示

  27   <!-* _depend标记用于指定依赖关系-> 
  28   <!-依赖性可以是catkin软件包或系统依赖性-> 
  29   <!-示例:-> 
  30   <!-对编译时所需的软件包使用build_depend:-> 
  31   <!- genmsg -> 
  32   <!-使用buildtool_depend来构建工具包:-> 
  33   <!- catkin -> 
  34   <!-对运行时所需的软件包使用exec_depend:-> 
  35   <!- python-yaml -> 
  36   <!-对仅用于测试的软件包使用test_depend:-> 
  37   <!- gtest -> 
  38    catkin  
  39    roscpp  
  40    rospy  
  41    std_msgs 

我们所有的上市依赖性已被添加作为build_depend对我们来说,除了默认buildtool_depend的柳絮。在这种情况下,我们希望所有指定的依赖项在构建和运行时都可用,因此我们还将为它们每个添加一个exec_depend标记:

切换行号显示

  12    catkin  
  13 
  14    roscpp  
  15    rospy  
  16    std_msgs  
  17 
  18    roscpp  
  19    rospy  
  20    std_msgs 

最终的package.xml

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

   1 <?xml version =“ 1.0”?> 
   2  
   3    beginner_tutorials  
   4    0.1.0  
   5    beginner_tutorials程序包 
   6 
   7   您的姓名 
   8    BSD  
   9    http://wiki.ros.org/beginner_tutorials  
  10   简Doe  
  11 
  12    catkin  
  13 
  14    roscpp  
  15    rospy  
  16    std_msgs  
  17 
  18    roscpp  
  19    rospy  
  20    std_msgs  
  21 
  22 

你可能感兴趣的:(ROS学习)