3.3 创建一个 ROS 功能包

本节主要介绍如何用 catkin 来创建一个新的功能包,并且使用前面介绍的 rospack 命令去查看功能包的依赖。

3.3.1 catkin 功能包的构成

  一个完整的 catkin 功能包需要具备以下几个条件:

  • 包含一个 package.xml 文件:该文件主要提供描述功能包的基础属性信息;
  • 包含一个 CMakeLists.txt 文件:该文件提供了功能包的编译规则;
  • 拥有独立的目录:这意味着没有嵌套功能包,也没有多个功能包共享同一目录。

  所以一个最简单的功能包应该是如下所示:

my_package/
  CMakeLists.txt
  package.xml

3.3.2 创建一个 catkin 功能包

  这里我们将演示如何使用 catkin_create_pkg 脚本创建一个新的catkin包,以及创建后的处理方法。catkin_create_pkg 的语法规则如下, package_name 是指功能包的名称, depend 是指该功能包编译所需要的依赖:

catkin_create_pkg  [depend1] [depend2] [depend3]

  首先进入我们之前创建的工作空间目录下的 src 目录中:

cd ~/catkin_ws/src

  然后使用 catkin_create_pkg 命令来创建一个名为 beginner_tutorial 的功能包,假设功能包会依赖 std_msgs , rospy ,roscpp 。

catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

3.3 创建一个 ROS 功能包_第1张图片

  根据上图 log 中的显示内容我们可以看到,这里创建了一个 beginner_tutorials 文件夹,其中包含package.xml和CMakeLists.txt,已经部分填充了一些功能包的描述信息。

3.3.3 编译功能包并设置环境

  进入工作空间目录,输入 catkin_make 命令即可完成对整个工作空间内所有功能包的编译。

cd ~/catkin_ws
catkin_make

3.3 创建一个 ROS 功能包_第2张图片

  为了能让 ROS 系统中的命令行工具能够找到我们自己创建的功能包,需要设置一下环境。这里我们再介绍一下 home 目录下的 .bashrc 这个文件,它其实是 shell 的配置文件,通俗一点讲也就是我们每次打开一个终端都会默认运行一次 .bashrc,我们使用 gedit 编辑器打开这个文件,看一下里面的内容:

gedit ~/.bashrc

3.3 创建一个 ROS 功能包_第3张图片

  大家看到最后一行应该有似曾相识的感觉了,这行命令是我们安装 ROS 并且设置环境变量(1.2.6节)时通过 echo 命令添加到 .bashrc 文件中的。所以通俗点描述就是每次打开终端都会默认执行一次 ROS 环境的设置,这也是就为什么我们每次打开终端后我们输入 ROS 相关的命名系统都能够理解。同样道理,我们希望每次打开终端后,系统也能够找到我们自己创建的 ROS 功能包的位置,那就需要再添加一行命令,如下所示:

  保存并退出,然后重新打开一个终端(这里要注意一点最好重新打开一个终端,否则当前终端启动的其实还是修改前的 .bashrc),即可完成环境配置。

3.3.4 功能包依赖

  前面我们使用 catkin_create_pkg 命令时,提供了一些功能包依赖项。 现在可以使用rospack工具查看这些一级依赖项,输入如下指令:

rospack depends1 beginner_tutorials 

3.3 创建一个 ROS 功能包_第4张图片

  如上图所示,rospack 列出了运行 catkin_create_pkg 时用作参数的依赖项。程序包的这些依赖项存储在 package.xml 文件中:

roscd beginner_tutorials
cat package.xml

3.3 创建一个 ROS 功能包_第5张图片

  很多情况下,依赖包本身也会依赖其他包,就像 rospy 本身也依赖多个包,这些依赖被称为 beginner_tutorials 的非直接依赖:

rospack depends1 rospy

3.3 创建一个 ROS 功能包_第6张图片

  一个包可以有很多间接依赖。rospack depends 不加任何参数项就可以递归列出所有嵌套的依赖项,如下所示:

rospack depends beginner_tutorials

3.3 创建一个 ROS 功能包_第7张图片

3.3.5 配置 package.xml

  接下来我们来看一下 catkin_create_pkg 生成的文件 package.xml,并逐行描述这些文件的每个组件,以及如何根据程序包定义它们。使用gedit打开 package.xml 文件:

roscd beginner_tutorials/
gedit package.xml 

3.3 创建一个 ROS 功能包_第8张图片

3.3.5.1 description

  将描述更改为您喜欢的任何内容,包括版本号以及功能包的简短描述。

3.3 创建一个 ROS 功能包_第9张图片

3.3.5.2 description

  这个标签是非常重要的,这里描述的是维护者的信息,如果我们这个功能包未来可能会分享给同学、同事或者开源社区,那么这个信息可以方便被分享人联系维护者。

3.3.5.3 license

  这部分需要填写一个许可证信息,一些常见的开源许可证是 BSD ,MIT ,Boost Software License,GPLv2,GPLv3,LGPLv2.1和LGPLv3等等。读者可以自行查询相关开源协议的说明,并选择一个适合自己的。这里我们选择 BSD 协议,因为 ROS 中的其他核心组件大部分也是采用的 BSD 协议。BSD 开源协议是一个给于使用者很大自由的协议,BSD 开源协议鼓励代码共享,但需要尊重代码作者的著作权。BSD 允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

3.3.5.4 dependencies

  这一组信息描述了功能包的依赖。后面的章节我们会对这些依赖展开更为详细的描述,读者在这里可以不做修改。

3.3 创建一个 ROS 功能包_第10张图片

总结

  最后我们把注释信息都删除掉,可以看到一个更简洁的 package.xml 文件。

3.3 创建一个 ROS 功能包_第11张图片

你可能感兴趣的:(ROS机器人操作系统,自动驾驶,机器人,ubuntu)