# 构建 PX4 软件

PX4 可在控制台或集成开发环境中构建,既可用于模拟目标,也可用于硬件目标。

备注

在遵循这些说明之前,您必须首先安装 开发人员工具链 主机操作系统和目标硬件。

TIP

有关常见构建问题的解决方案,请参阅 故障排除 下图

# 下载 PX4 源代码

PX4 源代码存储在 Github 上的 PX4/PX4-自动驾驶仪 (打开新窗口) 存储库。要获取 最新 在终端中输入以下命令:

Git 克隆 https://github.com/PX4/PX4-Autopilot.git --recursive

备注

您只需这样做,就能构建最新的代码。 GIT 示例> 为 PX4 贡献代码 提供了更多关于使用 git 为 PX4 做贡献的信息。

# 首次构建(使用 jMAVSim 模拟器)

首先,我们将使用控制台环境构建一个模拟目标。这样我们就能在使用真实硬件和集成开发环境之前验证系统设置。

导航进入 PX4-自动驾驶仪 目录,并启动 jMAVSim 使用以下命令:

生产 px4_sitl jmavsim

这将显示下面的 PX4 控制台:

PX4 控制台(jMAVSim)

无人机可以通过打字来飞行:

pxh>; 指挥官起飞

jMAVSim UI

通过输入 司令地 就可以停止整个模拟。 CTRL+C (或输入 关闭).

使用地面控制站进行模拟飞行更接近飞行器的实际操作。在飞行器飞行时(起飞飞行模式),点击地图上的某个位置并启用滑块。这将重新定位飞行器。

QGroundControl GoTo

TIP

PX4 可与许多其他设备一起使用。 模拟器包括 仿真场景Gazebo模拟AirSim 仿真.这些也以 生产 - 例如

制作 PX4_SITL 仿真场景Gazebo

# NuttX / 基于 Pixhawk 的开发板

# 为 NuttX 建设

要为基于 NuttX 或 Pixhawk 的电路板构建,请导航至 PX4-自动驾驶仪 目录,然后调用 生产 的目标。

例如,为 Pixhawk 4 硬件,您可以使用以下命令:

CD PX4-自动驾驶仪
生产 px4_fmu-v4_default

一次成功的运行将以类似的输出结果结束:

-- 已将构建文件写入/home/youruser/src/PX4-Autopilot/build/px4_fmu-v4_default
[954/954] 创建 /home/youruser/src/PX4-Autopilot/build/px4_fmu-v4_default/px4_fmu-v4_default.px4

构建目标的第一部分 px4_fmu-v4 表示特定飞行控制器硬件的固件。下面的列表显示了 Pixhawk 标准 棋盘:

非 Pixhawk NuttX 格斗控制器(以及所有其他板卡)的编译命令在各板卡的文档中提供。 飞行控制器板.

备注

_默认 后缀为固件 配置.这是可选项(即您也可以使用 使 px4_fmu-v4, 让 bitcraze_crazyflie等)。

# 上传固件(刷新电路板)

附加 上传 命令,通过 USB 将编译好的二进制文件上传到自动驾驶仪硬件。例如

生产 px4_fmu-v4_default 上传

成功运行后,输出结果如下:

擦除  : [====================] 100.0% 计划: [====================] 100.0% 验证 : [====================] 100.0% 重新启动。
[100%] 内置目标上传

# 其他执行局

其他电路板的编译命令以 板专用飞行控制器页面 (通常在标题下 构建固件).

您还可以使用该命令列出所有配置目标:

生产 list_config_targets

# 在图形化集成开发环境中编译

VSCode 是官方支持(并推荐)的 PX4 开发集成开发环境。它易于设置,可用于在模拟和硬件环境下编译 PX4。

# 故障排除

# 一般构建错误

许多编译问题都是由于子模块不匹配或编译环境清理不彻底造成的。更新子模块并执行 清洁 可以修复这类错误:

git submodule update --recursive make distclean

# 闪存溢出 XXX 字节

闪存 "区域溢出 XXXX 字节 错误表示固件对于目标硬件平台来说过大。这种情况常见于 make px4_fmu-v2_default 闪存大小限制为 1MB。

如果您正在构建 香草精 主分支,最可能的原因是使用了不支持的 GCC 版本。在这种情况下,请安装 开发人员工具链 指示。

如果是构建自己的分支,固件大小可能已超过 1MB 的限制。在这种情况下,您需要从构建中删除任何不需要的驱动程序/模块。

# macOS:打开文件过多错误

MacOS 默认允许所有运行进程最多打开 256 个文件。PX4 构建系统会打开大量文件,因此可能会超过这个数量。

然后,构建工具链将报告 打开的文件太多 如下所示:

/usr/local/Cellar/gcc-arm-none-eabi/20171218/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/bin/ld: 不能 找到 NuttX/nuttx/fs/libfs.a:太多  文件

解决办法是增加允许打开文件的最大数量(例如增加到 300 个)。您可以在 macOS 终端 每届会议:

# macOS Catalina:运行 cmake 时出现问题

从 macOS Catalina 10.15.1 开始,在尝试使用以下软件构建模拟器时可能会出现问题 cmake.如果在此平台上遇到构建问题,请尝试在终端运行以下命令:

