ROS学习-创建一个Package包

Package由什么组成?

每一个Package中都必须包括以下两个文件:

  • package.xml
    能够提供当前Package包的描述(元)信息

  • CMakeLists.txt
    如果它是一个catkin元包,它必须具有相关的样板文件CMakeLists.txt文件。

此外,每个Package包必须有其自己的文件夹,这就意味着没有嵌套的包,也不存在多个package包共享同一个文件夹。
最简单的package包可能结构如下所示:

my_package/
  CMakeLists.txt
  package.xml

工作空间的组成

(工作空间创建方法参考:ROS学习-创建一个工作空间

同时,假如在工作空间 Workspace下创建n个包package1、package2 … packagen,则整体文件结构如下所示:

workspace_folder/        -- WORKSPACE
  src/                   -- SOURCE SPACE
    CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
    package_1/
      CMakeLists.txt     -- CMakeLists.txt file for package_1
      package.xml        -- Package manifest for package_1
    ...
    package_n/
      CMakeLists.txt     -- CMakeLists.txt file for package_n
      package.xml        -- Package manifest for package_n

创建一个package包

首先,使用cd切换到工作空间的src文件夹下。

cd ~/catkin_ws/src

使用catkin_create_pkg命令,创建一个package包,同时这个包依赖于std_msgs rospy roscpp等ros包。

catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

即其用法为:

catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

接着,我们回到src文件夹的上一级目录,即工作空间catkin_ws中,使用catkin_make对工作空间中的package包进行编译

catkin_make

查看package包的依赖

我们在上述创建beginner_tutorials包时依赖了std_msgs rospy roscpp等常用的ros包,可以通过rospack命令进行查看。

rospack depends1 beginner_tutorials 

注意这个depends1是指的是beginner_tutorials所直接依赖的包,即我们在catkin_create_pkg命令创建时所指定的包,返回结果应该如下所示:

roscpp
rospy
std_msgs

同时上述的roscpp、rospy、std_msgs等包也都依赖于其他包,比如我们使用:

rospack depends1 rospy

可以查看得到rospy所依赖的包包括:

genpy
roscpp
rosgraph
rosgraph_msgs
roslib
std_msgs

上述这些rospy所依赖的包都是beginner_tutorials的间接依赖包,那我们怎么知道beginner_tutorials所有的间接依赖包呢?
可以通过rospack depends(depends1变为depends)来进行查看:
输入命令:

rospack depends beginner_tutorials

返回结果:

cpp_common
rostime
roscpp_traits
roscpp_serialization
catkin
genmsg
genpy
message_runtime
gencpp
geneus
gennodejs
genlisp
message_generation
rosbuild
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
ros_environment
rospack
roslib
rospy

package.xml文件的描述

description tag(这是一个描述性的tag)

<description>The beginner_tutorials package</description>

这一部分的内容可以由我们自主设定,通过一句简单的描述来说明包的内容和功能就行了。

maintainer tag(说明这个包的维护者,或者说作者,让使用者可以联系到你)

   7   <!-- One maintainer tag required, multiple allowed, one person per tag --> 
   8   <!-- Example:  -->
   9   <!-- <maintainer email="[email protected]">Jane Doe</maintainer> -->
  10   <maintainer email="[email protected]">user</maintainer>

把email和名字替换成我们自己的就可以。

license tag(包的许可满足什么开源政策)

  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>

因为我们依赖的包是BSD,所以这里我们也是相同的。

 <license>BSD</license>

dependencies.tag(对自定义包所依赖包的描述)

  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>

最终一个通用的package.xml文件形式如下:

<?xml version="1.0"?>
<package format="2">
  <name>beginner_tutorials</name>
  <version>0.1.0</version>
  <description>The beginner_tutorials package</description>

  <maintainer email="[email protected]">Your Name</maintainer>
  <license>BSD</license>
  <url type="website">http://wiki.ros.org/beginner_tutorials</url>
  <author email="[email protected]">Jane Doe</author>

  <buildtool_depend>catkin</buildtool_depend>

  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>

  <exec_depend>roscpp</exec_depend>
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>

</package>

Guess you like

Origin blog.csdn.net/wxc_1998/article/details/121307027