ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 3 创建一个ROS包

1. 创建一个包

本节的重点是使用catkin创建一个包(也可以使用rospack_create,这里不讲解),并讲解如何使用rospack来列出包。

2. caktin包的组成

*包必须包含package.xml文件,它是提供包的元信息的(前面说过)。
*包必须包含CMakeLists.txt文件,catkin提供这个文件的模板,后期根据自己需要修改。
*每个包是独立的文件夹中,不允许嵌套。
类似的包结构如下图:
这里写图片描述

3.catkin工作空间中的包结构

使用catkin包的推荐方法使使其在一个catkin workspace中,但是也可以独立的编译一个包,一个正常的工作空间可能如下图架构:
这里写图片描述

4. 创建一个catkin包

4.1 step1 切换到工作空间的源码目录:

$ cd ~/catkin_ws/src      //这个源码目录是在创建工作空间时创建的

4.2 step2 使用catkin_create_pkg创建包

$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

这将会创建一个名为beginner_tutorials的包,包中包括packages.xml和CMakeList.txt文件,并且已经根据给出的创建信息填充了部分文件。
catkin_create_pkg需要给出包的名字和可选地给出包的依赖,依赖项可以在以后手动添加到package.xml中。

5. 编译catkin工作空间、执行setup脚本

$ cd catkin_ws     //切换到工作空间顶层目录
$ catkin_make  //make

在编译完成后,如果之前没有配置当前工作空间相关信息到ROS环境变量中,则需要执行以下:

$ . ~/catkin_ws/devel/setup.bash

这里就类似安装ROS时将/opt/ros/jade/setup.bash添加到shell启动脚本一样。一个是在shell中建立ROS环境变量,一个是将当前工作空间变量信息添加到ROS环境变量中。
并不是每次catkin_make后都需要执行这个脚本,从建立工作空间后一次就够了。

6. 包依赖

6.1 一级依赖

可以使用rospack工具的depends1(1指一级依赖)选项查看包的一级依赖:

$ rospack depends1 beginner_tutorials
//会看到以下一级依赖
std_msgs
rospy
roscpp

可以看出来,这些依赖和我们使用catkin_create_okg创包时使用的参数一样,这些依赖都在packages.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可以使用depends选项递归地列出所有嵌套的依赖:

$ rospack depends beginner_tutorials
//会看到很多依赖
std_msgs
rospy
roscpp
...
...
...

7. 定制自己的包

7.1 定制package.xml文件

package.xml文件位于包目录中,它是catkin生成的,我们需要根据我们的实际情况来修改该文件:

7.1.1 修改描述标签

 <description>The beginner_tutorials package</description>
 <description>这里填写包的基本描述信息</description>

7.1.2 修改维护信息

维护信息很重要,当你的包在网上流传,那么使用者会通过该信息来联系你。
一个包可能会有多个维护者,那么每个维护者占用一条消息。

Toggle line numbers 
   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.3 修改许可标签

许可标签十分重要,它描述了你的包具有什么样的权限。

Toggle line numbers 
  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>

7.1.4 修改依赖标签

依赖分为4种: build_depend, buildtool_depend, run_depend, test_depend. 在xml文件中都有体现,如下:

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>

  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>

7.1.5 最终的package.xml文件

把注释和未使用的标签清除后,简洁的package.xml文件如下:

<?xml version="1.0"?>
<package>
  <name>beginner_tutorials</name>
  <version>0.1.0</version>
  <description>The beginner_tutorials package</description>

  <maintainer email="you@yourdomain.tld">Your Name</maintainer>
  <license>BSD</license>
  <url type="website">http://wiki.ros.org/beginner_tutorials</url>
  <author email="you@yourdomain.tld">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>

</package>

7.2 定制CMakeList.txt文件

经过以上的步骤我们已经定制完成了属于我们自己包的package.xml文件,接下来我们要修改CMakeList.txt文件,并构建我们的包。看下一节教程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值