这是一篇关于如何使用 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完成后,我们应该能看到 build
、install
和 log
目录:
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_cmake
和 ament_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 启动脚本,并删除追加的 source
和 export
命令。
设置 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。
关注【智践行】公众号,发送 【机器人】 获得机器人经典学习资料