本教程介绍了catkin的HFS文件夹布局,有助于读者理解catkin包的各个空间概念。至于为什么选择deepin而不是ROS通用的ubuntu,也仅仅是为了支持国产系统。鉴于本人水平有限,如哪位攻城狮网友发现本文存在的问题,烦请留言指正,谢谢!
摘要
REP为文档和调试过程中如何引用计算机路径提供了命名约定
基本原理
编写这个REP的目的是为了读写文档更容易,统一,并消除交流过程中的歧义。
推荐布局
workspace_folder/ --工作区
src/ --源码空间
CMakeLists.txt --catkin/cmake/toplevel.cmake的一个链接
package_1/
CMakeLists.txt
package.xml
...
package_n/
CATKIN_IGNORE --可选标记,用于告知不处理package_n,此文件的类型[目录,常规文件均可]不重要,甚至可以是一个悬空的链接.
CMakeLists.txt
package.xml
build/ --编译空间,在此空间调用构建系统,不一定在工作区中
CATKIN_IGNORE --标记此文件夹在构建遍历时可忽略。在源码空间在于工作区顶层目录时,此文件要为空。
devel/ --开发空间
bin/
etc/
include/
lib/
share/
.catkin --标记该目录是开发空间,此文件包含用分号分隔的源码空间路径列表
env.bash
setup.bash
setup.sh
...
install/ --安装空间,已安装文件所在位置,不一定在工作区中
bin/
etc/
include/
lib/
share/
.catkin --标记此文件夹为安装空间,文件是空的
env.bash
setup.bash
setup.sh
...
工作区中的元素
当谈到工作区时有以下几个名称:
- 工作区-workspace:工作空间是您要在其中进行开发的文件夹。此目录保存与开发有关的文件有助于保持开发模型的分离。
- 源码空间 source space:catkin会在源码空间所在目录查找要构建的包。这个目录在工作区的顶层目录,并存储toplevbel.cmake[即包顶层的CMakeLists.txt]。每个希望catkin从源码编译的包都必须是这个目录的子目录。
- 构建空间 build space:是调用cmake生成CMakeCache等工作目录的文件夹.典型的cmake调用方式如下:
cmake ../src
-
开发空间 development space:开发空间是在安装前生成的二进制文件和库存放的目录。此目录近似于FHS布局,但是只包含来自源码空间的文件。在构建完成后,此文件夹将包含运行已构建包中节点所需要的所有文件。开发空间不能是包含ROS包的文件夹。
-
安装空间 install space:如果调用了cmake install,cmake将所有要安装的文件复制到此目录。可以使用-DCMAKE_INSTALL_PREFIX=作为cmake选项将其安装空间设置为任何目录。cmake的默认值是/usr/local/。安装空间和开发空间也不能嵌套。
- 系统安装空间[system install space]:系统安装空间是安装空间的一个特例,它期望所有用户都可共享安装。通常默认值是/opt/ros/ROSDISTRO
-
结果空间 result space:结果空间也可用作开发空间或者安装空间。从视觉来区分的话,结果空间仅仅是有result-space。建议在文档中将结果空间成为result-space.例如
shell source RESULT-SPACE/setup.bash
overlay
catkin风格的工作空间,可将一个工作空间叠加在另外一个工作空间上面,任何在高覆盖层的包会掩盖低覆盖层的包。
**注意:**覆盖任何包时,依赖此包的所有包都会被覆盖。创建叠加的时候必须检查此选项。catkin在devel和install使用FHS风格布局。使用指向devel或者install空间的CMAKE_PREFIX_PATH可以将这些空间包含到另一个工作空间中。如果是一个安装空间必须调用make install ,devel空间必须调用make
示例
假设在家目录下有如下几个工作空间
~/workspace1/
src/
build/
devel/
~/workspace2/
src/
build/
devel/
~/workspace3/
src/
build/
devel/
示例1
安装workspace1到系统中
# 方法1
export CMAKE_INSTALL_PREFIX=/opt/ros/groovy
cd ~/workspace1/build
cmake ../src
make
make install
# 方法2
cd ~/workspace1/build
cmake -DCMAKE_INSTALL_PREFIX=/opt/ros/groovy ../src
make
make install
示例2
将worksapce2叠加在workspace1的devel空间上
source ~/workspace1/devel/setup.bash
cd ~/workspace2/build
cmake ../src
make
示例3
将workspace2叠加到workspace1的devel空间,再叠加到系统安装空间
source ~/workspace1/devel/setup.bash
cd ~/workspace2/build
cmake ../src
make
示例4
将workspace 3叠加在本地workspace2之上,将workspace安装在workspace1之上,将devel space安装在系统安装之上
cd ~/workspace2/build
cmake -DCMAKE_INSTALL_PREFIX=~/ws2_installed ../src
make
make install
source ~/ws2_installed/setup.bash
cd ~/workspace3/build
cmake ../src
make