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  
[depend1] [depend2] [depend3]

 $ cd ~/catkin_ws                           #编译功能包

 $ catkin_make

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

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

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

5.package.xml的写法

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

    5 The /anything package

  2. 维护者标签

    7    
    8   
    9   
   10   user
  1. 许可整标签
   12   
   13   
   14   
   15   TODO
  1. 依赖项标签,依赖项标签分为:build_depend,buildtool_depend,,exec_depend,test_depend
   27   
   28   
   29   
   30   
   31   
   32   
   33   
   34   
   35   
   36   
   37   
   38   catkin
   39   roscpp
   40   rospy
   41   std_msgs
   42
   43   roscpp
   44   rospy
   45   std_msgs
  1. 最终package.xml文件,去除说明性和没实际用处的标签,最终package.xml文件如下
    1 
    2 
    3   beginner_tutorials
    4   0.1.0
    5   The beginner_tutorials package
    6 
    7   Your Name
    8   BSD
    9   http://wiki.ros.org/beginner_tutorials
   10   Jane Doe
   11 
   12   catkin
   13 
   14   roscpp
   15   rospy
   16   std_msgs
   17 
   18   roscpp
   19   rospy
   20   std_msgs
   21 
   22 

6.工作空间的覆盖机制

  • 工作空间的路径依次在ROS_PACKAGE_PATH环境变量中记录
  • 新设置的路径在ROS_PACKAGE_PATHZ中会自动放置在最前端
  • 运行时,ROS会优先查找最前端的工作空间中是否存在指定的功能包
  • 如果不存在,就顺序向后查找其他工作空间

你可能感兴趣的:(ROS)