IDE 和调试 [社区贡献]

ROS 2 不是围绕特定开发环境开发的,主要重点是从命令行构建/运行。 尽管如此,集成开发环境 (IDE) 可用于开发、运行和/或调试 ROS 2 节点。

下面列出了一些 IDE 以及如何将它们与 ROS 2 一起使用的说明。

一般的

已安装的 Python 代码

默认情况下,使用以下方式构建工作区时:

colcon build

Python 代码将被复制到 build/install 目录中。 因此,当从 IDE 内部将调试器附加到 ros2 run 命令时,正在运行的代码(来自 build/install)与 IDE 项目中打开的文件不同。

有 2 个选项可以解决这个问题:

  • build/install 目录打开源文件并在那里放置断点。

  • 使用 –symlink-install 标志为 colcon 构建工作区,它将源文件符号链接到 build/install 目录。

Visual Studio Code

VSCode 是一个多功能且免费的开发环境。

VSCode 与 ROS 2 一起使用相对容易。 只需在命令行中激活您的环境并从同一终端启动 VSCode 应用程序并照常使用即可。 因此:

  1. 像平常一样创建您的 ROS 工作区。

  2. 在终端中,同时获取 ROS 2 和您的安装(如果已构建)。

  3. 从同一命令行启动 VSCode。终端将被阻止,直到再次关闭应用程序。

source /opt/ros/rolling/setup.bash
cd ~/dev_ws
source ./install/setup.bash
/usr/bin/code ./src/my_node/

VSCode 和在 VSCode 内部创建的任何终端都将正确地从父环境继承,并且应该具有 ROS 和已安装的包。

Note

添加软件包或进行重大更改后,您可能需要再次获取安装。 最简单的方法是关闭 VSCode 并按上述方法重新启动它。

Python

在您的工作区中,验证是否使用了正确的解释器。 通过获取基本命令“python”应该是正确的,但 VSCode 喜欢使用 Python 的绝对路径。 在右下角单击“选定的 Python 解释器”进行更改。

如果您的 ROS 2 Python 版本来自虚拟环境,VSCode 将尝试在每次运行命令时获取它。 但我们已经从源环境启动了 VSCode,因此不需要这个额外的步骤。 您可以通过找到“设置”>“扩展”>“Python”>“激活环境”并禁用检查来为当前工作区禁用此功能。

现在只需运行一个文件或在“launch.json”中创建一个配置。 通过创建像“python …”命令这样的配置,而不是“ros2 run/launch …”,可以最轻松地调试节点。 “launch.json”的示例可以是:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: File",
            "type": "python",
            "request": "launch",
            "program": "my_node.py"
        },
    ]
}

您也可以在“使用进程 ID 附加”下创建用于附加到正在运行的进程的配置。

有关如何结合使用 VSCode 和 Docker 的完整说明,请参阅:doc:使用 VSCode 和 Docker 设置 ROS 2

PyCharm

PyCharm 是专为 Python 设计的 IDE。

当然,它只能用于用 Python 创建的节点。

使用 PyCharm,您可以附加到现有进程(可能由您通过“ros2 run …”或“ros2 launch …”启动),也可以直接从 Python 运行节点(相当于“python [file.py]”)。

集成以进行代码检查

您可以设置 PyCharm 项目,使其完全了解 ROS 2 代码,从而允许代码完成和建议。

Linux

打开终端,获取 ROS 并启动 PyCharm:

source /opt/ros/humble/setup.bash
cd path/to/dev_ws
/opt/pycharm/bin/pycharm.sh

选择正确的解释器后,一切都应该正常工作。

Note

This is untested.

Windows

首先从命令行获取 ROS,然后启动 PyCharm,这似乎对 Windows 没有任何影响。 相反,需要调整一些设置。

  1. 像平常一样创建您的 ROS 工作区。

  2. 正常启动 PyCharm。

  3. 打开一个项目。这应该是您正在开发的 ROS 节点的根目录,例如 C:\dev_ws\src\my_node

#. 单击“添加新解释器”>“添加本地解释器…”。 选择一个系统解释器(或虚拟环境,如果您正在使用),然后选择您的 ROS Python 版本的可执行文件(通常为 C:\Python38\python.exe)。

  • 如果您现在打开其中一个代码文件,您将看到有关缺少导入的警告。

尝试运行该文件将确认这些问题。

#. 在“Python 解释器”窗口下,找到并选择您的 ROS 解释器。 将名称编辑为可识别。 更重要的是,现在单击“显示解释器路径”按钮。 #。在新窗口中,您将看到已与此解释器关联的路径。 单击“+”按钮并添加另外两个路径(根据您的 ROS 安装):

  • C:\dev\ros2_humble\bin

  • C:\dev\ros2_humble\Lib\site-packages

PyCharm 将重新索引,完成后它应该能够正确解释您的项目,识别 ROS 2 系统包。 您可以按预期浏览代码、完成并阅读文档简介。

如果存在与您的包一起构建的依赖项,它们可能尚未被识别并导致无效的 IDE 警告和运行时错误。

通过以下方式解决此问题:

  • 确保运行/调试配置中的“PATH”覆盖包括 ROS 2 安装和您的工作区,例如:

    C:\dev\ros2_humble\local_setup.ps1
    C:\dev_ws\install\local_setup.ps1
    echo $ENV:Path
    
  • 将“install/”目录中的相关文件夹添加到您的项目源中。

转到“设置…”,然后在“项目:”>“项目结构”下单击“添加内容根”。 在“install/Lib/*”下添加所有相关的“site-packages”文件夹。

最后,确保您的运行/调试配置已启用“在 PYTHONPATH 中包含内容根”选项。

Tip

在 colcon 构建中使用 –merge-install 选项将限制依赖目录的数量,从而更容易配置 PyCharm。

附加到进程

即使没有对 PyCharm 进行任何配置,您也可以随时附加到正在运行的 Python 节点。 打开您的项目源代码并像往常一样运行您的节点:

ros2 run my_node main

然后在 PyCharm 中选择“运行”>“附加到进程…”。 这可能需要一秒钟,但会显示一个小窗口,列出当前正在运行的 Python 实例,包括您的节点。 可以有多个 Python 进程,因此可能需要反复试验才能找到正确的进程。

选择实例后,可以使用常用的调试工具。 您可以暂停它或在代码中创建断点并逐步执行它。

Note

您的项目中的代码可能不是正在执行的文件,请参阅:ref:this

运行/调试

首先按照集成步骤操作。

从 PyCharm 运行 Python 文件可能会导致导入错误。 这是因为 PyCharm 扩展了 PYTHONPATH 环境变量,但保留了 PATH 不变。 未找到 ros/bin 中所需的库文件。

编辑文件的运行/调试配置,并在“环境变量:”下添加新变量。 目前不支持扩展现有的 PATH,因此我们需要覆盖它。 从源 ROS 终端,使用 echo $Env:PATH 导出 PATH 的内容。 复制结果。

返回 PyCharm,将其粘贴为 PATH,应用更改并运行或调试节点。 现在它应该像任何 Python 项目一样工作,允许轻松添加断点和其他调试方法。

Note

在 Windows 上,“环境变量:”下的“PATH”变量的大小写似乎必须是“path”(全部小写)才能起作用。