CLion 2025.2 Help

ROS2 设置教程

ROS2 是 ROS(机器人操作系统)的最新版本,它是一组为机器人应用设计的库和工具。

本教程介绍如何使用 CLion 作为 IDE 来开发使用 colcon 构建的 ROS2 应用程序。 如果您正在使用较旧的 ROS 发行版,该版本使用 catkin 构建工具,请参考 之前的教程

以下说明展示了在 Windows 上的以下操作:创建 ROS2 工作区,将其作为编译数据库项目在 CLion 中打开,构建、运行/调试包,添加另一个包以及重建工作区。

准备 ROS2 环境

  1. 在您的系统上 安装 ROS2。

  2. 确保 source ROS2 安装成功。 如果遇到问题,请参考同一指南中的提示。

创建工作空间

我们将以官方的 简单发布者和订阅者(C++)指南为例。

  1. 以管理员模式打开终端。

  2. Source ROS2 安装。 在我们的案例中,命令是

    call C:\dev\ros2\ros2-windows\local_setup.bat
  3. 为新工作区创建一个目录并进入该目录

    md \dev_ws\src cd \dev_ws\src
  4. 创建一个 publisher-subscriber

    ros2 pkg create --build-type ament_cmake cpp_pubsub

    按照以下 步骤获取源文件, CMakeLists.txt package.xml ,直到构建为止。

此时,我们有以下文件夹结构:

|_dev_ws |_src |_cpp_pubsub |_include |_src subscriber_member_function.cpp publisher_member_function.cpp CMakeLists.txt package.xml

在终端中构建工作区并生成编译数据库

为了能够在 CLion 中打开 ROS2 工作区,我们将使用 JSON 编译数据库 ,并通过 CMAKE_EXPORT_COMPILE_COMMANDS CMake 标志生成它。

此选项仅在 CMake 的 Makefile 和 Ninja 生成器中受支持,因此我们还需要使用 -G 在生成器之间切换。

  1. 在最初 source ROS2 安装的同一终端中,导航到工作区级别的文件夹(在我们的案例中为 dev_ws )并运行

    colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja
  2. 构建完成后,请确保 dev_ws\构建 包含一个 compile_commands.json 文件。 如果文件不存在,请确保您的 colcon版本支持生成工作区级别的编译数据库(请参阅此 问题)。

在已 source 的环境中启动 CLion

  1. 在同一终端中,source 工作区的设置文件:

    call install/setup.bat
  2. 接下来,从同一个 shell 启动 CLion。 有关更多信息,请参阅 命令行界面

    例如,在使用 Toolbox 的情况下,您可以创建一个 启动 IDE 的脚本。 在我们的案例中,它位于 C:\IDE_shell_scripts

    cd C:\IDE_shell_scripts\ clion
  3. 结果是,CLion 将在已准备好的 ROS2 环境中启动。

在 CLion 中打开工作区

  1. 在 CLion 中,从主菜单调用 文件 | 打开 并选择顶级 构建 目录中的 compile_commands.json 文件:

    将 ROS2 工作区作为编译数据库项目打开
  2. 点击 作为项目打开

    将 compDB 作为项目打开
  3. 检查项目是否成功加载:

    ROS2 工作区的初始加载

更改项目根目录

默认情况下,CLion 将包含 compile_commands.json 文件的目录视为项目根目录。 在我们的案例中,它是 构建 目录。 在项目树中,实际的源文件被标记为外部文件:

源文件标记为外部文件

为了获得正确的项目结构,我们需要将项目根目录设置为实际的工作区目录。

  1. 从主菜单调用 工具 | 编译数据库 | 更改项目根目录 并选择工作区目录(在我们的案例中为 dev_ws )。

  2. 检查项目视图中的更改:

    工作区项目根目录

此时,所有 CLion 的 编辑功能都完全可用于工作区的源代码。

如何构建包

为了在 CLion 中构建并启动包,我们将为 colcon build 期间实际执行的 CMake 命令创建一个 自定义构建目标 ,然后为该目标创建一个 自定义应用程序配置

