本节的重点是使用catkin创建一个包(也可以使用rospack_create,这里不讲解),并讲解如何使用rospack来列出包。
*包必须包含package.xml文件,它是提供包的元信息的(前面说过)。
*包必须包含CMakeLists.txt文件,catkin提供这个文件的模板,后期根据自己需要修改。
*每个包是独立的文件夹中,不允许嵌套。
类似的包结构如下图:
使用catkin包的推荐方法使使其在一个catkin workspace中,但是也可以独立的编译一个包,一个正常的工作空间可能如下图架构:
$ cd ~/catkin_ws/src //这个源码目录是在创建工作空间时创建的
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
这将会创建一个名为beginner_tutorials的包,包中包括packages.xml和CMakeList.txt文件,并且已经根据给出的创建信息填充了部分文件。
catkin_create_pkg需要给出包的名字和可选地给出包的依赖,依赖项可以在以后手动添加到package.xml中。
$ cd catkin_ws //切换到工作空间顶层目录
$ catkin_make //make
在编译完成后,如果之前没有配置当前工作空间相关信息到ROS环境变量中,则需要执行以下:
$ . ~/catkin_ws/devel/setup.bash
这里就类似安装ROS时将/opt/ros/jade/setup.bash添加到shell启动脚本一样。一个是在shell中建立ROS环境变量,一个是将当前工作空间变量信息添加到ROS环境变量中。
并不是每次catkin_make后都需要执行这个脚本,从建立工作空间后一次就够了。
可以使用rospack工具的depends1(1指一级依赖)选项查看包的一级依赖:
$ rospack depends1 beginner_tutorials
//会看到以下一级依赖
std_msgs
rospy
roscpp
可以看出来,这些依赖和我们使用catkin_create_okg创包时使用的参数一样,这些依赖都在packages.xml中:
$ roscd beginner_tutorials
$ cat package.xml
//会看到如下内容
...
catkin
roscpp
rospy
std_msgs
...
每个依赖包都可能有很多自己的依赖,rospack可以使用depends选项递归地列出所有嵌套的依赖:
$ rospack depends beginner_tutorials
//会看到很多依赖
std_msgs
rospy
roscpp
...
...
...
package.xml文件位于包目录中,它是catkin生成的,我们需要根据我们的实际情况来修改该文件:
The beginner_tutorials package
这里填写包的基本描述信息
维护信息很重要,当你的包在网上流传,那么使用者会通过该信息来联系你。
一个包可能会有多个维护者,那么每个维护者占用一条消息。
Toggle line numbers
7
8
9
10 "[email protected]">user
许可标签十分重要,它描述了你的包具有什么样的权限。
Toggle line numbers
12
13
14
15 TODO
依赖分为4种: build_depend, buildtool_depend, run_depend, test_depend. 在xml文件中都有体现,如下:
12 catkin
13
14 roscpp
15 rospy
16 std_msgs
17
18 roscpp
19 rospy
20 std_msgs
27
28
29
30
31
32
33
34
35
36
37
38 catkin
39 roscpp
40 rospy
41 std_msgs
把注释和未使用的标签清除后,简洁的package.xml文件如下:
"1.0"?>
beginner_tutorials
0.1.0
The beginner_tutorials package
"[email protected]">Your Name
BSD
"website">http://wiki.ros.org/beginner_tutorials
"[email protected]">Jane Doe
catkin
roscpp
rospy
std_msgs
roscpp
rospy
std_msgs
经过以上的步骤我们已经定制完成了属于我们自己包的package.xml文件,接下来我们要修改CMakeList.txt文件,并构建我们的包。看下一节教程。