ROS2 Jazzy:如何使用colcon创建并编译ROS2工作空间

这是一篇关于如何使用 colcon 创建并构建 ROS2 工作空间的简要教程。它是一个实用性教程,并非用于替代核心文档。

背景

colcon 是 ROS 构建工具 catkin_make、catkin_make_isolated、catkin_tools 和 ament_tools 的迭代升级。有关更多 colcon 的设计信息,请参阅此文档

源代码可在 colcon GitHub中找到。

前提条件

安装 colcon

  • Linux
bash 复制代码
sudo apt install python3-colcon-common-extensions
  • macOS
bash 复制代码
python3 -m pip install colcon-common-extensions
  • Windows
bash 复制代码
pip install -U colcon-common-extensions

安装 ROS2

如果想构建示例代码,首先需要安装 ROS2。如果是从 deb 包进行安装,本文需要进行桌面版安装。

基础知识

ROS 工作空间是一个具有特定结构的目录。通常会有一个 src 子目录,ROS 软件包的源代码就存放在这个子目录中。

colcon 采用源码外构建方式。默认情况下,它会在 src 目录同级创建以下目录:

  • build 目录:用于存储中间文件。会为每个软件包创建一个子文件夹,例如在其中调用 CMake。
  • install 目录:每个软件包都会安装到这里。默认情况下,每个软件包会安装到一个单独的子目录中。
  • log 目录:包含每次调用 colcon 的各种日志信息。

注意 :与 catkin 不同,这里没有 devel 目录。

创建工作空间

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

  • Linux
bash 复制代码
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
  • macOS
bash 复制代码
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
  • Windows
bash 复制代码
md \dev\ros2_ws\src
cd \dev\ros2_ws

此时,工作空间包含一个空的 src 目录:

css 复制代码
.
└── src

1 directory, 0 files

添加一些源码

让我们将示例代码仓库克隆到工作空间的 src 目录中:

bash 复制代码
git clone https://github.com/ros2/examples src/examples -b jazzy

现在,工作空间应该包含 ROS2 示例的源代码:

css 复制代码
.
└── src
    └── examples
        ├── CONTRIBUTING.md
        ├── LICENSE
        ├── rclcpp
        ├── rclpy
        └── README.md

4 directories, 3 files

配置底层环境(underlay)

首先需要先配置现有 ROS2 安装工作空间的环境变量,以便为示例包提供构建依赖。此环境称为"底层"(underlay)。

bash 复制代码
# Replace ".bash" with your shell if you're not using bash
# Possible values are: setup.bash, setup.sh, setup.zsh
source /opt/ros/jazzy/setup.bash

在使用 ROS2 之前,你必须要在你打算进行操作的终端中配置 ROS2 安装工作空间的环境变量。这样就能让 ROS2 的软件包在该终端中可供你使用。

而我们的ros2_ws工作区将作为覆盖工作空间(overlay)叠加在现有 ROS2 环境上。这是一个辅助工作空间,在其中你可以添加新的软件包,而不会干扰你正在扩展的现有 ROS2 安装工作空间(也就是 "底层工作空间",underlay)。你的底层工作空间必须包含覆盖工作空间中所有软件包的依赖项。覆盖工作空间中的软件包会覆盖底层工作空间中的软件包。也有可能存在多层的底层工作空间和覆盖工作空间,每一个后续的覆盖工作空间都会使用其父级底层工作空间中的软件包。建议在需要迭代少量包时使用覆盖层,而不是将所有包放在同一工作区。

编译工作空间

注意: 要在 Windows 上编译软件包,你需要处于 Visual Studio 环境中。

在工作区根目录运行以下命令。由于像 ament_cmake 这样的编译类型不支持 devel 空间,并且需要安装包,建议使用--symlink-install选项。这允许通过修改源代码(如Python文件)快速迭代安装文件:

  • Linux
bash 复制代码
colcon build --symlink-install
  • macOS
bash 复制代码
colcon build --symlink-install
  • Windows
bash 复制代码
colcon build --symlink-install --merge-install

Build完成后,我们应该能看到 buildinstalllog 目录:

bash 复制代码
.
├── build
├── install
├── log
└── src

4 directories, 0 files

运行测试

要对刚刚编译的软件包运行测试,请执行以下命令:

  • Linux
bash 复制代码
colcon test
  • macOS
bash 复制代码
colcon test
  • Windows
bash 复制代码
colcon test --merge-install

加载环境

