工作空间建立及初始编译
创建和初始编译工作空间:
$ mkdir -p ~/catjin_ws/src
$ cd ~/catkin_ws/
$ catkin_make
catkin_make命令是用于处理catkin工作空间的便利工具 。使用mkdir命令创建文件夹,这样所需的工作空间创建完毕;接下来进入catkin_ws文件夹内,第一次运行catkin_make命令,该命令会在src文件夹内创建一个CMakeList.txt文件;同时会在catkin_ws文件夹内创建两个同级别文件夹“built”和“devel”。在“devel”文件夹中,您可以看到现在有几个setup.* sh文件。运行这些文件中的任何一个都会将此工作区覆盖在您的环境之中。要了解更多相关信息,请参阅catkin文档:catkin。当使用catkin_make后,请先运行devel/setup.* sh文件:
$ suorce /devel/setup.bash
运行此脚本确保当前工作环境包含新建立的工作空间。可以使用$ROS_PACKAGE_PATH查看当前环境是否包含:
$ echo $ROS_PACKAGE_PATH
/home/(lee)/catkin_ws/src:/opt/ros/kinetic/share
工作空间使用 :
在工作空间如何将源码使用catkin_make工具编译和安装packages?有两种方法编译工作空间中的源码及部署源码:
1、使用catkin_make
使用catkin_make编译及部署源代码非常方便,典型工作流程是:
$ cd ~/catkin_ws/src/yousource/src
# 添加或者编辑你的源代码
$ cd ~/catkin_ws/src/yousource
#添加或者更改源代码后,需要更新CMakeFiles.txt ,以保证正确编译
$ cd ~/catkin_ws
$ catkin_make -DCMAKE_BUILD_TYPE = Release
#具体cmake编译类型可查阅(http://cmake.org/cmake/help/v2.8.12/cmake.html#variable:CMAKE_BUILD_TYPE)
这将在源空间(〜/ catkin_ws / src)中构建任意包到编译空间(〜/ catkin_ws / build)。任何源文件,python库,脚 本或任何静态文件都将保留在源空间中;同时,任何生成的文件(如库,可执行文件或生成的代码)都将放在编译空间 中。此外,在devel空间中将生成setup。* sh文件,这些文件在获取时将为您的环境添加此devel空间的前缀。
如果你想要传递给catkin_make的参数。例如,您可以告诉它制作安装目标:
$ cd ~/catkin_ws
$ catkin_make install
这相当于调用'cd~ / catkin_ws / build && make install'。运行以上命令后,现在应该有一个安装空间(〜/ catkin_ws / install),它包含自己的setup.* sh文件。获取其中一个setup.* sh文件会将此安装空间覆盖到您的环境中。
到目前为止,我们既有devel空间又有install空间,那么请注意,应该使用devel空间或install空间,而不是同时使用两 者。当在工作区中的包上进行开发时,开发空间很有用,因为不必每次都调用安装目标,这在使用Python开发或运行测试时 特别有用。
当准备在工作区中分发或“安装”软件包时,安装空间很有用。例如,从源代码构建ROS时,可以使用“安装”目标将 CMake参数'-DCMAKE_INSTALL_PREFIX = / opt / ros / groovy'传递给catkin_make:
# This is an example
$ cd ~/catkin_ws
$ catkin_make install -DCMAKE_INSTALL_PREFIX=/opt/ros/groovy # 可能需要sudo
如果有一个以前编译过的工作区并且在其中添加了一个新包,则可以通过添加以下参数告诉catkin将此新包添加到已编 译的二进制文件中:
$ catkin_make --force-cmake
如果要查看用于运行编译器和链接器的命令行,请使用以下选项运行catkin_make:
$ catkin_make -DCMAKE_VERBOSE_MAKEFILE=ON
1.1.1使用catkin_make的局限性
所有命令都作为CMake和make的一部分执行,并使用与调用相同的环境。使用rostest运行一个例子。如果测试本 身依赖于Python代码,假如生成的代码的路径与PYTHONPATH路径不一致。这时catkin_make没有提供解决此问题的机 制。这个问题有两种解决方法:
1、手动解决:catkine_make, devel/setup.bash,catkin_make run_tests三个步骤。
2、使用catkin_make_isolated:catkin_make_isolated,catkin_make_isolated --make-args run_tests
2、不使用catkin_make
1、创建build文件夹:
$ mkdir ~/catkin_ws/build
$ cd ~/catkin_ws/build
每个工作区只有一个build空间目录。CMake用户可能会发现这个异常,将为所有的catkin项目提供一个build文件夹。这是catkin的一个关键特性,它将像一个大型CMake项目一样工作。
此文件夹很重要,因为可以在此文件夹中调用构建脚本。可以使用与build不同的名称来命名,特别是如果您需要多个配置,但“build”是一个很好的默认值,其他名称最好也可以按照惯例以“build_”为前缀。
2、配置Packages
build过程的下一步是配置步骤。在build文件夹中调用CMake,以便cmake和catkin可以配置Packages。每当从源码空间添加或删除Packages包时,更改其中哟个软件包的构建文件或者想要更改构建系统设置时,都需要执行“配置”。现在可以调用CMake来配置catkin软件包并生成构建脚本:
$ cd ~/catkin_ws/build
$ cmake ../src
这会将一些CMake行输出到控制台,目前为止源空间中没有catkin包,因此它不会做太多其他操作。
当然也可以配置安装前缀或其他CMake / catkin设置之类的点。例如,您可以使用CMake变量 CMAKE_INSTALL_PREFIX设置不同的安装前缀,如下所示:
$ cd ~/catkin_ws/build
$ cmake ../src -DCMAKE_INSTALL_PREFIX=../install -DCATKIN_DEVEL_PREFIX=../devel
这些配置CMake将东西安装到〜/ catkin_ws / install目录而不是默认的/ usr / local目录。
注意:可以将devel space目录设置为工作空间中的文件夹,并将此附加选项添加到CMake:cmake ../src -DCATKIN_DEVEL_PREFIX = .. / devel
注意:可以使用此CMake命令将安装目录设置为工作空间中的文件夹:cmake ../src -DCMAKE_INSTALL_PREFIX = .. / install
3、编译Packages
在上一步配置此工作空间的src目录中存在的catkin包,并将生成的构建脚本放入build目录中,可以从该目录中调用构建脚本来构建catkin包。默认情况下,Make脚本由CMake创建,因此在build目录中调用make来构建catkin包:
$ cd ~/catkin_ws/build
$ make
在构建catkin包之后,将生成的构建文件放置在devel空间中。devel空间反映了符合FHS的安装空间的布局。这将会在开发空间中生成一些新文件:
catkin_ws/ -- WORKSPACE
src/ -- SOURCE SPACE
...
build/ -- BUILD SPACE
devel/ -- DEVEL SPACE
setup.bash \
setup.sh |-- Environment setup files
setup.zsh /
etc/ -- Generated configuration files
include/ -- Generated header files
lib/ -- Generated libraries and other artifacts
package_1/
bin/
etc/
include/
lib/
share/
...
package_n/
bin/
etc/
include/
lib/
share/
share/ -- Generated architecture independent artifacts
...
不用手动修改build空间中的大多数这些文件。唯一的例外是CMakeCache.txt,这个可以手动更改或使用标准的cmake工具,如ccmake(cmake-curses-gui)或cmake-gui(可通过apt-get在Ubuntu上安装)。
devel目录仅包含构建步骤生成的文件。位于src目录中的任何源文件,头文件或资源都使用多种类型的重定向提供给devel目录。这意味着,例如,在开发Python时,您可以在src目录中编辑Python模块,然后在调用CMake或make生成的情况下测试devel目录中的这些更改。
CMake用户可能会发现这种不寻常,因为更传统的工作流程需要在使用前进行安装。这是catkin的一个关键特性,允许更快的开发周期。是否要使用此功能取决于您。
1.4安装Packages
在工作区中构建catkin包后,您可以直接通过Develpace使用它们,也可以安装它们。安装catkin包可以通过调用CMake生成的特殊安装目标来完成。
在之前配置包部分,特别提到可以通过将CMAKE_INSTALL_PREFIX传递给cmake来更改安装前缀的地方。此安装前缀指示安装步骤放置文件的位置。此位置称为安装空间。让我们将其设置为工作区中的某些内容并运行安装步骤:
$ cd ~/catkin_ws/build
$ make install
如果make install因缺少权限而失败,那么可使用-DCMAKE_INSTALL_PREFIX选项调用cmake。在这种情况下,在尝试make install之前再次使用该选项运行cmake。 由于src文件夹中仍然没有任何软件包,因此不会安装任何catkin软件包,但会在工作区中获得一些额外的文件。
在make install期间,文件复制到您指定的CMAKE_INSTALL_PREFIX中。创建“bin”,“lib”,“share”和其他一些文件夹。另外,还有setup.* sh文件,这些文件特定于catkin。这些环境设置文件非常有用,将当前编译生成的文件,配置成当前环境,方便使用,请考虑您刚刚调用make然后make install on您的一个包含可执行文件的包,现在您希望该可执行文件位于PATH中。
catkin_ws/ -- WORKSPACE
src/ -- SOURCE SPACE
...
build/ -- BUILD SPACE
devel/ -- DEVEL SPACE
setup.sh
setup.bash
setup.zsh
...
install/ -- INSTALL SPACE
setup.sh
setup.bash
setup.zsh
...
install 目录布局与devel目录非常相似。如果使用非catkin软件,需要手动扩展PATH变量或将软件包安装到PATH上已经存在的位置,如“/ usr”,但使用catkin,您只需通过获取环境设置文件来扩展您的环境:
source ~/catkin_ws/install/setup.bash
软件包的需要安装哪些文件,静态或生成,由CMakeLists.txt中的CMake命令决定。通常,可执行文件放在“bin”文件夹中,库放在“lib”中,依此类推,但这些文件夹的前缀由CMAKE_INSTALL_PREFIX设置。CMAKE_INSTALL_PREFIX默认为'/ usr / local',这是默认构建软件时的UNIX约定,但可以在CMake调用时覆盖它。强烈建议开发人员使用不同的文件夹,以便轻松卸载并使用多个ROS分发。管理员并且知道有卸载命令,否则请勿从源安装到共享计算机的默认位置。Catkin将安装空间的空间称为安装空间。
1.5清理
随时删除构建空间和安装空间,并使用上述步骤重新创建它们。这样做的主要目的是“卸载”之前构建或安装的软件包。
$ cd ~/catkin_ws
$ rm build devel install