Lazy loaded image
四、高级话题
Words 1237Read Time 4 min
2025-5-6
📃
本节介绍MAVLink一些进阶概念,包括消息签名、路由功能、通用遥测、远控控制和文件格式。以及MAVLink库集成到C项目和Cmake项方法。

一、如何C项目和Cmake项目中添加MAVLink库

1.1 Adding Library to C Project

  1. #include <mavlink/your_dialect/mavlink.h>
⚠️
Only include the header file for a single dialect. If you need to support messages from a
number of dialects then create a new "parent" dialect XML file that includes them (and use its generated header as shown above).
  1. gcc ... -I generated/include …

1.2 Adding Library to Cmake Project

include the headers and install them locally.
use find_package to get the dependency in CMakeLists.txt
And pass the local install directory to cmake (adapt to your directory structure):

二、消息签名

MAVLink 消息签名(认证) 允许 MAVLink 2 系统验证消息是否来自可信来源。
mavgen 生成的 C 库提供了实现 MAVLink 系统消息签名所需的几乎所有内容。主题 C 消息签名 解释了系统必须实现的其余代码,以使用 C 库启用签名。
MavLink 初始化过程

三、路由功能

一个 MAVLINK 网络由多种系统组成(无人机、地面站、天线追踪器等),这些系统可能由一个或多个组件(自动试验、相机、服务器等)组成。
每个系统都有一个网络独有的 系统 id,每个组件都有一个系统独有的 组件 id 可用于地址/路由:
  • 系统id 具有1-255之间的值。
    • 默认自动领航(Autopilot)系统 id通常是 1。 用户应在添加新的自动驾驶仪到网络时分配独特增加的 id 值。
    • GCS 系统和开发者API 通常在数值范围顶部使用ID,以减少ID冲突(例如:255)。 它们的系统ID经常可用于允许多GCS系统。
消息可用于所有系统、特定系统、系统中的所有组件或系统内的特定组件。 协议界定了在报文有效载荷中能够(可选) 指定的两个8位字段,以表明发送/路由。 如果遗漏或设置为零,信息将被视为 广播(用于所有系统/组件)。
  • target_system:执行命令的系统
  • target_component:执行命令的组件 (需要 target_system)。
MAVLink组件处理匹配系统/组件id和广播信息的信息,并会转发收件人信息到其他活动通道上。

路由详细信息

系统/组件如果具备下列条件,应在本地处理信息:
  • 这是一个广播消息(target_system 字段忽略或零)。
  • target_system 与其系统 id 和 target_component 匹配
  • target_system 与其系统ID匹配,并拥有组件的 target_component
  • target_system 匹配其系统id,组件未知 (即此组件没有看到任何信息链接上的消息 target_system/target_component)。
如果以下任一条件存在, 系统应将消息转发到另一个链接:
  • 这是一个广播消息(目标_系统 字段忽略或零)。
  • target_system 与系统ID不符,系统知道目标系统的联系(即它先前从链接的target_system上看到一个消息)。
  • target_system 与其系统 id 匹配, 并具有 target_component 字段, 并且系统在链接上看到了来自 target_system/target_component 组合的消息。
⚠️
系统还应检查 time_boot_ms 减少的 SYSTEM_TIME 消息, 因为这表明系统已重新启动。 在这种情况下, 它应该清除存储的路由信息 (并可能在重新启动后执行其他有用的操作-例如重新提取参数和家庭位置等)。
 

三、通用遥测 General Telemetry

MAVLink 旨在支持发送连续的遥测流, 包括无人机的位置、速度、姿态和类似的关键状态。
 

四、远程控制接口Offboard Control

远程控制界面允许向飞机发送低级和高级姿态、速度或位置命令。

五、文件格式

MAVLink系统往往需要能够储存、交换或恢复MAVLink信息,包括:任务计划、地理围栏定义、集会点、参数、日志等。 通常, 信息是在一个系统上定义, 在另一个系统上使用 (例如, 自动驾驶仪的日志通过分析工具进行分析, 任务是使用 GCS 规划工具创建的, 并从配套计算机运行)。
许多 GCS 系统和开发人员 Api 都使用 defacto 标准来存储 mission 信息: plain-文本文件格式 
上一篇
模板设计模式:让你的代码结构更清晰
下一篇
Guide to Linux System

Comments
Loading...