Skip to content

构建 PX4 软件

无论对于模拟器还是硬件目标设备,PX4固件可以在控制台或者IDE中从源码构建

您需要构建PX4才能使用模拟器,或者如果您想修改PX4并创建自定义构建。 如果您只是想在真实硬件上尝试PX4,那么可以使用QGroundControl来加载预先构建的二进制文件(无需遵循这些说明)。

在跟随这些指示之前,必须首先为主机操作系统和目标硬件安装 <开发者工具链。 如果您在按照这些步骤之后遇到任何问题,请查看下面的故障排除部分。 若要在您的计算机上获得最新的版本,请在终端中输入以下命令:

下载 PX4 源代码

PX4 源代码存储在GitHub 上的PX4/Firmware 存储库中。

若要在您的计算机上获得_最新的_(main分支)版本,请在终端中输入以下命令:

sh
git clone https://github.com/PX4/PX4-Autopilot.git --recursive

注意,您可能在安装开发工具链时已经完成了这项操作

你只需要执行它就能够得到最新的代码。 如果需要,您还可以获取特定版本的源代码GIT 示例 提供了更多关于与发布和向 PX4 贡献工作的信息。 这使我们能够在进入真正的硬件和 IDE 之前验证系统设置。

初次构建(使用模拟器)

首先我们要用控制台环境来构建一个模拟器目标 这使我们能够在转移到真正的硬件和 IDE 之前验证系统设置。

导航到 PX4-Autopilot 目录。 根据您的操作系统,您将安装Gazebo SITLGazebo Classic SITL(如果您不知道,可以尝试两者)。

::::

这将显示 PX4 控制台:

PX4 控制台

在继续之前, 您可能需要启动_QGroundControl_,因为默认 PX4 配置需要在起飞前与地面站连接。 它可以从这里下载。 运行成功后将输出类似结束:

可以通过键入以下命令(如上方控制台中所示)来控制飞行器。

sh
pxh> commander takeoff

该机体将起飞,您将在模拟器UI中看到:

::::

无人机可以通过输入 commander land 着陆,,整个模拟可以通过 CTRL+C(或输入 shutdown)来停止。

与地面站一起飞模拟器更接近飞机的实际运行。 在飞机飞行时(Takeoff飞行模式),单击地图上的某个位置并启用滑块。 这将重新定位飞机。

QGroundControl 跳转

基于NuttX / Pixhawk 的飞控板

为NuttX构建

要构建基于 Nuttx 或 Pixhawk 的飞控板,请跳转到PX4-Autopilo目录,然后调用 make加上你的板子的构建目标 来构建。

例如,要为Pixhawk 4构建,您将使用以下命令:

sh
cd PX4-Autopilot
make px4_fmu-v5_default

运行成功后将输出类似结果:

sh
-- Build files have been written to: /home/youruser/src/PX4-Autopilot/build/px4_fmu-v4_default
[954/954] Creating /home/youruser/src/PX4-Autopilot/build/px4_fmu-v4_default/px4_fmu-v4_default.px4

构建目标px4_fmu-v4的第一部分表示固件适用的飞控硬件。 后缀,在这种情况下为 _default, 表示一个固件 配置, 例如支持或忽略特定的功能。

_default后缀是可选的。 例如,make px4_fmu-v5make px4_fmu-v5_default 会产生相同的固件。 若要在您的计算机上获得最新的版本,请在终端中输入以下命令:

以下列表显示了为 Pixhawk 标准板构建命令:

WARNING

必须 使用受支持的GCC版本来为这个板子构建(比如,和用于CI/docker的一样)或者从构建中删除模块。 Building with an unsupported GCC may fail, as PX4 is close to the board's 1MB flash limit. 若要在您的计算机上获得最新的版本,请在终端中输入以下命令:

  • Pixhawk 1 with 2 MB flash: make px4_fmu-v3_default

Build commands for non-Pixhawk NuttX fight controllers (and for all other-boards) are provided in the documentation for the individual flight controller boards.

将固件烧录到飞控板

在make 命令后面附加 upload,通过 USB 将编译的二进制文件烧录到自动驾驶仪硬件。 例如

sh
make px4_fmu-v4_default upload

运行成功后将有以下输出:

sh
Erase  : [====================] 100.0%
Program: [====================] 100.0%
Verify : [====================] 100.0%
Rebooting.

[100%] Built target upload

其他飞控板

为其他板使用的构建命令在特定板子的飞控页面提供(通常在_构建固件_标题下)。

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

sh
make list_config_targets

用图形界面 IDE 编译

VSCode 是 PX4 开发的官方支持(和推荐)的集成开发环境。 It is easy to set up and can be used to compile PX4 for both simulation and hardware environments.

故障处理

常规构建错误

许多构建问题是由不匹配的子模块或未完全清理的构建环境引起的。 更新子模块并进行 distclean 可以修复这类错误:

sh
git submodule update --recursive
make distclean

闪存溢出了 XXX 字节

region 'flash' overflowed by XXXX bytes 错误表明固件对目标硬件平台太大了。 这在构建make px4_fmu-v2_default时很常见,它的闪存大小限制为1MB。

