zoukankan      html  css  js  c++  java
  • 创建一个ROS包

    先前笔者不知道catkin到底是个什么东东,后来终于在官方网站上找到了答案,原来catkin是ROS的一个官方的编译构建系统,是原本的ROS的编译构建系统rosbuild的后继者。catkin的来源有点复杂,我们可以慢慢的讲一下其中的渊源。ROS来源于Willow Garage这个公司,他们希望借助开源的力量,使ROS发扬光大。而在英语中,willow的意思是柳树,catkin是柳絮的意思,为了纪念的作用吧,因而为这个软件命名为catkin。

         这篇博客的主要内容是介绍如何使用catkin创建一个ROS包。一个catkin的包主要有以下几部分组成:(1)必须包括一个package.xml文件,(2)必须包括一个CMakeLists.txt文件,(3)在每一个文件夹下只能有一个包,且包不允许嵌套。一个最简单的包类似于如下的形式:

    my_package/
      CMakeLists.txt
      package.xml

    官网上推荐在catkin工作空间中使用catkin包,当然也可以独立使用catkin包,一个典型的工作空间结构如下:

    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

    我们之前已经创建过一个空的工作空间:catkin_ws,下面我们来看一下如何在一个工作空间中创建一个包。在创建一个catkin包时需要使用catkin_create_pkg脚本。

    首先进入到目录~/catkin_ws/src下,使用如下命令:

    cd ~/catkin_ws/src

    接着创建一个名字为beginner_tutorials的包,它直接依赖于以下三个包:std_msgs,rospy以及roscpp,使用如下命令:

    catkin_create_pkg 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

    可以看到,返回的结果正是我们使用catkin_create_pkg时,所使用的参数。我们还可以直接在beginner_tutorials包下的package.xml中查看包的依赖关系。使用命令:

    roscd beginner_tutorials
    cat 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>

    在通常情况下,一个包所依赖的包又会依赖许多其它的包,这称为间接依赖。我们使用如下命令来查看rospy依赖的包:

    rospack depends1 rospy

    返回结果如下:

    genpy
    rosgraph
    rosgraph_msgs
    roslib
    std_msgs

    一个包可以有很多的间接依赖关系,我们可以使用命令:

    rospack depends 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标签:

    <description>The beginner_tutorials package</description>

    在这个标签中的内容可以改变为任何的内容,不过一般是对这个包的一个简述,尽量简单就行。

    接下来是maintainer标签:

    <!-- One maintainer tag required, multiple allowed, one person per tag --> 
      <!-- Example:  -->
      <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
      <maintainer email="user@todo.todo">user</maintainer>

    这是一个很重要的标签,因为可以根据这个标签知道它的维护者,另外标签的email属性也是必须的,可有多个maintainer标签。

    接下来是license标签:

    <!-- One license tag required, multiple allowed, one license per tag -->
      <!-- Commonly used license strings: -->
      <!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
      <license>TODO</license>

    在后面的使用中,一般我们将license修改为BSD。

    接下来是依赖性的标签:

    <!-- The *_depend tags are used to specify dependencies -->
      <!-- Dependencies can be catkin packages or system dependencies -->
      <!-- Examples: -->
      <!-- Use build_depend for packages you need at compile time: -->
      <!--   <build_depend>genmsg</build_depend> -->
      <!-- Use buildtool_depend for build tool packages: -->
      <!--   <buildtool_depend>catkin</buildtool_depend> -->
      <!-- Use run_depend for packages you need at runtime: -->
      <!--   <run_depend>python-yaml</run_depend> -->
      <!-- Use test_depend for packages you need only for testing: -->
      <!--   <test_depend>gtest</test_depend> -->
      <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已经配置好了。

    注意:其中的<!--这里是注释内容-->,一个package.xml中其实没有多少东西,大部分的都是注释信息。

    总结:这部分主要讲解了ROS包的创建方法和包的依赖性的查询,同时讲解了包的清单文件package.xml的各个标签的意义。

  • 相关阅读:
    _bzoj1061 [Noi2008]志愿者招募【最小费用最大流】
    _bzoj2243 [SDOI2011]染色【树链剖分】
    _bzoj1013 [JSOI2008]球形空间产生器sphere【高斯消元】
    _bzoj1002 [FJOI2007]轮状病毒【瞎搞】
    leetcode 273 Integer to English Words
    leetcode 12 Integer to Roman
    leetcode 1071 Greatest Common Divisor of Strings
    lc6 ZigZag Conversion
    lc13 Roman to Integer
    leetcode 171 Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/stemon/p/4185475.html
Copyright © 2011-2022 走看看