构建 PX4#

源代码#

获取 PX4 源代码很容易

sudo apt-get install git
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
bash ./PX4-Autopilot/Tools/setup/ubuntu.sh --no-sim-tools
cd PX4-Autopilot

现在要构建它,您将需要正确的工具。

PX4 构建工具#

完整的说明可在 dev.px4.io 网站上找到,但为方便起见,我们在此处复制了其中相关的部分说明。

(请注意,BashOnWindows)可用于构建 PX4 固件,只需按照此页面底部的 BashOnWindows 说明操作),然后继续进行 PX4 的 Ubuntu 设置。

构建 SITL 版本#

现在,您可以从上面创建的固件文件夹中制作在 posix 中运行的 SITL 版本

make px4_sitl_default none_iris

注意:这个构建系统非常特殊,它知道如何更新 git 子模块(并且有很多),然后它运行 cmake(如果需要),然后它运行构建本身。因此,从某种意义上说,根 Makefile 是一个元元 makefile :-) 您可能会看到如下提示

 *******************************************************************************
 *   IF YOU DID NOT CHANGE THIS FILE (OR YOU DON'T KNOW WHAT A SUBMODULE IS):  *
 *   Hit 'u' and <ENTER> to update ALL submodules and resolve this.            *
 *   (performs git submodule sync --recursive                                  *
 *    and git submodule update --init --recursive )                            *
 *******************************************************************************
每次看到此提示时,在键盘上键入“u”。

它不会花很长时间,大约 2 分钟。如果一切成功,最后一行将链接 `px4` 应用程序,然后您可以使用以下命令运行它

make px4_sitl_default none_iris

您应该会看到如下输出

creating new parameters file
creating new dataman file

______  __   __    ___ 
| ___ \ \ \ / /   /   |
| |_/ /  \ V /   / /| |
|  __/   /   \  / /_| |
| |     / /^\ \ \___  |
\_|     \/   \/     |_/

px4 starting.

18446744073709551615 WARNING: setRealtimeSched failed (not run as root?)
ERROR [param] importing from 'rootfs/eeprom/parameters' failed (-1)
Command 'param' failed, returned 1
  SYS_AUTOSTART: curr: 0 -> new: 4010
  SYS_MC_EST_GROUP: curr: 2 -> new: 1
INFO  [dataman] Unkown restart, data manager file 'rootfs/fs/microsd/dataman' size is 11797680 bytes
  BAT_N_CELLS: curr: 0 -> new: 3
  CAL_GYRO0_ID: curr: 0 -> new: 2293768
  CAL_ACC0_ID: curr: 0 -> new: 1376264
  CAL_ACC1_ID: curr: 0 -> new: 1310728
  CAL_MAG0_ID: curr: 0 -> new: 196616

这很好,第一次运行为 SITL 模式设置 px4 参数。第二次运行的输出较少。这个应用程序也是一个交互式控制台,您可以在其中输入命令。键入“help”查看它们是什么,然后键入 ctrl-C 来终止它。您可以随时这样做并重新启动它,如果您需要(这相当于 Pixhawk 硬件重启),这是一个重置任何不稳定状态的好方法。

ARM 嵌入式工具#

如果您计划为真正的 Pixhawk 硬件构建 PX4 固件,那么您将需要用于 ARM Cortex-M4 芯片组的 gcc 交叉编译器。您可以从 PX4 DevGuide 获取此编译器,特别是它在他们的 `ubuntu_sim_nuttx.sh` 设置脚本中。

按照这些设置说明操作后,您可以通过输入命令 `arm-none-eabi-gcc --version` 来验证安装。您应该会看到以下输出

arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

为 ARM 硬件构建 PX4#

现在您可以构建 PX4 固件以在真实的 Pixhawk 硬件上运行

make px4_fmu-v4

此构建将花费更长的时间,因为它正在构建更多内容,包括 NuttX 实时操作系统、Pixhawk 飞行控制器中传感器的所有驱动程序等等。它还在超大压缩模式下运行编译器,以便它可以将所有这些内容放入 1 兆字节的 ROM 中!!

一个不错的小窍门是,您可以插入 Pixhawk USB,然后键入 `make px4fmu-v2_default upload` 来用这些全新的位刷写硬件,因此您无需为此使用 QGroundControl。

一些有用的参数#

PX4 有许多可自定义的参数(实际上超过 700 个),为了与 AirSim 获得最佳结果,我们发现以下参数很方便

// be sure to enable the new position estimator module:
param set SYS_MC_EST_GROUP 2

// increase default limits on cruise speed so you can move around a large map more quickly.
param MPC_XY_CRUISE 10             
param MPC_XY_VEL_MAX 10
param MPC_Z_VEL_MAX_DN 2

// increase timeout for auto-disarm on landing so that any long running app doesn't have to worry about it
param COM_DISARM_LAND 60

// make it possible to fly without radio control attached (do NOT do this one on a real drone)
param NAV_RCL_ACT 0

// enable new syslogger to get more information from PX4 logs
param set SYS_LOGGER 1

使用 BashOnWindows#

请参阅 Windows 上的 Bash 工具链