机器人操作系统(ROS)教程7:创建一个ROS的包-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9605|回复: 0

机器人操作系统(ROS)教程7:创建一个ROS的包

[复制链接]
发表于 2015-2-11 18:44 | 显示全部楼层 |阅读模式
本帖最后由 对折之内 于 2015-2-11 18:44 编辑

上一节教程介绍了如何创建工作空间,并多次提到了ROS的包。那么什么是包呢?一个包主要由以下几部分组成:(1)必须包括一个package.xml文件,(2)必须包括一个CMakeLists.txt文件,(3)在每一个文件夹下只能有一个包,且包不允许嵌套。包就是存在于工作空间下,由很多代码文件组成的具有一定功能的集合(找不到合适的词了,联想到了很多乱七八糟的东西被打成一包。。)。一个最简单的包类似于如下的形式:
my_package/  
  CMakeLists.txt  
  package.xml  

接着你可以在包的文件夹下创建装各种源文件的文件夹。如我的包:

图像 1.png
在我的包下建立了两个文件夹来分别放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> [depend1] [depend2] [depend3]  

  这样,我们的一个包就创建好了,我们可能会需要对包之间的依赖性做一下解释。我们可以使用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文件的内容。如下:
[mw_shl_code=c,true]
<package>  
...  
  <buildtool_depend>catkin</buildtool_depend>  
  <build_depend>roscpp</build_depend>  
  <build_depend>rospy</build_depend>  
  <build_depend>std_msgs</build_depend>  
...  
</package>  [/mw_shl_code]

每个包里的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文件。[mw_shl_code=c,true]<description>The beginner_tutorials package</description>  [/mw_shl_code]
description标签,这个标签中的内容可以改变为任何的内容,一般是对这个包的一个简述,尽量简单就行。
[mw_shl_code=c,true]<maintainer email="user@todo.todo">user</maintainer>  [/mw_shl_code]
maintainer标签,这是一个很重要的标签,因为根据这个标签可以知道它的维护者,另外标签的email属性也是必须的,(留下联系方式,方便交流?)可有多个maintainer标签。
[mw_shl_code=c,true]<license>TODO</license>  [/mw_shl_code]
license标签。不知道是拿来干嘛的。在后面的使用中,一般将license修改为BSD。
接下来就是主体的依赖性的标签:[mw_shl_code=c,true]<buildtool_depend>catkin</buildtool_depend>  
<build_depend>roscpp</build_depend>  
<build_depend>rospy</build_depend>  
<build_depend>std_msgs</build_depend>  [/mw_shl_code]

我们向里面添加了run_depend:
[mw_shl_code=c,true]<run_depend>roscpp</run_depend>  
  <run_depend>rospy</run_depend>  
  <run_depend>std_msgs</run_depend>  [/mw_shl_code]
到此,package.xml已经配置好了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 10:37 , Processed in 0.285767 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表