机器人操作系统ROS Indigo 入门学习(4)——创建一个ROS Package

    xiaoxiao2021-03-25  50

     1.创建一个ROS Package

    这个教程包括使用roscreate-pkg或者catkin去创建一个新的package,以及使用rospack去列出package的依赖。

     

    2.catkin Package由什么组成

    一个package被认为是catkin packages必须满足这些要求:

    a.必须包含一个catkin compliant(编译) package.xml文件(提供关于package信息);

    b.必须包含一个使catkinCMakeLists.txt文件Catkin metapackages(package)必须有一个CMakeLists.txt样本文件;

    c.在一个文件夹中不允许有超过两个的package(这就着意味着没有其他packages共享这个目录)。

     

    这个简单的package可能像这个样子:

    my_package/

      CMakeLists.txt

      package.xml

    3.catkin工作空间中的Packages 

    推荐使用catkin packages 的方式是使用catkin工作空间,但是你也可以单独使用catkin建立packages。一般的工作空间看起来像这样:

    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

    4、创建一个catkin package

    这里将会用catkin_create_pkg脚本去创建一个新的catkin package

     

    首先去到你之前创建的工作空间目录:

     

    $ cd ~/catkin_ws/src

     

    catkin_create_pkg 脚本创建一个做'beginner_tutorials'package,它依赖于std_msgsroscpp,和roscpy

    命令:

    catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

     

    现在创建了一个 beginner_tutorials文件夹,包含有package.xml , CMakeLists.txt文件,其中部分填写了由提供catkin_create_pkg的信息

     

    catkin_create_pkg要求你提供一个package的名字和它所需要的依赖。

     

    catkin_create_pkgcatkin/commands/catkin_create_pkg.中有对更加高级功能的描叙。

     

    5.建立一个catkin工作空间并且启用setup 文件

    现在需要在catkin工作空间编译package。

    $ cd ~/catkin_ws

    $ catkin_make

    执行该命令后会在devel文件夹下生成一个和在/opt/ros/$ROSDISTRO_NAMEROS版本名这里是/opt/ros/indigo)下相似的结构。

    为把工作空间添加到ROS环境变量你需要执行:

    $ source ~/catkin_ws/devel/setup.bash

    使setup文件生效

     

    6.package 的依赖

    6.1第一层依赖

    catkin_create_pkg时,一些package提供了依赖。这些第一层依赖可以通过rospack工具重现。

     

    $ rospack depends1 beginner_tutorials 

     

    输出

    std_msgs

    rospy

    roscpp

    列出了运行catkin_create_pkg命令时的一些依赖,这些依赖储存在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>

     

    6.2间接依赖

    许多情况下,依赖也有它的依赖。

    比如:

     

    $ rospack depends1 rospy

     

    输出

    genpy

    rosgraph

    rosgraph_msgs

    roslib

    std_msgs

    rospack可以显示所有递归的嵌套依赖

    $ 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

     

     

    7.定制你的package

    这部分将教你怎样定制自己的package

     

    7.1定制package.xml

    package.xml包含在package

    7.1.1描叙标签

    首先更新描叙标签

    可以根据你的爱好改变description,但是最好短一些并且能够概括package

       7   <!-- One maintainer tag required, multiple allowed, one person per tag --> 

       8   <!-- Example:  -->

       9   <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->

      10   <maintainer email="user@todo.todo">user</maintainer>

     

    7.1.2维护者标签

    这个非常重要因为他可以让其他人知道和谁去交流这个package,这个维护者的名字会作为标签,邮箱也应该填写:

     7   <maintainer email="you@yourdomain.tld">Your Name</maintainer>

     

     

     

     

    7.1.协议标签

      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>

    选择一个协议填写。

     

       8   <license>BSD</license>

     

    通常用的一些协议是BSDMITBoost Software License, GPLv2, GPLv3, LGPLv2.1, and LGPLv3。可以在这里读到一些其他的开源协议。(http://opensource.org/licenses/alphabetical。这里作为新手教程,我选择BSD协议,因为ROS的其他核心部分已经遵从BSD协议了。

     

     

    7.1.4依赖标签

    一系列标签描叙依赖。这些依赖被分为build_dependbuildtool_dependrun_dependtest_depend。

     

      27   <!-- The *_depend tags are used to specify dependencies -->

      28   <!-- Dependencies can be catkin packages or system dependencies -->

      29   <!-- Examples: -->

      30   <!-- Use build_depend for packages you need at compile time: -->

      31   <!--   <build_depend>genmsg</build_depend> -->

      32   <!-- Use buildtool_depend for build tool packages: -->

      33   <!--   <buildtool_depend>catkin</buildtool_depend> -->

      34   <!-- Use run_depend for packages you need at runtime: -->

      35   <!--   <run_depend>python-yaml</run_depend> -->

      36   <!-- Use test_depend for packages you need only for testing: -->

      37   <!--   <test_depend>gtest</test_depend> -->

      38   <buildtool_depend>catkin</buildtool_depend>

      39   <build_depend>roscpp</build_depend>

      40   <build_depend>rospy</build_depend>

      41   <build_depend>std_msgs</build_depend>

     

    所有列出来的都是build_depend,除了之外,我们需要指定的所有依赖在buildrun time时都是可用的,我们需要增加run_depend标签在每个依赖后面

     

     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   <run_depend>roscpp</run_depend>

      19   <run_depend>rospy</run_depend>

      20   <run_depend>std_msgs</run_depend>

     

     

    7.1.5最终的package.xml

     

       1 <?xml version="1.0"?>

       2 <package>

       3   <name>beginner_tutorials</name>

       4   <version>0.1.0</version>

       5   <description>The beginner_tutorials package</description>

       6 

       7   <maintainer email="you@yourdomain.tld">Your Name</maintainer>

       8   <license>BSD</license>

       9   <url type="website">http://wiki.ros.org/beginner_tutorials</url>

      10   <author email="you@yourdomain.tld">Jane Doe</author>

      11 

      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   <run_depend>roscpp</run_depend>

      19   <run_depend>rospy</run_depend>

      20   <run_depend>std_msgs</run_depend>

      21 

      22 </package>

     

     

    7.2定制CMakeLists.txt

    含有信息的package.xml文件已经为你的package裁剪好了,接下来的教程将会讨论CMakeLists.txt文件。由catkin_create_pkg创建的CMakeLists.txt文件将会在下面的关于编译代码的教程中涉及.

    转载请注明原文地址: https://ju.6miu.com/read-40589.html

    最新回复(0)