fmavlink 是一个自定义 MAVLink 协议维护仓库,面向飞控、地面站和其他上层项目提供统一的协议扩展能力。
这个仓库的核心职责是:
- 用 YAML 维护自定义协议源。
- 将 YAML 渲染为标准 MAVLink dialect XML。
- 基于
pymavlink生成 C / C++11 协议头文件。 - 通过
FetchContentCPM等方式作为可复用依赖提供给其他工程使用。
protocols/fmavlink.yaml:总协议入口,负责组织所有模块。protocols/modules/*.yaml:各个自定义协议模块。protocols/modules/_template.yaml:新增协议时可直接复制的模板。generated/xml/:渲染后的 MAVLink dialect XML,目前只保留fmavlink.xml。generated/c/:生成好的 C 协议头文件。generated/cpp11/:生成好的 C++11 协议头文件。message_definitions/v1.0/:生成自定义 dialect 时所需的标准 MAVLink XML 依赖。tools/install_deps.sh:维护者安装生成依赖的快捷脚本。tools/generate.sh:维护者刷新协议生成产物的统一入口。tools/*.py:协议校验、XML 渲染和代码生成脚本。examples/:最小接入示例。
- 标识符使用英文,例如
FM_BATTERY_STATUS。 description可以中文,方便维护。- 消息 ID 需要全仓唯一。
- 新增协议模块时:
- 在
protocols/modules/下新增一个 YAML 文件。 - 可以直接复制
_template.yaml后修改。 - 在
protocols/fmavlink.yaml的modules列表里加入该文件名。 - 执行
./tools/generate.sh刷新产物。
- 在
使用 FetchContent:
include(FetchContent)
FetchContent_Declare(
fmavlink
GIT_REPOSITORY https://github.com/xiethon/fmavlink.git
GIT_TAG main
)
FetchContent_MakeAvailable(fmavlink)
target_link_libraries(your_target PRIVATE fmavlink)使用 CPM:
include(cmake/CPM.cmake)
CPMAddPackage(
NAME fmavlink
GITHUB_REPOSITORY xiethon/fmavlink
GIT_TAG main
)
target_link_libraries(your_target PRIVATE fmavlink)fmavlink 对外只暴露一个统一 target。正常情况下,只需要链接它并包含:
#include <fmavlink/mavlink.h>如果需要 C++11 头文件:
target_link_libraries(your_target PRIVATE fmavlink_cpp11)首次在维护环境中使用前,先安装生成依赖:
./tools/install_deps.sh该脚本会在仓库根目录创建 .venv/,避免向系统 Python 直接安装依赖。
当 YAML 协议有变更时,执行:
./tools/generate.sh