Skip to content

Windows 开发环境(基于 WSL2)

以下说明将介绍如何在 Windows 10 或 11 系统上,借助 WSL2 运行的 Ubuntu Linux 来搭建 PX4 开发环境。

按照本文指示搭建的开发环境可用于编译以下内容:

TIP

此设置方案由 PX4 开发团队提供支持。理论上,该环境能够编译任何可在 Ubuntu 上编译的目标。上述列表中的目标是经过常规测试的。

综述

适用于 Linux 的 Windows 子系统WSL2)允许用户在 Windows 上安装并运行 Ubuntu 开发环境,其使用体验几乎与在 Linux 计算机上运行无异。

借助此环境,开发者可以:

  • 在 WSL 终端中编译 Ubuntu 开发环境 支持的任何模拟器或硬件目标(Ubuntu 是 PX4 开发平台中支持和测试最完善的系统)。
  • 在运行于 Windows 的 Visual Studio Code 中调试代码。
  • 使用在 WSL 中运行的 QGroundControl for Linux 监控仿真环境。Linux 版 QGC 会自动连接到仿真环境。

若有以下需求,则还需安装 QGroundControl for Windows

INFO

WSL 不支持从内部连接 USB 设备,因此在命令行编译时无法使用 upload 选项更新固件,也不能通过 QGroundControl for Linux 更新固件。

INFO

这种方法与在自己的虚拟机中安装 PX4 类似,具体可参考 Windows 虚拟机托管工具链。WSL2 的优势在于其虚拟机与 Windows 深度集成,由系统管理,并且经过了性能优化。

安装

安装 WSL2

要在全新安装的 Windows 10 或 11 系统上安装带有 Ubuntu 的 WSL2,请按以下步骤操作:

  1. 确保计算机 BIOS 中已启用虚拟化功能。该功能通常分别被称为 “虚拟化技术”、“Intel VT-x” 或 “AMD-V”。
  2. 以管理员身份打开 cmd.exe。可以通过按下开始键,输入 cmd,右键单击 “命令提示符” 条目,然后选择 “以管理员身份运行” 来实现。
  3. 执行以下命令来安装 WSL2 和特定版本的 Ubuntu:

    INFO

    你也可以从应用商店安装 Ubuntu 20.04Ubuntu 22.04,这样就可以通过常规的 Windows 添加/删除程序设置来卸载应用程序。

::: 4. WSL 会提示你为 Ubuntu 安装设置用户名和密码。请记录这些凭据,因为后续可能会用到!

此时,命令提示符已变为新安装的 Ubuntu 环境中的终端。

打开 WSL 终端

所有安装和编译 PX4 的操作都必须在 WSL 终端中完成(可以使用安装 WSL2 时的终端,也可以打开一个新的终端)。

如果你使用的是 Windows 终端,可以按照图示打开已安装的 WSL 环境的终端,并通过关闭标签页退出。

Windows 终端展示如何选择 Ubuntu 终端

若要使用命令提示符打开 WSL 终端,请按以下步骤操作:

  1. 打开命令提示符:
    • 按下 Windows 开始 键。
    • 输入 cmd 并按下 Enter 键打开命令提示符。
  2. 要启动 WSL 并进入 WSL 终端,请执行以下命令:
    sh
    wsl -d <发行版名>
    例如:
    sh
    wsl -d Ubuntu
    sh
    wsl -d Ubuntu-20.04
    如果你只安装了一个版本的 Ubuntu,可以直接使用 wsl

输入以下命令先关闭 WSL 终端,然后关闭 WSL:

sh
exit
wsl -d <发行版名> --shutdown

或者,输入 exit 后直接关闭命令提示符。

安装 PX4 工具链

接下来,我们在 WSL2 环境中下载 PX4 源代码,并使用常规的 Ubuntu 安装脚本 来设置开发环境。这将安装用于 Gazebo Classic 仿真和 Pixhawk/NuttX 硬件的工具链。

要安装开发工具链,请按以下步骤操作:

  1. 打开 WSL2 终端(如果之前的终端仍处于打开状态,可以继续使用)。
  2. 执行命令 cd ~ 切换到 WSL 的主文件夹,以便进行后续步骤。

    WARNING

    这一步非常重要!如果在 WSL 文件系统之外的位置进行操作,可能会遇到执行速度极慢以及访问权限错误等问题。

::: 3. 使用 git(WSL2 中已预装)下载 PX4 源代码: sh git clone https://github.com/PX4/PX4-Autopilot.git --recursive ::: info 源代码中的环境设置脚本通常适用于较新的 PX4 版本。如果使用的是较旧版本的 PX4,可能需要 获取特定版本的源代码。 ::: 4. 运行 ubuntu.sh 安装脚本,并在脚本执行过程中确认所有提示信息: sh bash ./PX4-Autopilot/Tools/setup/ubuntu.sh ::: info 此脚本将安装用于编译 Pixhawk 以及 Gazebo 或 Gazebo Classic 目标的工具: - 可以使用 --no-nuttx--no-sim-tools 选项省略 NuttX 和/或仿真工具的安装。 - 其他 Linux 编译目标未经测试(你可以尝试将 Ubuntu 开发环境 中的相应命令输入到 WSL 终端中)。 ::: 5. 脚本执行完成后,重启 “WSL 计算机”(退出终端,关闭 WSL,然后重新启动 WSL): sh exit wsl --shutdown wsl 6. 切换到 WSL 主文件夹中的 PX4 仓库: sh cd ~/PX4-Autopilot 7. 编译 PX4 SITL 目标并测试环境: sh make px4_sitl 更多编译选项请参考 构建 PX4 软件

