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 应用程序并照常使用即可。 因此:
像平常一样创建您的 ROS 工作区。
在终端中,同时获取 ROS 2 和您的安装(如果已构建)。
从同一命令行启动 VSCode。终端将被阻止,直到再次关闭应用程序。
source /opt/ros/rolling/setup.bash
cd ~/dev_ws
source ./install/setup.bash
/usr/bin/code ./src/my_node/
. ~/ros2_install/ros2-osx/setup.bash
cd ~/dev_ws
. ./install/setup.bash
/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code ./src/my_node/
# For CMD:
call C:\dev\ros2\local_setup.bat
cd C:\dev_ws
call .\install\local_setup.bat
"C:\Program Files\Microsoft VS Code\Code.exe" .\src\my_node\
# For PowerShell:
C:\dev\ros2\local_setup.ps1
cd C:\dev_ws
.\install\local_setup.ps1
& "C:\Program Files\Microsoft VS Code\Code.exe" .\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 没有任何影响。 相反,需要调整一些设置。
像平常一样创建您的 ROS 工作区。
正常启动 PyCharm。
打开一个项目。这应该是您正在开发的 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”(全部小写)才能起作用。