ROS工作空间,功能包,package.xml

1.什么是工作空间

  • 工作空间(workspace)是一个存放工程开发相关文件的文件夹。
  • src:代码空间(SourceSpace),放置package源代码包
  • build:编译空间(Build Space),放置编译产生的缓存和中间文件
  • devel:开发空间(Development Space),放置编译完成之后的可执行文件,环境变量,脚本等

2.创建工作空间(catkin workspace)

$ mkdir -p ~/catkin_ws/src               #创建建工作空间
$ cd ~/catkin_ws/                        #回到工作空间,catkin_make必须在工作空间下执行
$catkin_make                             #开始编译
$source ~/catkin_ws/devel/setup.bash

注意: catkin编译之前需要回到工作空间目录,catkin_make在其他路径下编译不会成功。编译完成后,如果有新的目标文件产生(原来没有),那么一般紧跟着要source设置环境变量,使得系统能够找到刚才编译生成的ROS可执行文件。但是这个命令只会在当前的终端生效,在新的终端里此环境变量的设置不起效果。所以最好把这个设置环境变量的命令放在整个终端的配置文件里去:

$ vim ~/.bashrc
$source ~/catkin_ws/devel/setup.bash      #放在最后一行
$ source ~/.bashrc                        #刷新环境,使上步的设置在当前终端生效
$ echo $ROS_PACKAGE_PATH                  #检测设置的环境变量是否生效

3.创建功能包(package)
package是catkin工作空间的基本单元,是ROS源代码存放的地方,一个package可以编译出来多个目标文件(ROS可执行程序、动态静态库、头文件等等)。一个功能包必需满足以下三个条件:
package必需包含 package.xml 文件,它描述package的包名、版本号、作者、依赖等基本信息
package必需包含 CMakeLists.txt 文件,它定义package的包名、依赖、源文件、目标文件等编译规则
每个package必需是一个单独的文件夹,不允许几个package文件夹嵌套在一起

$ cd ~/catkin_ws/src                        #功能包必需在工作空间src文件夹下

$ catkin_create_pkg learning_communication std_msgs rospy roscpp         #创建功能包catkin_create_pkg <package_name> 
[depend1] [depend2] [depend3]

 $ cd ~/catkin_ws                           #编译功能包

 $ catkin_make

 $ source ~/catkin_ws/devel/setup.bash      #由于前面已经在终端中设置了环境变量,故此处可不再设置

4.功能包依赖项
功能包依赖项含有功能包本身的一级依赖项(First-order dependencies),和依赖的间接依赖项(Indirect dependencies):

$rospack depends1 <package_name>            #包含在package.xml的功能包一级依赖项
$rospack depends1 <depend>                  #功能包依赖的间接依赖项
$rospack depends <package_name>             #功能包包括间接依赖项在内的所有依赖项

5.package.xml的写法

  1. 描述标签,首先用简练的语言更新描述标签

    5 <description>The <package_name>/anything package</description>

  2. 维护者标签

    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>
  1. 许可整标签
   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>
  1. 依赖项标签,依赖项标签分为:build_depend,buildtool_depend,,exec_depend,test_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 exec_depend for packages you need at runtime: -->
   35   <!--   <exec_depend>python-yaml</exec_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>
   42
   43   <exec_depend>roscpp</exec_depend>
   44   <exec_depend>rospy</exec_depend>
   45   <exec_depend>std_msgs</exec_depend>
  1. 最终package.xml文件,去除说明性和没实际用处的标签,最终package.xml文件如下
    1 <?xml version="1.0"?>
    2 <package format="2">
    3   <name>beginner_tutorials</name>
    4   <version>0.1.0</version>
    5   <description>The beginner_tutorials package</description>
    6 
    7   <maintainer email="you@yourdomain.tld">Your Name</maintainer>
    8   <license>BSD</license>
    9   <url type="website">http://wiki.ros.org/beginner_tutorials</url>
   10   <author email="you@yourdomain.tld">Jane Doe</author>
   11 
   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   <exec_depend>roscpp</exec_depend>
   19   <exec_depend>rospy</exec_depend>
   20   <exec_depend>std_msgs</exec_depend>
   21 
   22 </package>

6.工作空间的覆盖机制

  • 工作空间的路径依次在ROS_PACKAGE_PATH环境变量中记录
  • 新设置的路径在ROS_PACKAGE_PATHZ中会自动放置在最前端
  • 运行时,ROS会优先查找最前端的工作空间中是否存在指定的功能包
  • 如果不存在,就顺序向后查找其他工作空间
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值