当 colcon 成功完成编译后,输出文件会存放在 install 目录中。colcon 会在 install 目录中生成 bash/bat 脚本,这可以用来设置环境。这些文件会将所有必需的元素添加到你的路径和库路径中,并提供软件包导出的任何 bash 或 shell 命令。

  • Linux
bash 复制代码
source install/setup.bash
  • macOS
bash 复制代码
. install/setup.bash
  • Windows
bash 复制代码
call install\setup.bat

尝试运行示例

加载环境后,我们就可以运行 colcon 编译的可执行文件了。让我们运行示例中的一个订阅者节点:

bash 复制代码
ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function

在另一个终端中,让我们运行一个发布者节点(别忘了加载设置脚本):

bash 复制代码
ros2 run examples_rclcpp_minimal_publisher publisher_member_function

你应该会看到发布者和订阅者输出的消息,其中的数字会递增。

创建你自己的软件包

colcon 使用 REP149 中定义的 package.xml 规范(也支持format 2)。

colcon 支持多种编译类型。推荐的编译类型是 ament_cmakeament_python,同时也支持纯 CMake 软件包。

ament_python 编译的一个示例是 ament_index_python 软件包,其中 setup.py 是编译的主要入口点。

demo_nodes_cpp使用 ament_cmake 编译类型,并使用 CMake 作为编译工具。

为了方便起见,你可以使用 ros2 pkg create 工具根据模板创建一个新的软件包。

注意 : 对于 catkin 用户来说,这相当于 catkin_create_package

设置 colcon_cd

colcon_cd 命令可以让你快速将 shell 的当前工作目录切换到软件包所在的目录。例如,colcon_cd some_ros_package 会快速将你带到 ~/ros2_ws/src/some_ros_package 目录。

  • Linux
bash 复制代码
echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "export _colcon_cd_root=/opt/ros/jazzy/" >> ~/.bashrc
  • macOS
bash 复制代码
echo "source /usr/local/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "export _colcon_cd_root=~/ros2_install" >> ~/.bashrc
  • Windows 暂不可用。

根据你安装 colcon_cd 的方式以及工作空间的位置,上述说明可能会有所不同,更多详情请参阅文档。若要在 Linux 和 macOS 上撤销此设置,请找到系统的 shell 启动脚本,并删除追加的 sourceexport 命令。

设置 colcon tab 补全

colcon 命令支持 bash 和类似 bash shell 命令补全功能。这必须安装 colcon-argcomplete 软件包,并且可能需要进行一些设置才能使其正常工作。

小贴士

  • 如果你不想构建某个特定的软件包,可在该目录中放置一个名为 COLCON_IGNORE 的空文件,这样它就不会被索引。
  • 如果你想避免在 CMake 软件包中配置和构建测试,可以传递 --cmake-args -DBUILD_TESTING=0
  • 如果你想运行某个软件包中的单个特定测试:
bash 复制代码
colcon test --packages-select YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG

设置 colcon mixin

各种命令行选项写起来繁琐且难以记忆。

例如,要将 CMake 编译类型更改为调试模式,通常使用:

bash 复制代码
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Debug

为了更方便地调用常用的命令行选项,这个代码仓库提供了这些"快捷方式"。

要安装默认的 colcon mixin,请运行以下命令:

bash 复制代码
colcon mixin add default https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml
colcon mixin update default

然后,尝试使用debug混合配置:

bash 复制代码
colcon build --mixin debug

更多详情,请参阅 colcon mixin


关注【智践行】公众号,发送 【机器人】 获得机器人经典学习资料

相关推荐
智践行8 小时前
ROS2 Jazzy:创建自定义的消息和服务接口(C++)
c++·操作系统
望获linux2 天前
实时操作系统在服务型机器人中的关键作用
linux·机器人·操作系统·开源软件·rtos·具身智能
LUCIAZZZ3 天前
说一下Redis的发布订阅模型和PipeLine
java·数据库·redis·缓存·操作系统
JohnYan3 天前
工作笔记-应用磁盘无感扩容
linux·后端·操作系统
智践行3 天前
机器人操作系统ROS2之理解动作
人工智能·操作系统
CYRUS_STUDIO3 天前
详解 Android APP 启动流程
android·操作系统·源码
codists4 天前
《Operating System Concepts》阅读笔记:p764-p766
操作系统
Rinai_R5 天前
MIT6.S081-2024版本的环境搭建
笔记·操作系统·环境搭建·计算机基础·xv6·mit6s081
LUCIAZZZ5 天前
KRaft面试思路引导
java·spring boot·算法·面试·kafka·操作系统·raft