# 外部模块(树外)

外部模块为开发人员提供了一种方便的机制,用于管理/分组他们希望添加到(或更新到)PX4 固件中的专有模块。外部模块可使用与内部模块相同的内容,并可通过 uORB 与内部模块交互。

本主题介绍如何在 PX4 构建中添加外部模块(树外模块)。

TIP

我们鼓励您在可能的情况下为 PX4 提供修改意见!

# 使用方法

创建外部模块

  • 创建一个 外部目录 文件夹,用于对外部模块进行分组:

    • 它可以位于 PX4-自动驾驶仪
    • 它的结构必须与 PX4-自动驾驶仪 (即它必须包含一个名为 来源).
    • 稍后,我们将使用 外部模块位置.
  • 复制现有模块(例如 例子/px4_simple_app)到外部目录,或直接创建一个新模块。

  • 重命名模块(包括 单元CMakeLists.txt)或从现有的 PX4-Autopilot 中移除它 cmake 构建配置。这是为了避免与内部模块发生冲突。

  • 添加文件 CMakeLists.txt 外部目录中的内容:

    set(config_module_list_external modules/<new_module> PARENT_SCOPE )
    
  • 添加一行 外部modules/<new_module>/CMakeLists.txtpx4_add_module()例如

    px4_add_module( MODULE modules__test_app MAIN test_app STACK_MAIN 2000 SRCS px4_simple_app.c DEPENDS platforms__common EXTERNAL )
    

# 树外 uORB 报文定义

uORB 报文也可以在树外定义。为此 $EXTERNAL_MODULES_LOCATION/msg 文件夹必须存在。

  • 将所有新信息定义放在 $EXTERNAL_MODULES_LOCATION/msg 目录。这些新的树外报文定义的格式与其他报文定义相同。 uORB 报文定义.

  • 添加文件 $EXTERNAL_MODULES_LOCATION/msg/CMakeLists.txt 有内容:

    set(config_msg_list_external <message1>.msg <message2>.msg <message3>.msg PARENT_SCOPE )
    

    其中 <message#>.msg 是要处理的 uORB 报文定义文件的名称,用于生成 uORB 报文。

树外 uORB 信息将在与普通 uORB 信息相同的位置生成。uORB 主题头在 build_dir>/uORB/topics/中生成报文源文件。 <build_dir>/msg/topics_sources/.

新的 uORB 报文可以像其他 uORB 报文一样使用,如下所述 这里.

警告

树外 uORB 报文定义的名称不能与任何正常 uORB 报文的名称相同。

# 构建外部模块和 uORB 消息

执行 make px4_sitl EXTERNAL_MODULES_LOCATION=<path>;.

可以使用任何其他编译目标,但编译目录必须尚未存在。如果已经存在,也可以只设置 cmake 变量。

对于后续的增量构建 外部模块位置 无需指定。