在Windows上构建ROS 2

本指南介绍了如何在Windows上为ROS 2设置一个开发环境。 [Alyssa@5562]

先决条件

首先按照二进制安装页面上的 Installing Prerequisites 步骤操作。

当你进行 "Downloading ROS 2" 部分时,停下来并返回这里执行以下步骤。 [Alyssa@5564]

语言支持

确保你有一个支持 UTF-8 的语言区域。例如,对于汉语Windows 10的设备,您可能需要安装 English language pack[Alyssa@5566]

附加先决条件

从源文件构建时,您需要先安装一些额外的先决条件。 [Alyssa@5568]

从Chocolatey安装额外的先决条件

首先安装git:

choco install -y git

您需要将Git cmd文件夹 “c: Program Files Git cmd'” 添加到路径中 (您可以通过单击Windows图标,键入 "Environment Variables" ,然后点击 "Edit the system environment variables" 。在生成的对话框中,单击 "Environment Variables" ,在底部窗格中单击 "Path" ,然后单击 "Edit" 并添加路径)。 [Alyssa@5571]

安装开发人员工具

现在,我们准备安装一些用于帮助开发ROS 2的工具。

让我们从 vcstool 开始:

pip install -U vcstool

你可以通过运行 vcs 来测试它 (你应该可以在同一个cmd命令行终端中这样做)。 [Alyssa@5575]

接下来,安装 colcon : [待校准@5576]

pip install -U colcon-common-extensions

你可以通过运行 colcon 来测试它 (你应该可以在同一个cmd提示中这样做)。 [待校准@5577]

另外,你应该安装 curl :

choco install -y curl

安装依赖项

接下来安装最新版本的 setuptoolspip :

python -m pip install -U setuptools pip

然后,您可以继续安装其他Python依赖项:

pip install -U catkin_pkg cryptography EmPy ifcfg lark-parser lxml numpy pyparsing pyyaml

接下来安装测试工具,如 pytest 等:

pip install -U pytest pytest-mock coverage mock

接下来安装代码审查工具,像 flake8 等: [Alyssa@5583]

pip install -U flake8 flake8-blind-except flake8-builtins flake8-class-newline flake8-comprehensions flake8-deprecated flake8-docstrings flake8-import-order flake8-quotes mypy==0.761 pep8 pydocstyle

接下来安装cppcheck:

choco install -y cppcheck

接下来安装xmllint:

安装Qt5

仅当您正在安装rviz时才需要此部分,但它是我们的默认安装源自带的,因此如果您不知道(这是安装rviz才需要的),那么假设您正在安装它,需要进行如下操作。 [Alyssa@5590]

首先从Qt的网站获取安装包: [Alyssa@5591]

https://www.qt.io/download

选择开源版本,然后选择 Qt Online Installer for Windows

运行安装程序并安装qt5。

我们建议您将其安装到默认位置 “c: qt”,但是如果您选择其他位置,请确保相应地更新以下路径。当选择要安装的组件时,对于Foxy和更高版本你唯一需要确定的东西是 Qt -> Qt 5.15.0 目录树下有合适的MSVC 64位组件。在撰写本文档时,我们正在使用 5.15.0 ,这也是我们推荐的版本,因为我们在Windows上只测试了这个版本,但更高的版本可能也可以用。对于Foxy及更高版本,一定要选择 MSVC 2019 64-bit 。之后的步骤,选择默认设置就可以了。 [Alyssa@5595]

最后,在 cmd.exe 中将 Qt5_DIR 环境变量设置为你编译器所在的路径,以使CMake可以找到该编译器: [Alyssa@5596]

set Qt5_DIR=C:\Qt\5.15.0\msvc2019_64

您可以使用 “setx-m Qt5_DIR C :Qt 5.15.0 msvc2019_64” 让它永久生效,但这需要管理员权限。 [Alyssa@5597]

注解

此具体路径可能会根据您使用的MSVC版本或将其安装到其他目录而不一样。 [Alyssa@5598]

获取ROS 2代码

现在我们有了开发工具,我们可以获取ROS 2源代码了。 [Alyssa@5600]

首先设置一个开发文件夹,例如 “c: dev ros2_foxy”: [Alyssa@5601]

md \dev\ros2_foxy\src
cd \dev\ros2_foxy

指明所克隆的仓库地址并下载 ros2.repos 文件: [Alyssa@5602]

# CMD
curl -sk https://raw.githubusercontent.com/ros2/ros2/foxy/ros2.repos -o ros2.repos

# PowerShell
curl https://raw.githubusercontent.com/ros2/ros2/foxy/ros2.repos -o ros2.repos

接下来,您可以使用 vcs 导入 ros2.repos 文件中列出的仓库:

# CMD
vcs import src < ros2.repos

# PowerShell
vcs import --input ros2.repos src

安装额外的DDS实现 (可选) [待校准@5495]

如果你想使用除了默认的eProsima的快速RTPS,以外的DDS或RTPS供应商,你可以在 here 找到说明。 [Alyssa@5496]

编译ROS 2代码 [Alyssa@5604]

要编译ROS 2,您需要以管理员身份运行Visual Studio命令终端 ( "x64 Native Tools Command Prompt for VS 2019" )。 [Alyssa@5605]

Fast RTPS与ROS 2源文件捆绑在一起,除非您将 AMENT_IGNORE 文件放在 “src eProsima” 文件夹中,否则它将始终被编译。 [Alyssa@5606]

编译 “dev ros2_foxy” 文件夹目录: [Alyssa@5607]

colcon build --merge-install

注解

我们在这里使用 --merge-install 来避免在编译结束时 PATH 变量太长。如果要调整这些说明以构建较小的工作区,则可以使用默认行为,即隔离安装,即每个包安装到不同的文件夹的位置。 [Alyssa@5608]

