catkin软件包的组成
一个软件包必须满足如下条件才能被称之为catkin软件包:
-
-
- 必须包含一个catkin编译文件package.xml(manifests文件),此文件包含了描述该软件包的重要信息。
- 必须包含一个文件,而中必须包含一个对CMakeList.txt文件的引用。
- 每个目录下只能有一个程序包。 这意味着在同一个目录下不能有嵌套的或者多个程序包存在。 最简单的可能的软件包可能有如下文件结构:
-
my_package/CMakeLists.txtpackage.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/srccatkin_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工作空间(程序包)
按照之前的应该已经创建好了一个 和一个beginner_tutorials的catkin 程序包。
进行编译:
wj@wj-Inspiron-5437:~/catkin_ws2 $ catkin_make
Base path: /home/wj/catkin_ws2Source space: /home/wj/catkin_ws2/srcBuild space: /home/wj/catkin_ws2/buildDevel space: /home/wj/catkin_ws2/develInstall 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 rospygenpyroscpprosgraphrosgraph_msgsroslibstd_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
beginner_tutorials 0.0.0 The beginner_tutorials package
维护者部分maintainer
wj 至少需要一个维护者的信息,但是也可以添加多个。维护者的名字在类别的内容之中,邮箱在类别的属性之中。
许可证部分license
TODO
依赖部分dependencies
依赖在这里被分为build_depend, buildtool_depend, run_depend, test_depend, 更加详细的信息见此。当前package.xml中的依赖部分如下:
catkin roscpp rospy std_msgs
我们想在编译和运行的时候都能够获得这些依赖,所以需要在run_depend中添加那些依赖,结果如下:
catkin roscpp rospy std_msgs roscpp rospy std_msgs
最后完成的 package.xml
现在看下面最后去掉了注释和未使用标签后的文件就显得更加简洁了:
beginner_tutorials 0.0.0 The beginner_tutorials package wj TODO http://wiki.ros.org/beginner_tutorials Jane Doe catkin roscpp rospy std_msgs roscpp rospy std_msgs
【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。