1. 为 'colcon 构建' 命令创建脚本

  1. 导航到构建日志目录。 在我们的案例中,它是 C:\dev_ws\log\latest_构建\cpp_pubsub 。 打开最新构建的 command.txt 文件。

  2. 将命令复制到另一个文件中并将其修改为以下内容:

    "C:\Program Files\CMake\bin\cmake.EXE" C:\dev_ws\src\cpp_pubsub -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja -DCMAKE_INSTALL_PREFIX=C:\dev_ws\install\cpp_pubsub "C:\Program Files\CMake\bin\cmake.EXE" --build C:\dev_ws\build\cpp_pubsub -- -j8 -l8 "C:\Program Files\CMake\bin\cmake.EXE" --install C:\dev_ws\build\cpp_pubsub
  3. 将文件保存为 .bat 脚本。 在我们的示例中,它被称为 cmake_commands.bat 并放置在 c:\dev_ws\src\cpp_pubsub\ 中。

2. 创建自定义构建目标

  1. 在 CLion 中,转到 设置 | 构建、执行、部署 | 自定义构建目标 并点击 以添加新目标。

    • 工具链 设置为 Visual Studio。 有关在 CLion 中配置 Visual Studio 工具链的更多信息,请参阅 Windows 教程

    • 点击 构建 字段旁边的三点图标。 然后点击 以添加外部项。

      程序 字段中,选择新创建的脚本。 将 工作目录 设置为包的构建目录。

    为 CMake 命令创建自定义构建目标
  2. 保存自定义目标。

3. 为自定义构建目标创建运行/调试配置

为了能够构建并启动我们为包创建的目标,我们需要创建一个相应的 配置

  1. 在主菜单中,转到 运行 | 编辑配置 ,点击 并选择 自定义构建应用程序

  2. 在配置设置中,选择 目标 并确保从 启动前 区域中移除 构建

自定义配置

4. 构建包

  1. 在工具栏切换器中选择配置:

    构建配置
  2. 点击锤子图标或按 Ctrl + F9 。 或者,从主菜单调用 构建 | 构建 '构建 cpp_pubsub'

  3. 在运行工具窗口中检查结果。

运行/调试包

  1. 再次打开 编辑配置 对话框。

  2. 构建配置修改为以下内容:

    • 可执行文件 设置为实际的包二进制文件。

    • 请选择 以管理员权限运行 复选框。 有关更多信息,请参阅 以 root 身份调试

    包的运行/调试配置
  3. 保存配置后,它已准备好 运行 已调试 。 所有 CLion 的 调试动态分析功能都将可用于工作区代码。

    CLion 将从目标的工具链中获取调试器。 在我们的案例中,它是 MSVC LLDB

如何构建工作区

现在让我们看看如何在 CLion 中添加一个新包并重建整个工作区。 为了说明这一点,我们将以向 dev_ws 工作区添加一个 简单服务和客户端包为例。

准备新包文件

  1. 在终端中, source ROS2 安装并导航到 dev_ws\src

  2. 创建一个新包

    ros2 pkg create --build-type ament_cmake cpp_srvcli --dependencies rclcpp example_interfaces
  3. 按照 步骤获取源文件, CMakeLists.txt package.xml ,直到构建为止。

构建整个工作区

为了(重新)构建整个工作区,我们将在 colcon build 中配置一个 外部工具 ,并在不离开 CLion 的情况下调用它。

  1. 转到 设置 | 工具 | 外部工具 并点击 以添加新工具。

  2. 将工具配置为执行与我们从命令行构建时使用的 colcon build 命令相同的操作:

    用于 colcon 构建 的外部工具
  3. 保存工具后,通过主菜单中的 工具 | 外部工具 调用它。

  4. 在运行工具窗口中检查结果:

    使用外部工具进行 colcon 构建 的结果
  5. 检查 compile_commands.json 是否已重新生成并现在包含两个包的实体:

    工作区重建后重新生成的编译数据库
  6. 确保重新加载编译数据库(按 Ctrl+Shift+O 或从主菜单调用 工具 | 编译数据库 | 重新加载编译数据库项目)。 为了避免手动重新加载项目, 配置自动重新加载

此时,两个包都已包含在 CLion 项目模型中,您可以像往常一样使用它们。 要构建并运行第二个包,请按照 上述描述的步骤操作。

最后修改日期: 2025年 9月 26日