Skip to content

Windows 源码编译

本页介绍如何在 Windows 上为 ROS 2 搭建开发环境。

确保你的系统有一个支持 UTF-8 的 locale。 例如,在中文版 Windows 上,你可能需要安装 英语语言包。

该位置将同时存放已安装的二进制包和 ROS 2 本体。

以管理员身份启动命令提示符(通常做法是点击开始菜单,输入 command prompt,然后右键点击选择”以管理员身份运行”)。

然后创建一个目录来存放安装文件。 由于 Windows 路径长度有限制,该路径应尽可能简短。 在后续说明中,我们将使用 C:\dev。

Terminal window
mkdir C:\dev

默认情况下,Windows 的最大路径长度(MAX_PATH)限制为 260 个字符。 ROS 2 构建过程会使用更长的路径,因此我们需要增加该限制。 使用上面打开的会话,运行以下命令:

Terminal window
powershell New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force

注意:需要以管理员身份执行。

你可以在 微软文档 中了解更多关于此限制的信息。

关闭管理员终端,然后使用一个新的命令提示符会话继续后续操作。

要编译 ROS 2 代码,必须安装 MSVC 编译器。 目前推荐使用 MSVC 2022。

继续使用之前的会话,运行以下命令进行下载:

Terminal window
powershell irm https://aka.ms/vs/17/release/vs_buildtools.exe -OutFile vs_buildtools_2022.exe

现在安装 MSVC 2022:

Terminal window
.\vs_buildtools_2022.exe --quiet --wait --norestart --add Microsoft.Component.MSBuild --add Microsoft.Net.Component.4.6.1.TargetingPack --add Microsoft.Net.Component.4.8.SDK --add Microsoft.VisualStudio.Component.CoreBuildTools --add Microsoft.VisualStudio.Component.Roslyn.Compiler --add Microsoft.VisualStudio.Component.TextTemplating --add Microsoft.VisualStudio.Component.VC.CLI.Support --add Microsoft.VisualStudio.Component.VC.CoreBuildTools --add Microsoft.VisualStudio.Component.VC.CoreIde --add Microsoft.VisualStudio.Component.VC.Redist.14.Latest --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --add Microsoft.VisualStudio.Component.Windows11SDK --add Microsoft.VisualStudio.Component.Windows11SDK.22621 --add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core --add Microsoft.VisualStudio.Workload.MSBuildTools --add Microsoft.VisualStudio.Workload.VCTools

注意:MSVC 的安装可能需要很长时间,且安装过程中没有任何进度反馈。

ROS 2 使用 conda-forge 作为软件包后端,使用 pixi 作为前端。

注意:安装 conda-forge 时,Windows Defender 可能会将其标记为威胁。你可以通过点击”更多信息”,然后选择”仍要运行”来安全地跳过此提示。

按照 https://pixi.sh/latest/ 上的说明,使用 Windows 安装程序或在已打开的命令提示符中通过命令行安装 pixi。

pixi 安装完成后,关闭命令提示符会话并重新打开,以确保 pixi 已被添加到 PATH 中。

在现有的命令提示符会话中下载 pixi 配置文件:

Terminal window
cd C:\dev
powershell irm https://raw.githubusercontent.com/ros2/ros2/refs/heads/{REPOS_FILE_BRANCH}/pixi.toml -OutFile pixi.toml

安装依赖:

Terminal window
pixi install

你可以使用同一个 Windows 命令提示符来进行构建。

在你用于编译 ROS 2 的命令提示符中需要执行此操作,但在运行 ROS 2 时不需要:

Terminal window
call "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64

在你打开的每个命令提示符中都需要执行此操作,以设置依赖的路径:

Terminal window
cd C:\dev
pixi shell

现在我们已经有了开发工具,可以获取 ROS 2 源代码了。

创建一个开发文件夹,例如 C:\dev\{DISTRO}:

Terminal window
md C:\dev\{DISTRO}\src
cd C:\dev\{DISTRO}

获取 ros2.repos 文件,该文件定义了要克隆的仓库:

Terminal window
vcs import --input https://raw.githubusercontent.com/ros2/ros2/{REPOS_FILE_BRANCH}/ros2.repos src

ROS 2 默认使用的中间件是 Fast DDS,但中间件(RMW)可以在构建时或运行时替换。 有关如何使用多种 RMW 实现的说明,请参阅 RMW 实现指南。

要构建 {DISTRO} 文件夹目录树:

Terminal window
colcon build --merge-install

注意:这里使用 --merge-install 是为了避免构建结束时 PATH 变量过长。如果你修改这些步骤以构建更小的工作空间,则可以使用默认的隔离安装行为,即每个包安装到不同的文件夹中。

注意:由于工作空间中会拉取大量包,源码安装可能需要较长时间。

启动一个新的 Windows 命令提示符,后续示例将使用它。

在你打开的每个命令提示符中都需要执行此操作,以设置依赖的路径:

Terminal window
cd C:\dev
pixi shell

在你打开的每个命令提示符中都需要执行此操作,以设置 ROS 2 工作空间:

Terminal window
call C:\dev\{DISTRO}\install\local_setup.bat

这将为所有已构建支持的 DDS 供应商自动设置环境。

如果没有其他问题,上述命令输出一次 The system cannot find the path specified. 是正常的。

请注意,首次运行任何可执行文件时,你需要通过 Windows 防火墙弹窗允许网络访问。

你可以使用以下命令运行测试:

Terminal window
cd C:\dev\{DISTRO}
colcon test --merge-install

注意:--merge-install 仅在构建步骤中也使用了该选项时才应使用。

之后,你可以使用以下命令获取测试摘要:

Terminal window
colcon test-result

要运行示例,首先打开一个干净的新命令提示符,并通过加载 local_setup.bat 文件来设置工作空间。 然后运行一个 C++ talker:

Terminal window
call install\local_setup.bat
ros2 run demo_nodes_cpp talker

在另一个命令提示符中执行相同操作,但改为运行 Python listener:

Terminal window
call install\local_setup.bat
ros2 run demo_nodes_py listener

你应该会看到 talker 输出 Publishing(发布)消息,而 listener 输出 I heard(我听到了)。 这说明 C++ 和 Python API 都能正常工作。

注意:不建议在你已经加载了 local_setup.bat 的同一个命令提示符中进行构建。

继续学习教程,配置你的环境、创建自己的工作空间和软件包,并了解 ROS 2 的核心概念。

参阅维护源码检出以定期更新你的源码安装。

可以在 Windows 故障排除页面找到相关技巧。

  1. 如果你按照上述说明使用 colcon 安装了工作空间,“卸载”可能只需打开一个新终端,并且不加载工作空间的 setup 文件即可。这样,你的环境将表现得像系统中没有安装 DISTRO_TITLE 一样。

  2. 如果你还想释放空间,可以使用以下命令删除整个工作空间目录:

    Terminal window
    rmdir /s /q C:\dev\{DISTRO}