如果您正在构建_基础版_master分支,则最可能的原因是使用不受支持的GCC版本。 在这种情况下,请安装开发工具链指定的版本。

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

macOS:打开文件过多错误

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

构建工具链将随后报告Too many open files,如下所示:

sh
/usr/local/Cellar/gcc-arm-none-eabi/20171218/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/bin/ld: cannot find NuttX/nuttx/fs/libfs.a: Too many open files

解决方案是增加允许打开文件的最大数量(例如增加到300)。 您可以在每个会话的 macOS 终端 中执行此操作:

macOS Catalina:运行cmake时出现问题

对于 macOS Catalina 10.15.1 ,在尝试使用 cmake 构建模拟器时可能会遇到问题。 如果您在这个平台上遇到构建问题,请尝试在终端中运行以下命令:

sh
xcode-select --install
sudo 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++工具链安装引起的。 您可以通过检查缺少的依赖项来验证这一点:

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

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

sh
arm-none-eabi-gdb --version
arm-none-eabi-gdb: command not found

可以通过删除和 重新安装编译器 来解决这个问题。

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

请参阅 Visual Studio 代码 IDE (VSCode) > 疑难解答

导入Python软件包失败

在运行 make px4_sitl jmavsim 命令时,“导入失败”错误表示某些Python 软件包未安装(但是必需的)。

sh
Failed to import jinja2: No module named 'jinja2'
您可能需要使用以下方式进行安装:
    pip3 install --user jinja2

如果您已经安装了这些依赖关系,这可能是因为计算机上存在多个 Python 版本(例如 Python 2.7.16 和 Python 3.8.3),并且该模块不存在于构建工具链使用的版本中。

您应该能够按照所示明确安装依赖项来解决此问题。

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

PX4 创建生成目标

前面的部分演示了如何调用 make 来构建多个不同的目标、启动模拟器、使用 IDE 等。 本节介绍如何构造 make 选项以及如何查找可用选项。

使用特定的 配置 和 初始化文件 调用 make 的完整语法是:

sh
make [VENDOR_][MODEL][_VARIANT] [VIEWER_MODEL_DEBUGGER_WORLD]

VENDOR_MODEL_VARIANT: (也称为 CONFIGURATION_TARGET)

  • VENDOR: 飞控板制造商:px4aerotennaairmindatlflightauavbeagleboneintelnxp等。 Pixhawk 系列飞控板的制造商是 PX4
  • MODEL: 飞控板型号sitlfmu-v2fmu-v3fmu-v4fmu-v5navio2 等。
  • **VARIANT:**指示特定配置:例如bootloader, cyphal,,其中包含 默认 配置中不存在的组件。 最常见的是 default,可以省略。

TIP

您可以使用下面的命令获取 所有 可用的 CONFIGURATION_TARGET 选项的列表:

sh
make list_config_targets

VIEWER_MODEL_DEBUGGER_WORLD:

  • **VIEWER:**这是启动和连接的模拟器("查看器"):gazebo, jmavsim, none

TIP

none 可以用于启动 PX4 并等待模拟器(jmavsim、Gazebo、Gazebo Classic 或其他一些模拟器)。 例如,make px4_sitl none_iris 启动 PX4 而不带模拟器(但带有iris机架)。 若要在您的计算机上获得最新的版本,请在终端中输入以下命令:

您可以使用下面的命令获取_所有_ 可用的 VIEWER_MODEL_DEBUGGER 选项的列表:

sh
make px4_sitl list_vmd_make_targets

INFO

  • CONFIGURATION_TARGETVIEWER_MODEL_DEBUGGER 中的大多数值都有默认值, 因此是可选的。 比如,gazebo-classic 相当于 gazebo-classic_irisgazebo-classic_iris_none
  • 如果要在其他两个设置之间指定默认值,可以使用三个下划线。 比如,gazebo-classic___gdb 相当于 gazebo-classic_iris_gdb
  • 您可以使用 VIEWER_MODEL_DEBUGGERnone 值启动 PX4 并等待模拟器。 例如,使用 make px4_sitl_default none 启动 PX4和使用./Tools/simulation/jmavsim/jmavsim_run.sh -l启动 jMAVSim 。

VENDOR_MODEL_VARIANT 选项映射到 PX4 源代码树中 /boards 目录下的特定 px4board 配置文件。 具体而言 VENDOR_MODEL_VARIANT 映射到配置文件 boards/VENDOR/MODEL/VARIANT.cmake(例如 px4_fmu-v5_default 对应于 boards/px4/fmu-v5/default.px4board)。

其他 make 目标在相关章节中讨论:

固件版本& Git 标签

PX4 固件版本自定义固件版本 使用 MAVLink AUTOPILOT_VERSION 消息发布, 显示在 QGroundControl 设置 > 摘要 机架面板:

固件信息

这些是在构建时从您存储库树的活动的_git tag_提取的。 Git 标签应该格式为 <PX4版本>-<制造商版本> (例如上面图像中的标签设置为 v1.8.1-2.22.1

WARNING

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