# 系统启动

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 有这些内容:
    自定义应用程序启动
    
  • 通过使用 设置+eset -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