外部模块(树外)
外部模块为开发人员提供了一种方便的机制,用于管理/分组他们希望添加到(或更新到)PX4 固件中的专有模块。外部模块可使用与内部模块相同的内容,并可通过 uORB 与内部模块交互。
本主题介绍如何在 PX4 构建中添加外部模块(树外模块)。
TIP
我们鼓励您在可能的情况下为 PX4 提供修改意见!
使用方法
创建外部模块
创建一个 外部目录 文件夹,用于对外部模块进行分组:
- 它可以位于 PX4-自动驾驶仪 树
- 它的结构必须与 PX4-自动驾驶仪 (即它必须包含一个名为 来源).
- 稍后,我们将使用
外部模块位置
.
复制现有模块(例如 例子/px4_simple_app)到外部目录,或直接创建一个新模块。
重命名模块(包括
单元
于 CMakeLists.txt)或从现有的 PX4-Autopilot 中移除它 cmake 构建配置。这是为了避免与内部模块发生冲突。添加文件 CMakeLists.txt 外部目录中的内容:
cmake设置(config_module_list_external modules/<new_module>; PARENT_SCOPE )
添加一行
外部
到modules/<new_module>/CMakeLists.txt
内px4_add_module()
例如cmakepx4_add_module( MODULE modules__test_app MAIN test_app stack_main 2000 SRCS px4_simple_app.c 取决于 平台__通用 外部 )
树外 uORB 报文定义
uORB 报文也可以在树外定义。为此 $EXTERNAL_MODULES_LOCATION/msg
文件夹必须存在。
将所有新信息定义放在
$EXTERNAL_MODULES_LOCATION/msg
目录。这些新的树外报文定义的格式与其他报文定义相同。 uORB 报文定义.添加文件
$EXTERNAL_MODULES_LOCATION/msg/CMakeLists.txt
有内容:cmake设置(配置_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 变量。
对于后续的增量构建 外部模块位置
无需指定。