Skip to main content

ROS 构建工具

colcon (ROS2)

编译工具 colcon 是在 ROS 构建工具 catkin_make , catkin_make_isolated, catkin_tools 和 ament_tools 上的再次迭代。

基础知识

ROS 工作空间是具有特定结构的目录。通常有一个 src 子目录,该子目录是 ROS 包的源文件的位置。通常一开始目录是空的。

colcon 在源代码(src)外进行构建(这与 CMake 默认在文件夹里不同)。默认情况下,它将在 src 同级目录下创建以下文件夹:

  • build 目录将是中间文件的存储位置。对于每个包,将在其中创建一个子文件夹。

  • install 目录是每个软件包将安装到的位置。默认情况下,每个包都将安装到单独的子目录中。

  • log 目录包含有关每个 colcon 调用的各种日志信息。

创建工作空间

首先,创建一个目录 ( dev_ws ) 来作为我们的工作空间:

mkdir -p ~/dev_ws/src
cd ~/dev_ws

此时,工作区包含一个空目录 src

添加一些代码

让我们将 examples 仓库克隆到工作区的 src 目录中:

如果你还没有配置 git,可以下载对应的压缩包,解压后自行放入 src。

git clone https://github.com/ros2/examples src/examples -humble

通过 source 添加依赖

source /opt/ros/humble/setup.bash

通常情况下,你应该将这条命令写入 ~/.bashrc 中,以后就不用手动执行这条命令了。(因为每个终端启动时会先source ~/.bashrc)(如果你是使用 fishros 一键安装的 ROS,那么这条命令已经在你的 bashrc 中了)

构建工作空间

也就是我们俗称的编译。

colcon build
# or colcon build --symlink-install

请务必在工作空间下编译,而非其他任何地方。

构建完成后,我们应该会看到 buildinstalllog 目录。

source 环境

当 colcon 成功完成构建后,输出将在 install 目录中。在使用任何已安装的可执行文件或库之前,需要将它们添加到路径和库路径中。colcon 将在 install 目录中生成 bash/bat 文件,以帮助设置环境。

. install/setup.bash
# or source install/setup.bash

colcon build 编译选项

  • --symlink-install :使用符号链接而不是复制文件,表现在于修改launch或yaml文件后无需重新编译即可运行最新配置
  • --packages-select :只编译指定包
  • --packages-ignore :忽略指定包
  • --continue-on-error :在编译出错之后继续编译其他模块


catkin (这是 ROS 1 的构建工具 不用学)

1. catkin 编译系统

对于源代码包,编译后才能在系统上运行。

Linux 下,随着源文件的增多,用 gcc/g++ 命令的方式显得效率低下,人们开始用 Makefile 来编译。

然而随着工程体量增大,Makefile 也不能满足需求,于是便出现了 CMake 工具。

CMake 是对 make 工具的生成器,是更高层的工具,它简化了编译构建过程,能够管理大型项目,具有良好的扩展性。

ROS 这个大体量的平台,采用的就是 CMake,并且 ROS 对 CMake 进行了扩展,也就有了 Catkin 编译系统。

catkin 工作空间

catkin 编译流程

建立工作空间

mkdir -p catkin_ws/src
cd catkin_ws/src
catkin_init_workspace # 可以跳过这步,直接在 catkin_ws/ 下 catkin_make
cd ..
catkin_make

编译

cd catkin_ws
catkin_make
source ./devel/setup.bash # 编译完成后要source刷新环境

若要手动执行 catkin_make 操作,等效命令为:

cd catkin_ws/src
catkin_init_workspace
cd ..
mkdir build
cd build
cmake ../src -DCMAKE_INSTALL_PREFIX=../install -DCATKIN_DEVEL_PREFIX=../devel
make

如果要在工作空间中编译指定的包,执行以下命令:

catkin_make -DCATKIN_WHITELIST_PACKAGES=“package1;package2”

如果要还原为编译所有包,执行以下命令:

catkin_make -DCATKIN_WHITELIST_PACKAGES=“”

创建功能包

cd catkin_ws/src
catkin_create_pkg <package> [depend1] [depend2] [depend3]
# e.g. catkin_create_pkg test_pkg roscpp rospy std_msgs

catkin_make 命令参数

catkin_make -h

自己看去吧。

最后

catkin_make, cmake, catkin build区别