常见问题(FAQ)
用户
- MAVLink 的传输效率如何?
- MAVLink 是一种高效率的传输协议。 包含起始签名字节和丢包检测在内,MAVLink 1 版本的每个数据包中只有8个字节的额外开销。 MAVLink 2 版本只有14个字节的额外开销(如果使用签名字节的话为27个),但是现已成为可扩展的协议。 MAVLink 1每个数据包只有8个字节的开销, 包括起始标志和数据包丢弃检测。 MAVLink 2 版本只有14个字节的额外开销(如果使用签名字节的话为27个),但是现已成为可扩展的协议。
- MAVLink 可同时支持多少个运载器?
- 255个运动载体,其 ID 号从1到255(0号 ID 为无效 ID)。
Note: 严格说来,MAVLink 可同时支持 255 个系统, 它们中可以是运动载体,GCS ,天线云台和其它硬件。 - MAVLink 可用于哪里?
- 它可用于多个微控制器和操作系统上, 包括 arm7、atmega、dspic、stm32 等微控制器和 windows、linux、macos、android 和 ios 等操作系统。
- MAVLink 的可靠性如何?
- 很可靠。 自2009年以来, MAVLink一直被用于多种载具、地面站 (和其他节点) 之间的通信,而这些通信信道中,不乏各种挑战性(如高延迟、噪声) 。 它具有丢包检测功能,并使用完善的 ITU X.25 算法进行坏包检测。
- MAVLink 的安全性如何?
- MAVLink 提供了 消息签名,系统可用其来验证是否来源于可信的消息源。 MAVLink 并不对消息进行加密处理。 MAVLink 并不对消息进行加密处理。
- MAVLink版本如何选择?
- 应该尽可能使用 MAVLink 2 协议(它修复了早期版本的一些限制)。 MAVLink 2 库也支持 MAVLink 1,所以也可以在需要时使用它们与旧系统通信。
- MAVLink更新/发布周期?
开发者
- 我可以将 MAVLink 用于封闭的源程序且不用考虑版权问题吗?
- 可以,没有任何使用限制。 生成的 MAVLink 库头文件遵循 *MIT 许可证* 发布 。 (有关详细信息,请参阅: 许可证介绍)。
- MAVLink 如何检测数据流中的各类消息并进行解码?
- MAVLink 先等待数据包的起始签名,然后读入数据包的长度并计算其后 n 个字节的校验和。 如果校验和相匹配,则返回解码后的数据包并等待下一个起始签名。 如果某些字节被改变或丢失的话,它将丢弃当前消息,继续尝试解码以后的消息。 如果校验和相匹配,则返回解码后的数据包并等待下一个起始签名。 如果某些字节被改变或丢失的话,它将丢弃当前消息,继续尝试解码以后的消息。
- MAVLink 中只使用了一个起始签名,使用两个或三个起始签名不是更安全吗?
- 不是这样的。 我们使用 CRC 来检测是否可靠接收到一个完整的消息。 使用更多的起始签名可以有更大的可能性检测到起始点,但是并不能增加有效消息的确定性。 因为额外的签名将增加通信负载,所以我们不使用它。
- 系统 ID 和组件 ID 是干什么用的?
- 系统 ID 用来识别特定的 MAVLink 系统(运载器, GCS 等)。 MAVLink 可同时用于 255 个系统。 组件 ID 用于区分一个大系统中的组件,系统中可以包含自动驾驶仪,协处理计算机或照相机,其中每个都可被单独寻址。 MAVLink 可使用组件 ID 用于板间或板外通信。 MAVLink 可同时用于 255 个系统。 组件 ID 用于区分一个大系统中的组件,系统中可以包含自动驾驶仪,协处理计算机或照相机,其中每个都可被单独寻址。 MAVLink 可使用组件 ID 用于板间或板外通信。
- 为什么在 MAVLink 数据包头中要使用序列号?
- MAVLink 是无人飞行器中对安全至关重要的一部分。 较差的通信链路会丢失好多数据包,这会将所监视的飞机置于不安全的状态。 MAVLink 使用数据包头中的序列号来计算丢包率并将其反馈给另一方,使得飞行器或地面站能采取相应措施。
- 为什么要在数据包的校验和中使用 CRC_EXTRA 呢?
- CRC_EXTRA CRC 用来验证发送者和接收者是否都对链路上的消息格式有同样地解释(对于轻量级协议时必须的,因为消息结构信息并不包含在有效载荷中)。
在 MAVLink 0.9 版中没有使用 CRC(尽管检查了数据包的长度)。 如果 XML 所描述的消息内容偶尔被改变而长度没有改变,这样就会破坏消息中的数据域。 - 我可以帮助编解码子程序或增加其它功能吗? 我可以帮助编解码子程序或增加其它功能吗? 可以更改 MAVLink 吗?
- 可以,在安全测试时必须十分小心。 可以,在安全测试时必须十分小心。 作为多个自动驾驶仪中对安全至关重要的组件,MAVLink 已经经历了多年的测试。 请向MAVLink的技术支持推荐你所想到的新功能。 请在 MAVLink 支持频道 上提新功能的建议。
- 如何进一步减少生成的 C 库大小?
- 在资源极受限制的系统中,您可以通过设置
MAVLINK_COMM_NUM_BUFFERS=1和MAVLINK_MAX_PAYLOAD_LEN="可提供最大缓冲区大小" (假设仅有一个普通链路并且你的有效载荷小于MAVLink支持的最大值)。 您还应确保您用来传递到 MAVLink 的任何缓冲区也尽可能小(例如:传递到mavlink_msg_to_send_buffer()的缓冲区)。
Another alternative is to use one of the other generators. For example fastMavlink asserts that it is smaller and more efficient than the libraries generated by mavgen (this has not been validated by the MAVLink project).

