# 构建 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 控制台:
备注
您可能需要开始 QGroundControl 因为 PX4 默认配置要求在起飞前连接地面控制。这可以 从此处下载 (打开新窗口).
无人机可以通过打字来飞行:
pxh>; 指挥官起飞
通过输入 司令地
就可以停止整个模拟。 CTRL+C (或输入 关闭
).
使用地面控制站进行模拟飞行更接近飞行器的实际操作。在飞行器飞行时(起飞飞行模式),点击地图上的某个位置并启用滑块。这将重新定位飞行器。
# NuttX / 基于 Pixhawk 的开发板
# 为 NuttX 建设
要为基于 NuttX 或 Pixhawk 的电路板构建,请导航至 PX4-自动驾驶仪 目录,然后调用 生产
的目标。
例如,为 Pixhawk 4 硬件,您可以使用以下命令:
CD PX4-自动驾驶仪
生产 px4_fmu-v5_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 标准 棋盘:
- Holybro Pixhawk 6X (FMUv6X):
make px4_fmu-v6x_default
- Holybro Pixhawk 6C (FMUv6C):
make px4_fmu-v6c_default
- Holybro Pixhawk 5X (FMUv5X):
make px4_fmu-v5x_default
- Pixhawk 4 (FMUv5):
make px4_fmu-v5_default
- Pixhawk 4 Mini (FMUv5):
make px4_fmu-v5_default
- CUAV V5+ (FMUv5):
make px4_fmu-v5_default
- CUAV V5 nano(FMUv5):
make px4_fmu-v5_default
- Pixracer (FMUv4):
make px4_fmu-v4_default
- Pixhawk 3 Pro:
make px4_fmu-v4pro_default
- 迷你 Pixhawk:
make px4_fmu-v3_default
- Pixhawk 2(黑色立方体)(FMUv3):
make px4_fmu-v3_default
- mRo Pixhawk (FMUv3):
make px4_fmu-v3_default
(支持 2MB 闪存) - Holybro pix32 (FMUv2):
make px4_fmu-v2_default
- Pixfalcon (FMUv2):
make px4_fmu-v2_default
- Dropix (FMUv2):
make px4_fmu-v2_default
- Pixhawk 1 (FMUv2):
make px4_fmu-v2_default
警告
你 必须 使用受支持的 GCC 版本来构建该电路板(例如与 CI/docker)或从构建中删除模块。使用不支持的 GCC 进行编译可能会失败,因为 PX4 已接近电路板的 1MB 闪存限制。
- 带 2 MB 闪存的 Pixhawk 1:
make px4_fmu-v3_default
非 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 终端 每届会议:
- 运行此脚本 Tools/mac_set_ulimit.sh (打开新窗口)或
- 输入此命令:
限制 -S -n 300
# 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 empty 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 并等待模拟器。例如,使用以下命令启动 PX4make px4_sitl_default none
和 jMAVSim 使用./Tools/jmavsim_run.sh -l
.
供应商型号变量
选项映射到特定的 px4board 下的 PX4 源代码树中的配置文件。 /板 (打开新窗口) 目录。特别是 供应商型号变量
映射到配置文件 boards/VENDOR/MODEL/VARIANT.px4board
例如 px4_fmu-v5_default
相当于 boards/px4/fmu-v5/default.px4boards (打开新窗口)).
相关章节还讨论了其他制造目标:
臃肿的比较大师
: 二进制大小剖析- ...
# 固件版本和 Git 标记
PX4 固件版本 和 自定义固件版本 使用 MAVLink 自动驾驶版本 (打开新窗口) 信息,并显示在 QGroundControl 设置 > 摘要 机身面板:
这些数据是在构建时从活动的 Git 您的 repo 目录树。git 标签的格式应为 <PX4-版本>-<供应商-版本>;
(例如,上图中的标签设置为 v1.8.1-2.22.1
).
警告
如果使用不同的 git 标签格式,版本信息可能无法正确显示。