构建 PX4 软件
PX4 固件可通过控制台或集成开发环境中的源代码构建,既可用于模拟目标,也可用于硬件目标。
您需要构建 PX4 才能使用 模拟器或者如果您想修改 PX4 并创建自定义构建。如果您只是想在真实硬件上试用 PX4,那么 加载预编译的二进制文件 使用 QGroundControl(无需遵循这些说明)。
下载 PX4 源代码
PX4 源代码存储在 Github 上的 PX4/PX4-自动驾驶仪 存放处。
要获得 最新 ("main")版本,在终端中输入以下命令:
Git 复制 https://github.com/PX4/PX4-Autopilot.git --递归
信息
您只需这样做,就能构建最新的代码。如果需要,您还可以 获取特定版本的源代码. 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
表示固件的目标飞行控制器硬件。后缀,在本例中为 _默认
表示固件 配置例如支持或省略特定功能。
信息
_默认
后缀是可选的。例如 使 px4_fmu-v5
和 px4_fmu-v5_default
结果是相同的固件。
下面的列表显示了 Pixhawk 标准 棋盘:
Holybro Pixhawk 6X-RT (FMUv6X):
make px4_fmu-v6xrt_default
Holybro Pixhawk 6X (FMUv6X):
make px4_fmu-v6x_default
Holybro Pixhawk 6C (FMUv6C):
make px4_fmu-v6c_default
Holybro Pixhawk 6C Mini (FMUv6C):
make px4_fmu-v6c_default
Holybro Pix32 v6 (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 格斗控制器(以及所有其他板卡)的编译命令在各板卡的文档中提供。 飞行控制器板.
上传固件(刷新电路板)
附加 上传
命令,通过 USB 将编译好的二进制文件上传到自动驾驶仪硬件。例如
生产 px4_fmu-v4_default 上传
成功运行后,输出结果如下:
擦除 : [====================] 100.0%
计划 [====================] 100.0%
验证 : [====================] 100.0%
重新启动。
[100%] 建立目标上传
其他执行局
其他电路板的编译命令以 板专用飞行控制器页面 (通常在标题下 构建固件).
您还可以使用该命令列出所有配置目标:
生产 list_config_targets
在图形化集成开发环境中编译
VSCode 是官方支持(并推荐)的 PX4 开发集成开发环境。它易于设置,可用于在模拟和硬件环境下编译 PX4。
故障排除
一般构建错误
许多编译问题都是由于子模块不匹配或编译环境清理不彻底造成的。更新子模块并执行 清洁
可以修复这类错误:
Git 子模组 更新 --递归
生产 清洁
闪存溢出 XXX 字节
区域 'flash' 溢出 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 --安装
苏都 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 --版本
arm-none-eabi-g++ --版本
arm-none-eabi-gdb --版本
arm-none-eabi-size --版本
缺少依赖项的 bash 输出示例:
arm-none-eabi-gdb --版本
arm-none-eabi-gdb: 指挥部 不 发现
可以通过删除和 重新安装编译器.
Ubuntu 18.04:Visual Studio Code 无法在此大型工作区中监控文件更改
参见 Visual Studio Code IDE (VSCode) > 故障排除.
导入 Python 软件包失败
运行时出现"导入失败"错误。 制作 px4_sitl jmavsim
命令表明某些 Python 软件包没有安装(在预期的情况下)。
失败 至 舶来品 jinja2: 没有 模块 名为 'jinja2';
你 可以 需要 至 安装 它 使用:
管道3 安装 --用户 jinja2
如果您已经安装了这些依赖项,这可能是因为计算机上有多个 Python 版本(例如 Python 2.7.16 Python 3.8.3),而构建工具链使用的版本中没有该模块。
如图所示,您可以通过明确安装依赖项来解决这个问题:
管道3 安装 --用户 串行 空的 汤姆 numpy 大熊猫 jinja2 pyyaml pyros-genmsg 包装
PX4 制作目标
前几节介绍了如何调用 生产 来构建许多不同的目标、启动模拟器、使用集成开发环境等。本节将介绍如何 生产 选项的构造,以及如何找到可用的选项。
调用 生产 是特定的配置和初始化文件:
生产 [供应商_][模型][变量] [查看器_模型_调试器_世界]
供应商型号变量:(又称 配置目标
)
- 供应商: 电路板制造商:
px4
,天线
,气管
,Atlflight
,auav
,Beaglebone
,英特尔
,nxp
等。Pixhawk 系列板卡的供应商名称是px4
. - 型号: 板模型 "型号":
坐标
,fmu-v2
,fmu-v3
,fmu-v4
,fmu-v5
,navio2
等等 - 变体: 表示特殊配置:例如
引导程序
,圆锥花序
,其中包含的组件不存在于默认
配置。最常见的是默认
可以省略。
TIP
您可以获得以下列表 一应俱全 可用 配置目标
选项:
生产 list_config_targets
viewer_model_debugger_world:
观众: 这是启动和连接的模拟器("查看器"):
gz
,仿真场景Gazebo
,jmavsim
,无
TIP
无
可用于启动 PX4 并等待模拟器(jmavsim、Gazebo、Gazebo Classic 或其他模拟器)。例如使 px4_sitl none_iris
在没有模拟器的情况下发射 PX4(但使用光圈机身)。型号: 汽车 使用的模型(例如
马兰花
(默认),UGV无人车
,尾随者
等),模拟器将加载这些变量。环境变量PX4_SIM_MODEL
将被设置为所选模型,然后在 启动脚本 选择适当的参数。调试器: 要使用的调试器:
无
(默认),意识形态
,gdb
,lldb
,ddd
,谷粒
,磨削
.更多信息,请参见 模拟调试.世界: (仅限经典仿真场景Gazebo)。设置世界 (PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/worlds) 被加载。默认值为 空.世界.更多信息,请参见 仿真场景Gazebo经典 > 载入特定世界.
TIP
您可以获得以下列表 一应俱全 可用 查看器模型调试器世界
选项:
生产 px4_sitl list_vmd_make_targets
信息
- 中的大部分数值
配置目标
和模型调试器
有默认值,因此是可选的。例如古董
相当于经典伊里斯
或GEGERBO CLASSIC_IRIS_NONE
. - 如果要在两个其他设置之间指定默认值,可以使用三个下划线。例如
gazebo-classic___gdb
相当于gazebo-classic_iris_gdb
. - 您可以使用
无
对模型调试器
启动 PX4 并等待模拟器。例如,使用以下命令启动 PX4make px4_sitl_default none
和 jMAVSim 使用./Tools/simulation/jmavsim/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 标签格式,版本信息可能无法正确显示。