Visual Studio Code 集成

运行于 Windows 的 VS Code 与 WSL 集成度很高。

要设置集成,请按以下步骤操作:

  1. 在 Windows 上 下载 并安装 Visual Studio Code(VS Code)。
  2. 打开 VS Code
  3. 安装名为 Remote - WSL 的扩展(应用市场)。
  4. 打开 WSL 终端
  5. 在 WSL 终端中,切换到 PX4 文件夹:
    sh
    cd ~/PX4-Autopilot
  6. 在 WSL 终端中,启动 VS Code:
    sh
    code .

这将打开一个与 WSL 终端完全集成的 IDE。请确保始终以远程 WSL 模式打开 PX4 仓库。 7. 下次需要在 WSL2 中进行开发时,可以通过选择 “打开最近的项目”(如下所示)非常方便地以远程 WSL 模式再次打开。这将为你启动 WSL。

不过需要注意的是,WSL 虚拟机的 IP 地址会发生变化,因此无法使用 Windows 版 QGC 监控仿真环境(仍然可以使用 Linux 版 QGC 进行监控)。

QGroundControl

你可以在 WSL 或 Windows 中运行 QGroundControl 来连接正在运行的仿真环境。如果你需要 为飞行控制板刷入新固件,则只能使用 Windows 版的 QGroundControl。

WSL 中的 QGroundControl

设置和使用 QGroundControl 最简单的方法是将 Linux 版本下载到你的 WSL 中。

你可以在 WSL 终端中完成此操作。

  1. 在网页浏览器中,访问 QGC 的 Ubuntu 下载页面
  2. 右键单击 QGroundControl.AppImage 链接,然后选择 “复制链接地址”。链接地址可能类似于 _https://d176td9ibe4jno.cloudfront.net/builds/master/QGroundControl.AppImage_。
  3. 打开 WSL 终端,并输入以下命令下载 AppImage 文件并使其可执行(请将 <复制的 AppImage URL> 替换为实际的链接地址):
    sh
    cd ~
    wget <复制的 AppImage URL>
    chmod +x QGroundControl.AppImage
  4. 运行 QGroundControl:
    sh
    ./QGroundControl.AppImage

QGroundControl 将启动并自动连接到正在运行的仿真环境,允许你监控和控制飞行器。

由于 WSL 不允许访问串行设备,因此无法使用它来安装 PX4 固件。

Windows 上的 QGroundControl

如果你想使用 PX4 中创建的固件更新硬件,请在 Windows 上安装 QGroundControl

以下步骤介绍了如何连接到在 WSL 中运行的仿真环境:

  1. 打开 WSL 终端
  2. 运行命令 ip addr | grep eth0 检查 WSL 虚拟机的 IP 地址:
    sh
    $ ip addr | grep eth0
    
    6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        inet 172.18.46.131/20 brd 172.18.47.255 scope global eth0

eth0 接口 inet 地址的第一部分复制到剪贴板。在本例中为:172.18.46.131。 3. 在 QGC 中,转到 Q > 应用程序设置 > 通信链接。 4. 添加一个名为 “WSL” 的 UDP 链接,指向上面复制的 IP 地址的 18570 端口。 5. 保存设置并连接。

INFO

每次 WSL 重启后,都需要更新 QGC 中的 WSL 通信链接(因为它会获取动态 IP 地址)。

刷写飞行控制板

必须使用 Windows 版 QGroundControl 来刷写自定义编译的 PX4 二进制文件。

INFO

WSL2 本身不提供对连接到计算机的串行/USB 设备(如 Pixhawk 飞行控制器)的直接访问。这意味着你无法将运行在 WSL2 内的 QGC 连接到飞行控制器以安装固件,也不能使用 upload 命令 在编译时上传固件。相反,你需要将 Windows 版 QGroundControl 连接到在 WSL2 中运行的 PX4 以及飞行控制器,以便上传固件。

要刷写在 WSL 中编译的自定义二进制文件,请执行以下步骤:

  1. 如果你还没有在 WSL 中编译二进制文件,可以使用 WSL 终端 并运行以下命令:
    sh
    cd ~/PX4-Autopilot
    make px4_fmu-v5

    TIP

    请为你的飞行控制板使用正确的 make 目标。px4_fmu-v5 可用于 Pixhawk 4 飞行控制板。

::: 2. 如果 Pixhawk 板已通过 USB 连接到计算机,请先断开 USB 电缆。 3. 打开 QGC 并导航到 Q > 飞行器设置 > 固件。 4. 通过 USB 连接你的 Pixhawk 板。 5. 连接成功后,选择 “PX4 飞行栈”,勾选 “高级设置”,然后从下方的下拉菜单中选择 “自定义固件文件 ...”。 6. 继续操作并选择你刚刚在 WSL 中编译的固件二进制文件。 在打开的对话框中,在左侧窗格中查找带有企鹅图标的 “Linux” 位置。该位置通常在最底部。选择路径为 Ubuntu\home\{你的 WSL 用户名}\PX4-Autopilot\build\{你的编译目标}\{你的编译目标}.px4 的文件。 ::: info 你可以将该文件夹添加到收藏夹,以便下次快速访问。 ::: 7. 开始刷写。 更多信息请参考 安装 PX4 主版本、测试版或自定义固件(加载固件)

故障处理

如果你在设置过程中遇到任何问题,请查看当前的 Microsoft WSL 安装文档

我们还建议你安装最新的 Windows GPU 驱动程序,并在 Ubuntu 环境中安装较新版本的 kisak mesa,以便模拟大多数 OpenGL 功能:

sh
sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt update
sudo apt upgrade