Skip to content

Building PX4

# 构建 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](https://docs.px4.io/master/en/dev_setup/building_px4.html) 网站找到,
但我们在这里复制了相关的部分以方便你。

(请注意, [BashOnWindows](https://msdn.microsoft.com/en-us/commandline/wsl/install_guide) 可以用来构建
PX4 固件,只需按照该页面底部的 BashOnWindows 指示操作,然后继续进行 PX4 的 Ubuntu 设置。)

## 构建 SITL 版本

现在你可以从你之前创建的 Firmware 文件夹中构建运行在 posix 上的 SITL 版本:

make px4_sitl_default none_iris


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

```shell
 *******************************************************************************
 *   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

现在你可以为实际的 Pixhawk 硬件构建 PX4 固件:

make px4_fmu-v4

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

一个好的小提示是,你可以插入你的 Pixhawk USB,并输入 make px4fmu-v2_default upload 将这些全新的 bits 刷写到硬件中,因此你无需使用 QGroundControl。

一些有用的参数

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

// 一定要启用新的位置估算模块:
param set SYS_MC_EST_GROUP 2

// 增加巡航速度的默认限制,以便你可以更快地在大地图上移动。
param MPC_XY_CRUISE 10             
param MPC_XY_VEL_MAX 10
param MPC_Z_VEL_MAX_DN 2

// 增加着陆时自动解锁的超时时间,以便任何长期运行的应用程序无须担心这个问题
param COM_DISARM_LAND 60

// 使飞行时不需要无线电控制(切勿在真实无人机上这样做)
param NAV_RCL_ACT 0

// 启用新的系统日志记录器,以获取 PX4 日志中的更多信息
param set SYS_LOGGER 1

使用 BashOnWindows

请参见 Bash on Windows Toolchain。 ```