常见问题(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更新/发布周期?
- The underlying over-the-wire format is rarely updated (we're only up to MAVLink 2, which was introduced in 2017).
- New messages/microservices are frequently added. 这些更新是后向兼容,用户可定期更新其使用的库以支持新的消息。
- 消息很少被修改(或删除),以防止它们变得不兼容。 如果需要更新,项目将通过更新MAVLink次要版本号,并通过 邮件列表 通知用户(用户也可以在代码中查询版本)。
开发者
- 我可以将 MAVLink 用于封闭的源程序且不用考虑版权问题吗?
- 可以,没有任何使用限制。 The generated MAVLink library headers are made available under the *MIT license* (for more information see: Introduction > License).
- 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的技术支持推荐你所想到的新功能。 Please suggest new features on the MAVLink support channels.
- 如何进一步减少生成的 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. 例如, fastMavlink 生成它比mavgen可以生成更小和更有效率的库(这尚未被 MAVLink 项目验证)。