xcode-select --install
苏都 ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/

# Ubuntu 18.04:涉及 arm_none_eabi_gcc 的编译错误

与以下方面有关的建设问题 arm_none_eabi_gcc可能是由于 g++ 工具链安装错误所致。您可以使用以下命令检查是否存在缺失的依赖项,以验证情况是否如此:

arm-none-eabi-gcc --version arm-none-eabi-g++ --version arm-none-eabi-gdb --version arm-none-eabi-size --version

缺少依赖项的 bash 输出示例:

arm-none-eabi-gdb --version arm-none-eabi-gdb: 指挥部 未找到

可以通过删除和 重新安装编译器 (打开新窗口).

# Ubuntu 18.04:Visual Studio Code 无法在此大型工作区中监控文件更改

参见 Visual Studio Code IDE (VSCode) > 故障排除.

# 导入 Python 软件包失败

运行时出现"导入失败"错误。 制作 px4_sitl jmavsim 命令表明某些 Python 软件包没有安装(在预期的情况下)。

导入 jinja2 失败:没有名为 "jinja2 "的模块 您可能需要使用以下方法安装: pip3 install --user jinja2

如果您已经安装了这些依赖项,这可能是因为计算机上有多个 Python 版本(例如 Python 2.7.16 Python 3.8.3),而构建工具链使用的版本中没有该模块。

如图所示,您可以通过明确安装依赖项来解决这个问题:

pip3 install --user pyserial empy toml numpy pandas jinja2 pyyaml pyros-genmsg packaging

# PX4 制作目标

前几节介绍了如何调用 生产 来构建许多不同的目标、启动模拟器、使用集成开发环境等。本节将介绍如何 生产 选项的构造,以及如何找到可用的选项。

调用 生产 是特定的配置和初始化文件:

生产 [供应商_][型号][_变量] [查看器模型调试器世界]

供应商型号变量:(又称 配置目标)

  • 供应商: 电路板制造商: px4, 天线, 气管, Atlflight, auav, Beaglebone, 英特尔, nxp等。Pixhawk 系列板卡的供应商名称是 px4.
  • 型号: 板模型 "型号": 坐标, fmu-v2, fmu-v3, fmu-v4, fmu-v5, navio2等等
  • 变体: 表示特殊配置:例如 rtps, lpe,其中包含的组件不存在于 默认 配置。最常见的是 默认可以省略。

TIP

您可以获得以下列表 一应俱全 可用 配置目标 选项:

生产 list_config_targets

viewer_model_debugger_world:

  • 观众: 这是启动和连接的模拟器("查看器"): 仿真场景Gazebo, jmavsim,

    TIP

    可用于启动 PX4 并等待模拟器(jmavsim、gazebo 或其他模拟器)。例如 使 px4_sitl none_iris 在没有模拟器的情况下发射 PX4(但使用光圈机身)。

  • 型号: 汽车 使用的模型(例如 马兰花 (默认), UGV无人车, 尾随者等),模拟器将加载这些变量。环境变量 PX4_SIM_MODEL 将被设置为所选模型,然后在 启动脚本 选择适当的参数。

  • 调试器: 要使用的调试器: (默认), 意识形态, gdb, lldb, ddd, 谷粒, 磨削.更多信息,请参见 模拟调试.

  • 世界: (仅限仿真场景Gazebo)。设置一个世界 (PX4/sitl_gazebo/worlds (打开新窗口)) 被加载。默认值为 空.世界 (打开新窗口).更多信息,请参见 仿真场景Gazebo > 载入特定世界.

TIP

您可以获得以下列表 一应俱全 可用 查看器模型调试器世界 选项:

生产 px4_sitl list_vmd_make_targets

备注

  • 中的大部分数值 配置目标模型调试器 有默认值,因此是可选的。例如 仿真场景Gazebo 相当于 仿真场景Gazebo无仿真场景Gazebo.
  • 如果要在两个其他设置之间指定默认值,可以使用三个下划线。例如 仿真场景Gazebo____gdb 相当于 gazebo_iris_gdb.
  • 您可以使用 模型调试器 启动 PX4 并等待模拟器。例如,使用以下命令启动 PX4 make px4_sitl_default none 和 jMAVSim 使用 ./Tools/jmavsim_run.sh -l.

供应商型号变量 选项映射到特定的 cmake 下的 PX4 源代码树中的配置文件。 /板 (打开新窗口) 目录。特别是 供应商型号变量 映射到配置文件 boards/VENDOR/MODEL/VARIANT.cmake 例如 px4_fmu-v5_default 相当于 boards/px4/fmu-v5/default.cmake (打开新窗口)).

相关章节还讨论了其他制造目标:

# 固件版本和 Git 标记

PX4 固件版本自定义固件版本 使用 MAVLink 自动驾驶版本 (打开新窗口) 信息,并显示在 QGroundControl 设置 > 摘要 机身面板:

固件信息

这些数据是在构建时从活动的 Git 您的 repo 目录树。git 标签的格式应为 <PX4-版本>-<供应商-版本>; (例如,上图中的标签设置为 v1.8.1-2.22.1).

警告

如果使用不同的 git 标签格式,版本信息可能无法正确显示。