# 系统启动
PX4 的启动由 shell 脚本控制。在 NuttX 上,它们位于 ROMFS/px4fmu_common/init.d (打开新窗口) 文件夹中的脚本--其中一些脚本也用于 Posix(Linux/MacOS)。仅用于 Posix 的脚本位于 ROMFS/px4fmu_common/init.d-posix (打开新窗口).
所有以数字和下划线开头的文件(例如 10000_airplane
) 是预定义的机身配置。它们在构建时被导出到 airframes.xml
文件,该文件由 QGroundControl (打开新窗口) 用于机身选择用户界面。添加新配置 这里.
其余文件是一般启动逻辑的一部分。第一个执行的文件是 init.d/rcS (打开新窗口) 脚本(或 init.d-posix/rcS (打开新窗口) 在 Posix 上),它会调用所有其他脚本。
以下部分根据 PX4 运行的操作系统进行了划分。
# Posix(Linux/MacOS)
在 Posix 中,系统 shell 被用作脚本解释器(例如 /bin/sh,在 Ubuntu 中被链接到 dash)。要做到这一点,需要做以下几件事:
PX4 模块需要在系统中看起来像单独的可执行文件。这是通过符号链接实现的。每个模块都有一个符号链接
px4-<module> -> px4
在箱柜
文件夹下的二进制路径。执行时,将检查二进制路径 (argv[0]
),如果它是一个模块(以px4-
),就会将命令发送到主 px4 实例(见下文)。TIP
px4-
前缀,以避免与系统命令(如关闭
),还可以通过键入px4-<TAB>;
.shell 需要知道在哪里可以找到符号链接。为此
箱柜
目录中添加了符号链接。路径
变量。shell 会将每个模块作为一个新的(客户端)进程启动。每个客户进程都需要与 px4 的主实例(服务器)进行通信,而实际的模块则作为线程运行。这是通过 UNIX 插座 (打开新窗口).服务器通过套接字监听,客户端可以连接并发送命令。然后,服务器将输出和返回代码发送回客户端。
启动脚本直接调用模块,例如
指挥官启动
而不是使用px4-
前缀。这是通过别名实现的:每个模块都有一个以别名<模块>=px4-<模块>;
文件中创建bin/px4-alias.sh
.rcS
脚本在主 px4 实例中执行。它不会启动任何模块,而是首先更新路径
变量,然后使用rcS
文件作为参数。此外,还可启动多个服务器实例进行多载具模拟。客户端通过
--实例
.该实例可通过$px4_instance
变量。
当 PX4 已在系统上运行时,可从任何终端执行这些模块。例如
cd <PX4-Autopilot>/build/px4_sitl_default/bin ./px4-commander takeoff ./px4-listener sensor_accel
# 动态模块
通常情况下,所有模块都编译到一个 PX4 可执行文件中。不过,在 Posix 上,可以选择将模块编译成单独的文件,然后使用 动态
指挥。
dyn ./test.px4mod
# NuttX
NuttX 集成了 shell 解释器 (NuttShell (NSH) (打开新窗口)),因此可以直接执行脚本。
# 调试系统启动
软件组件驱动程序的故障不会导致启动中止。这可通过 设置+e
在启动脚本中。
可以通过连接 系统控制台 并重新启动电路板。生成的启动日志包含有关启动顺序的详细信息,并应包含启动中止原因的提示。
# 常见启动失败原因
- 自定义应用程序:系统内存不足。运行
免费的
命令来查看可用内存量。 - 导致堆栈跟踪的软件故障或断言
# 更换系统启动
在大多数情况下,定制默认启动程序是更好的方法,下文将对此进行说明。如果要替换整个启动程序,请创建一个文件 /fs/microsd/etc/rc.txt
位于 等等
文件夹。如果存在该文件,系统将不会自动启动。
# 自定义系统启动
自定义系统启动的最佳方法是引入一个 新机身配置.如果只想进行一些调整(如多启动一个应用程序或使用不同的混音器),可以使用启动时的特殊钩子。
警告
系统引导文件是 UNIX 文件,需要 UNIX 行尾。如果在 Windows 上编辑,请使用合适的编辑器。
主要有三个钩子。请注意,microsd 卡的根文件夹由以下路径标识 /fs/microsd
.
- /fs/microsd/etc/config.txt
- /fs/microsd/etc/extras.txt
- /fs/microsd/etc/mixers/NAME_OF_MIXER
# 自定义配置(config.txt)
config.txt
文件可用于修改 shell 变量。该文件在主系统配置完成后加载,并且 之前 已启动。
# 启动其他应用程序
extras.txt
可用于在主系统启动后启动其他应用程序。这些应用程序通常是有效载荷控制器或类似的可选定制组件。
警告
调用系统引导文件中的未知命令可能会导致引导失败。通常情况下,启动失败后系统不会流式传输 mavlink 信息,在这种情况下,请检查系统控制台上打印的错误信息。
下面的示例显示了如何启动自定义应用程序:
- 在 SD 卡上创建文件
etc/extras.txt
有这些内容:自定义应用程序启动
- 通过使用
设置+e
和set -e
命令:set +e optional_app start # 如果 optional_app 未知或启动失败,将不会导致启动失败 set -e mandatory_app start # 如果 mandatory_app 未知或启动失败,将中止启动
# 启动自定义混合器
默认情况下,系统会从 /etc/mixers
.如果在 /fs/microsd/etc/mixers
该文件将被加载。这样就可以定制混音器文件,而无需重新编译固件。
# 示例
下面的示例显示了如何添加自定义辅助混音器:
- 在 SD 卡上创建文件、
etc/mixers/gimbal.aux.mix
与您的龙头内容。 - 然后创建一个附加文件
etc/config.txt
有这些内容:设置 MIXER_AUX 云台 设置 PWM_AUX_OUT 1234 设置 PWM_AUX_DISARMED 1500 设置 PWM_AUX_MIN 1000 设置 PWM_AUX_MAX 2000 设置 PWM_AUX_RATE 50