机器人操作系统(ROS)教程7:创建一个ROS的包
本帖最后由 对折之内 于 2015-2-11 18:44 编辑上一节教程介绍了如何创建工作空间,并多次提到了ROS的包。那么什么是包呢?一个包主要由以下几部分组成:(1)必须包括一个package.xml文件,(2)必须包括一个CMakeLists.txt文件,(3)在每一个文件夹下只能有一个包,且包不允许嵌套。包就是存在于工作空间下,由很多代码文件组成的具有一定功能的集合(找不到合适的词了,联想到了很多乱七八糟的东西被打成一包。。)。一个最简单的包类似于如下的形式:my_package/
CMakeLists.txt
package.xml
接着你可以在包的文件夹下创建装各种源文件的文件夹。如我的包:
在我的包下建立了两个文件夹来分别放launch文件和urdf文件。
接着来介绍如何在工作空间中创建一个包。
首先输入:cd ~/catkin_ws/src
进入我们之前创建的空的工作空间。
接着输入catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
可以创建一个名字为beginner_tutorials的包,它直接依赖于后面的三个包:std_msgs,rospy以及roscpp。
进入beginner_tutorials的文件夹可以看到package.xml和CMakeLists.txt。
使用catkin_create_pkg命令的时候,要求你给出包的名字,及选择性的给出所创建的包依赖于哪一个包。它的使用方法如下:
catkin_create_pkg <package_name>
这样,我们的一个包就创建好了,我们可能会需要对包之间的依赖性做一下解释。我们可以使用rospack命令来查看包之间的依赖关系,输入:
rospack depends1 beginner_tutorials
会看到返回:roscpp
rospy
std_msgs
可以看到,返回的结果正是我们使用catkin_create_pkg时,所使用的参数。我们还可以直接在beginner_tutorials包下的package.xml中查看包的依赖关系。使用命令:roscd beginner_tutorials
和cat package.xml
就可以看到 beginner_tutorials包里package.xml文件的内容。如下:
<package>
...
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
...
</package>
每个包里的package.xml文件记录了本包与其他包的依赖关系。
在通常情况下,一个包所依赖的包又会依赖许多其它的包,这称为间接依赖。我们使用如下命令来查看rospy依赖的包:rospack depends1 rospy
返回的结果如下:genpy
rosgraph
rosgraph_msgs
roslib
std_msgs
一个包可以有很多的间接依赖关系,我们可以使用命令:
rospack depends beginner_tutorials
来进行查看。返回beginner_tutorials包所有的间接依赖关系。结果如下:cpp_common
rostime
roscpp_traits
roscpp_serialization
genmsg
genpy
message_runtime
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
catkin
rospack
roslib
rospy
接下来配置package.xml文件。我们先来一个标签一个标签的分析一下xml文件。<description>The beginner_tutorials package</description>
description标签,这个标签中的内容可以改变为任何的内容,一般是对这个包的一个简述,尽量简单就行。
<maintainer email="user@todo.todo">user</maintainer>
maintainer标签,这是一个很重要的标签,因为根据这个标签可以知道它的维护者,另外标签的email属性也是必须的,(留下联系方式,方便交流?)可有多个maintainer标签。
<license>TODO</license>
license标签。不知道是拿来干嘛的。在后面的使用中,一般将license修改为BSD。
接下来就是主体的依赖性的标签:<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
我们向里面添加了run_depend:
<run_depend>roscpp</run_depend>
<run_depend>rospy</run_depend>
<run_depend>std_msgs</run_depend>
到此,package.xml已经配置好了。
页:
[1]