要将catkin包装视为catkin包装,必须满足以下要求:
该软件包必须包含符合catkin的package.xml文件。
该package.xml文件提供有关软件包的元信息。
程序包必须包含使用catkin的CMakeLists.txt。
如果它是catkin元包,则必须具有相关的样板CMakeLists.txt文件。
每个程序包必须有自己的文件夹
这意味着没有嵌套软件包,也没有多个软件包共享同一目录。
最简单的包可能具有如下结构:
my_package /
CMakeLists.txt
package.xml
推荐的使用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_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工作区中构建软件包:
$ cd〜/ catkin_ws
$ catkin_make
构建工作空间后,它在devel子文件夹中创建了一个与通常在/ opt / ros / $ ROSDISTRO_NAME下找到的结构类似的结构。
要将工作空间添加到您的ROS环境中,您需要获取生成的安装文件:
$〜/ catkin_ws / devel / setup.bash
一阶依赖
较早使用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)
本教程的这一部分将研究catkin_create_pkg生成的每个文件,并逐行描述这些文件的每个组件,以及如何为软件包自定义它们。
自定义package.xml
生成的package.xml应该在您的新软件包中。现在,让我们浏览新的package.xml并修饰所有需要注意的元素。
描述标签
首先更新描述标签:
切换行号显示
5 beginner_tutorials程序包 description>
将描述更改为您喜欢的任何内容,但按照惯例,第一句话应简短,同时涵盖程序包的范围。如果很难用一个句子来描述软件包,则可能需要将其分解。
维护者标签
接下来是维护者标签:
切换行号显示
7 <!-需要一个维护者标签,允许多个,每个标签一个人->
8 <!-例如:->
9 <!-简Doe maintainer>->
10 用户 maintainer>
这是package.xml的必需且重要的标记,因为它使其他人知道有关该软件包的联系人。至少需要一个维护者,但是如果您愿意,可以有很多。维护者的名称进入标签的主体,但还应填写一个电子邮件属性:
切换行号显示
7 您的姓名 maintainer>
许可证标签
接下来是许可证标签,这也是必需的:
切换行号显示
12 <!-需要一个许可证标签,允许多个许可证,每个标签一个许可证->
13 <!-常用的许可证字符串:->
14 <!-BSD,MIT,Boost软件许可,GPLv2,GPLv3,LGPLv2.1,LGPLv3->
15 TODO license>
您应该选择一个许可证并在此处填写。一些常见的开源许可证是BSD,MIT,Boost软件许可证,GPLv2,GPLv3,LGPLv2.1和LGPLv3。您可以在“ 开源倡议”中阅读其中的一些内容。在本教程中,我们将使用BSD许可证,因为其他核心ROS组件已经使用了它:
切换行号显示
8 BSD license>
依赖标签
下一组标记描述了程序包的依赖性。的依赖分成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 build_depend>->
32 <!-使用buildtool_depend来构建工具包:->
33 <!- catkin buildtool_depend>->
34 <!-对运行时所需的软件包使用exec_depend:->
35 <!- python-yaml exec_depend>->
36 <!-对仅用于测试的软件包使用test_depend:->
37 <!- gtest test_depend>->
38 catkin buildtool_depend>
39 roscpp build_depend>
40 rospy build_depend>
41 std_msgs build_depend>
我们所有的上市依赖性已被添加作为build_depend对我们来说,除了默认buildtool_depend的柳絮。在这种情况下,我们希望所有指定的依赖项在构建和运行时都可用,因此我们还将为它们每个添加一个exec_depend标记:
切换行号显示
12 catkin buildtool_depend>
13
14 roscpp build_depend>
15 rospy build_depend>
16 std_msgs build_depend>
17
18 roscpp exec_depend>
19 rospy exec_depend>
20 std_msgs exec_depend>
最终的package.xml
如您所见,没有注释和未使用标签的最终package.xml更加简洁:
1 <?xml version =“ 1.0”?>
2
3 beginner_tutorials name>
4 0.1.0 version>
5 beginner_tutorials程序包 description>
6
7 您的姓名 maintainer>
8 BSD license>
9 http://wiki.ros.org/beginner_tutorials url>
10 简Doe author>
11
12 catkin buildtool_depend>
13
14 roscpp build_depend>
15 rospy build_depend>
16 std_msgs build_depend>
17
18 roscpp exec_depend>
19 rospy exec_depend>
20 std_msgs exec_depend>
21
22 package>