注解

如果您正在构建一个调试版本,请使用 python_d path\to\colcon_executable build --cmake-args -DCMAKE_BUILD_TYPE=Debug. 参考 Extra stuff for debug mode 了解有关在Windows上的运行调试版本的Python代码的更多信息。 [Alyssa@5609]

环境设置

打开一个shell命令终端并source ROS 2的安装文件以配置工作空间的环境: [Alyssa@5610]

call C:\dev\ros2_foxy\install\local_setup.bat

这将自动为其支持的任何DDS供应商设置编译环境。 [Alyssa@5611]

如果没有其他错误,正常情况下前一个命令只会输出 一次 “系统找不到指定的路径”。 [Alyssa@5612]

测试和运行

请注意,首次运行任何可执行文件时,必须在Windows防火墙弹出的窗口中允许访问网络。 [Alyssa@5614]

您可以使用以下命令运行测试例程: [Alyssa@5615]

colcon test --merge-install

注解

只有处于编译步骤时,才应该使用``--merge-install`` 。 [Alyssa@5616]

之后,您可以使用以下命令获取测试的概要信息: [Alyssa@5617]

colcon test-result

要运行这些示例,首先打开一个干净的新 cmd.exe 终端,并通过source local_setup.bat 文件来设置工作空间的环境变量。然后,运行一个c++ talker : [Alyssa@5618]

call install\local_setup.bat
ros2 run demo_nodes_cpp talker

在另一个单独的shell中,您可以执行与上面相同的操作,只是换成运行一个Python listener : [Alyssa@5619]

call install\local_setup.bat
ros2 run demo_nodes_py listener

你应该看到了 talker 说这是 Publishing 消息 ,listenerI heard 这些消息。这证明了C++和Python的APIs都是正常工作的。万岁! [Alyssa@5507]

注解

不建议在已经source了 local_setup.bat 环境的同一个cmd命令终端中编译。 [Alyssa@5620]

安装后的下一步

继续使用 教程和Demo 来配置您的环境,创建您自己的工作区和包,并学习ROS 2核心概念。 [小鱼@5509]

使用ROS 1 bridge

ROS 1bridge可以连接从ROS 1到ROS 2的话题,反之亦然。看看这个专门的文献 documentation 如何编译和使用ROS 1bridge。 [Alyssa@5511]

附加RMW实现 (可选)

ROS 2使用的默认中间件是 Fast-RTPS ,但中间件 (RMW) 可以在运行时进行替换。查看 guide 了解如何使用多个RMWs。 [Alyssa@5513]

调试模式的额外内容

如果您希望能够在调试模式下运行所有测试,您需要安装更多内容:

  • 为了提取Python源文件压缩包,您可以使用PeaZip: [Alyssa@5623]

choco install -y peazip
  • 您还需要SVN,因为某些Python源文件编译依赖项是通过SVN检出的: [Alyssa@5624]

choco install -y svn hg
cd C:\dev\Python-3.8.3\PCbuild
get_externals.bat
build.bat -p x64 -d
  • 最后,将编译生成的文件复制到发布模式Python可执行文件和DLL's旁边的Python 38安装目录中: [Alyssa@5630]

cd C:\dev\Python-3.8.3\PCbuild\amd64
copy python_d.exe C:\Python38 /Y
copy python38_d.dll C:\Python38 /Y
copy python3_d.dll C:\Python38 /Y
copy python38_d.lib C:\Python38\libs /Y
copy python3_d.lib C:\Python38\libs /Y
copy sqlite3_d.dll C:\Python38\DLLs /Y
for %I in (*_d.pyd) do copy %I C:\Python38\DLLs /Y
  • 现在,打开一个新的命令行终端,确保 python_d 正常安装: [Alyssa@5631]

python_d -c "import _ctypes ; import coverage"
  • 验证 python_d 的操作后,有必要重新安装一些带有启用调试模式相关库的依赖项: [Alyssa@5632]

python_d -m pip install --force-reinstall https://github.com/ros2/ros2/releases/download/numpy-archives/numpy-1.18.4-cp38-cp38d-win_amd64.whl
python_d -m pip install --force-reinstall https://github.com/ros2/ros2/releases/download/lxml-archives/lxml-4.5.1-cp38-cp38d-win_amd64.whl
  • 验证这些依赖项的安装:

python_d -c "from lxml import etree ; import numpy"
  • 当您希望回到编译发行二进制文件的模式时,必须卸载调试变量并使用发行变量: [Alyssa@5634]

python -m pip uninstall numpy lxml
python -m pip install numpy lxml
  • 要创建可执行文件的python脚本 (.exe),应使用python _ d调用colcon以及相应的CMake编译类型。如果是用pip安装的colcon,则可以通过 pip show colcon-core 找到colcon可执行文件的路径。 [Alyssa@5635]

python_d path\to\colcon_executable build --merge-install --cmake-args -DCMAKE_BUILD_TYPE=Debug

了解最新情况 [Alyssa@5518]

请参阅 维护ROS 2Foxy源文件的检出 以定期的刷新安装源。 [Alyssa@5519]

故障排除

故障排除技术可以参考 这份文档[Alyssa@5637]

卸载

  1. 如果你按照上面的指示用colcon安装了你的工作空间, "uninstalling" 可能只是打开一个新的终端,而没有source工作空间的 setup 文件。因此,您的环境就会表现得好像您的系统上没有安装Foxy。 [Alyssa@5523]

  2. 如果您还打算释放所有空间,则可以使用以下命令删除整个工作空间的目录: [Alyssa@5524]

    rmdir /s /q \ros2_foxy