本教程介绍如何使用roscreate-pkg或catkin创建新的ROS软件包,并使用rospack列出软件包的依赖关系。
一个catkin软件包由什么组成?
一个包要想称为catkin软件包,必须符合以下要求:
-
这个包必须有一个符合catkin规范的package.xml文件
-
这个package.xml文件提供有关该软件包的元信息
-
-
这个包必须有一个catkin版本的CMakeLists.txt文件
-
如果它是个Catkin元包的话,则需要有一个CMakeList.txt文件的相关样板
-
- 每个包必须有自己的目录
- 这意味着在同一个目录下不能有嵌套的或者多个软件包存在
最简单的软件包看起来就像这样:
my_package/ CMakeLists.txt package.xml
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
在继续本教程之前请先按照创建catkin工作空间教程创建一个空白的catkin工作空间。
创建catkin软件包
下面我们开始创建和构建一个catkin工作空间:
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make
catkin_make命令在catkin工作空间中是一个非常方便的工具。在你的工作空间中第一次运行它时,它会在src目录下创建一个CMakeLists.txt的链接。
对于ROS Melodic和早期版本的Python 3用户:注意,如果你从源代码构建ROS来实现Python 3的兼容性,并适当地设置您的系统(即:安装所有必需的ROS Python包的Python 3版本,例如catkin),那么在干净的catkin工作区中的第一个catkin_make命令必须是:
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
这将会配置catkin_make使用Python 3,在以后的构建中可以只使用catkin_make。
另外,如果你查看一下当前目录应该能看到build和devel这两个目录。在devel文件夹里面你可以看到几个setup.*sh文件。source这些文件中的任何一个都可以将当前工作空间设置在环境的最顶层。想要了解更多,请参考catkin文档。接下来首先source一下新生成的setup.*sh文件:
source devel/setup.bash
要保证工作区被安装脚本正确覆盖,需确定ROS_PACKAGE_PATH环境变量包含你当前的工作空间目录:
echo $ROS_PACKAGE_PATH /home/<username>/catkin_ws/src:/opt/ros/<distro>/share
切换到刚才创建的空白catkin工作空间中的源文件空间目录:
cd ~/catkin_ws/src
现在使用catkin_create_pkg命令创建一个名为beginner_tutorials的新软件包,这个软件包依赖于std_msgs、roscpp和rospy:
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
这将会创建一个名为beginner_tutorials的文件夹,这个文件夹里面包含一个package.xml文件和一个CMakeLists.txt文件,这两个文件都已经部分填写了你在执行catkin_create_pkg命令时提供的信息。
catkin_create_pkg命令会要求你输入package_name,如有需要还可以在后面添加一些需要依赖的其它软件包:
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
catkin_create_pkg命令也有更多的高级功能,这些功能在catkin/commands/catkin_create_pkg中有描述。
构建一个catkin工作区并生效配置文件
现在你需要在catkin工作区中构建软件包:
cd ~/catkin_ws catkin_make
工作空间构建完成后,在devel子目录下创建了一个与你通常在/opt/ros/$ROSDISTRO_NAME下看到的目录结构类似的结构。
要将这个工作空间添加到ROS环境中,你需要source一下生成的配置文件:
. ~/catkin_ws/devel/setup.bash
软件包依赖关系
一级依赖
之前在使用catkin_create_pkg命令时提供了几个软件包作为依赖关系,现在我们可以使用rospack命令工具来查看这些一级依赖包。