在上一讲中我们已经创建好工作空间catkin_ws,我们要在其src文件中创建功能包。
文章目录
一、创建功能包
~$ cd ~/catkin_ws/src
$ catkin_create_pkg beginner_tutorials std_msgs roscpp rospy
catkin_create_pkg 是一条创建功能包的命令;
beginner_tutorials 是功能包的名字(可自定义);
std_msgs roscpp rospy 这是功能包的依赖。
可以看到现在这个功能包中有四部分(功能包可不止这四部分哦)。
include:此目录包含了需要的库的头文件;
src:储存程序源文件的地方;
package.xml:这是功能包清单;
CMakeLists.txt:这是CMake的生成文件。
二、编译功能包
$ cd〜/ catkin_ws
$ catkin_make
$ soure devel / setup.bash
三、查看功能包的依赖
3.1一阶依赖
较早使用catkin_create_pkg时,提供了一些软件包依赖项。 现在可以使用rospack工具查看这些一阶依赖项
$ rospack depends1 beginner_tutorials
如您所见,rospack列出了运行catkin_create_pkg时用作参数的依赖项。 程序包的这些依赖项存储在package.xml文件中:
$ roscd beginner_tutorials
$ cat package.xml
3.2间接依赖
在许多情况下,依赖项也将具有其自己的依赖项。例如,rospy具有其他依赖性。
$ rospack depends1 rospy
一个包可以有很多间接依赖。幸运的是,rospack可以递归确定所有嵌套的依赖项。
$ rospack depends beginner_tutorials
四、定制功能包
自定义package.xml文件
4.1.1 描述标签
5 <description> beginner_tutorials package</ description>
将描述更改为您喜欢的任何内容,但按照惯例,第一句话应简短,同时涵盖程序包的范围。
4.1.2 维护者标签
7 <!-- One maintainer tag required, multiple allowed, one person per tag -->
8 <!-- Example: -->
9 <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
10 <maintainer email="user@todo.todo">user</maintainer>
这是package.xml的必需且重要的标记,因为它使其他人知道有关该软件包的联系人。至少需要一个维护者,但是如果您愿意,可以有很多。维护者的名称进入标签的主体,但还应填写一个电子邮件属性:
7 <maintainer email="you@yourdomain.tld">Your Name</maintainer>
4.1.3 许可证标签
12 <!-- One license tag required, multiple allowed, one license per tag -->
13 <!-- Commonly used license strings: -->
14 <!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
15 <license>TODO</license>
4.1.4 依赖标签
下一组标记描述了程序包的依赖性。依赖分成build_depend,buildtool_depend,exec_depend,test_depend。因为我们通过std_msgs,roscpp和rospy作为功能包的依赖,其将是这样的:
27 <!-- The *_depend tags are used to specify dependencies -->
28 <!-- Dependencies can be catkin packages or system dependencies -->
29 <!-- Examples: -->
30 <!-- Use build_depend for packages you need at compile time: -->
31 <!-- <build_depend>genmsg</build_depend> -->
32 <!-- Use buildtool_depend for build tool packages: -->
33 <!-- <buildtool_depend>catkin</buildtool_depend> -->
34 <!-- Use exec_depend for packages you need at runtime: -->
35 <!-- <exec_depend>python-yaml</exec_depend> -->
36 <!-- Use test_depend for packages you need only for testing: -->
37 <!-- <test_depend>gtest</test_depend> -->
38 <buildtool_depend>catkin</buildtool_depend>
39 <build_depend>roscpp</build_depend>
40 <build_depend>rospy</build_depend>
41 <build_depend>std_msgs</build_depend>
除了默认的buildtool_depend on catkin之外,我们列出的所有依赖项都被添加为build_depend。在这种情况下,我们希望所有指定的依赖项都在构建和运行时可用,所以我们将为它们每个添加一个exec_depend标签:
12 <buildtool_depend>catkin</buildtool_depend>
13
14 <build_depend>roscpp</build_depend>
15 <build_depend>rospy</build_depend>
16 <build_depend>std_msgs</build_depend>
17
18 <exec_depend>roscpp</exec_depend>
19 <exec_depend>rospy</exec_depend>
20 <exec_depend>std_msgs</exec_depend>
4.1.5 最终的package.xml
如您所见,没有注释和未使用标签的最终package.xml更加简洁:
1 <?xml version="1.0"?>
2 <package format="2">
3 <name>beginner_tutorials</name>
4 <version>0.1.0</version>
5 <description>The beginner_tutorials package</description>
6
7 <maintainer email="you@yourdomain.tld">Your Name</maintainer>
8 <license>BSD</license>
9 <url type="website">http://wiki.ros.org/beginner_tutorials</url>
10 <author email="you@yourdomain.tld">Jane Doe</author>
11
12 <buildtool_depend>catkin</buildtool_depend>
13
14 <build_depend>roscpp</build_depend>
15 <build_depend>rospy</build_depend>
16 <build_depend>std_msgs</build_depend>
17
18 <exec_depend>roscpp</exec_depend>
19 <exec_depend>rospy</exec_depend>
20 <exec_depend>std_msgs</exec_depend>
21
22 </package>