zoukankan      html  css  js  c++  java
  • ROS学习笔记二(创建ROS软件包)

    catkin软件包的组成

    一个软件包必须满足如下条件才能被称之为catkin软件包:

        • 必须包含一个catkin编译文件package.xml(manifests文件),此文件包含了描述该软件包的重要信息
        • 必须包含一个catkin 版本的CMakeLists.txt文件,而Catkin metapackages中必须包含一个对CMakeList.txt文件的引用。
        • 每个目录下只能有一个程序包。 这意味着在同一个目录下不能有嵌套的或者多个程序包存在。
          最简单的可能的软件包可能有如下文件结构:
    my_package/
    CMakeLists.txt
    package.xml

    1.catkin工作空间中的程序包

    最好利用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

    1.创建程序包

    【1】先创建一个catkin 工作空间:(复习上一节)

    $ mkdir -p ~/catkin_ws2/src   //在home中创建catkin_ws2/src
    $ cd ~/catkin_ws2
    $ catkin_make
    $ source devel/setup.bash   //配置环境变量
    $ echo $ROS_PACKAGE_PATH   //检查工作空间是否已配置环境变量

    【2】创建一个catkin程序包catkin_create_pkg命令)

    cd ~/catkin_ws2/src
    catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

    依赖于std_msgs、rospy、roscpp在src目录下创建一个名为beginner_tutorials的catkin软件包,这将会创建一个名称为beginner_tutorials的包含CMakeLists.txt和package.xml文件的文件夹,及src文件夹和include文件夹但是此时都是空的。(catkin_create_pkg命令要求提供软件包名称和可选择的一系列软件包的依赖。 )
    注意:软件包命名惯例是—以小写字母开头,只能包含小写字母和数字以及下划线,不符合规则的软件包名称将不能编译通过。

    安装树枝干 sudo apt-get install tree,为了更清楚显示。

    wj@wj-Inspiron-5437:~/catkin_ws2/src/beginner_tutorials$ tree
    .
    ├── CMakeLists.txt
    ├── include
    │   └── beginner_tutorials
    ├── package.xml
    └── src

    3 directories, 2 files

    2.编译catkin工作空间(程序包)

    按照之前的应该已经创建好了一个catkin 工作空间 和一个beginner_tutorials的catkin 程序包。

    进行编译:

    wj@wj-Inspiron-5437:~/catkin_ws2
    $ catkin_make
    Base path: /home/wj/catkin_ws2
    Source space: /home/wj/catkin_ws2/src
    Build space: /home/wj/catkin_ws2/build
    Devel space: /home/wj/catkin_ws2/devel
    Install space: /home/wj/catkin_ws2/install
    ####
    #### Running command: "cmake /home/wj/catkin_ws2/src -DCATKIN_DEVEL_PREFIX=/home/wj/catkin_ws2/devel -DCMAKE_INSTALL_PREFIX=/home/wj/catkin_ws2/install -G Unix Makefiles" in "/home/wj/catkin_ws2/build"
    ####
    -- Using CATKIN_DEVEL_PREFIX: /home/wj/catkin_ws2/devel
    -- Using CMAKE_PREFIX_PATH: /home/wj/catkin_ws2/devel;/opt/ros/indigo
    -- This workspace overlays: /home/wj/catkin_ws2/devel;/opt/ros/indigo
    -- Using PYTHON_EXECUTABLE: /usr/bin/python
    -- Using Debian Python package layout
    -- Using empy: /usr/bin/empy
    -- Using CATKIN_ENABLE_TESTING: ON
    -- Call enable_testing()
    -- Using CATKIN_TEST_RESULTS_DIR: /home/wj/catkin_ws2/build/test_results
    -- Found gtest sources under '/usr/src/gtest': gtests will be built
    -- Using Python nosetests: /usr/bin/nosetests-2.7
    -- catkin 0.6.18
    -- BUILD_SHARED_LIBS is on
    -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    -- ~~  traversing 1 packages in topological order:
    -- ~~  - beginner_tutorials
    -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    -- +++ processing catkin package: 'beginner_tutorials'
    -- ==> add_subdirectory(beginner_tutorials)
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/wj/catkin_ws2/build
    ####
    #### Running command: "make -j4 -l4" in "/home/wj/catkin_ws2/build"
    ####

    前面几行是编译文件的基本信息,每个空间所在的路径。

    3.软件包依赖

    【1】直接依赖

    (利用rospack工具可以查看这些直接依赖。)

    $ source devel/setup.bash
    $ rospack depends1 beginner_tutorials
    roscpp
    rospy
    std_msgs

    可以看出rospack工具列出了在使用catkin_create_pkg命令的时候提供的依赖,这些信息存储在packa.xml文件中,可以cat package.xml查看。

    wj@wj-Inspiron-5437:~/catkin_ws2/src/beginner_tutorials$ cat package.xml

    【2】间接依赖:

    在很多情况下,我们会遇到依赖的依赖,即间接依赖。例如beginner_tutorials的依赖文件rospy也有其他依赖。 

    $ rospack depends1 rospy
    genpy
    roscpp
    rosgraph
    rosgraph_msgs
    roslib
    std_msgs

    如果我们使用rospack depends(没有阿拉伯数字1),则会列出catkin软件包的所有依赖文件

    wj@wj-Inspiron-5437:~/catkin_ws2$ rospack depends beginner_tutorials

    4.定制catkin软件包

    主要按照自己的需要更改package.xml文件和CMakeLists.txt文件

    【1】定制package.xml文件

    描述部分description

    <package>
      <name>beginner_tutorials</name>
      <version>0.0.0</version>
      <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="wj@todo.todo">wj</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>
    依赖部分dependencies

    依赖在这里被分为build_depend, buildtool_depend, run_depend, test_depend, 更加详细的信息见此link。当前package.xml中的依赖部分如下:

      <!-- 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>message_generation</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>message_runtime</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中添加那些依赖,结果如下:

    <buildtool_depend>catkin</buildtool_depend>
      <build_depend>roscpp</build_depend>
      <build_depend>rospy</build_depend>
      <build_depend>std_msgs</build_depend>
      <run_depend>roscpp</run_depend>
      <run_depend>rospy</run_depend>
      <run_depend>std_msgs</run_depend>

    最后完成的 package.xml

    现在看下面最后去掉了注释和未使用标签后的package.xml文件就显得更加简洁了:

    <?xml version="1.0"?>
    <package>
      <name>beginner_tutorials</name>
      <version>0.0.0</version>
      <description>The beginner_tutorials package</description>
    
      <maintainer email="wj@todo.todo">wj</maintainer>
      <license>TODO</license>
      <url type="website">http://wiki.ros.org/beginner_tutorials</url>
      <author email="jane.doe@example.com">Jane Doe</author> 
    
      <buildtool_depend>catkin</buildtool_depend>
    
      <build_depend>roscpp</build_depend>
      <build_depend>rospy</build_depend>
      <build_depend>std_msgs</build_depend>
    
      <run_depend>roscpp</run_depend>
      <run_depend>rospy</run_depend>
      <run_depend>std_msgs</run_depend>

    【2】定制CMakelists.txt文件

    3.总结

    • catkin软件包必要组成:package.xml和CMakeList.txt文件(src目录下)
    • 创建catkin软件包:catkin_create_pkg命令。
    • 编译catkin工作空间:catkin_make命令。
    • 查看ROS软件包依赖:rospack depends1查看直接依赖,rospack depends查看间接依赖。
    • 定制catkin软件包:修改文件package.xml和CMakeLists.txt。



  • 相关阅读:
    ASP.NET MVC3 中设置htmlAttribute
    oracle查看表空间的几个sql
    SQL Server 中 sysobjects表
    Openal简介
    [转]DBUSGLIB Binding,GLIB事件与DBUS事件是如何关联的
    ffmpeg简介
    ffmpeg安装FAAC
    ffserver error
    Openal教程(二)
    centos下安装qt时出现/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found
  • 原文地址:https://www.cnblogs.com/Jessica-jie/p/6520481.html
Copyright © 2011-2022 走看看