MAVLink微型飞行器的通信协议.pdf
《MAVLink微型飞行器的通信协议.pdf》由会员分享,可在线阅读,更多相关《MAVLink微型飞行器的通信协议.pdf(96页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、各位无人机发烧友们:你们好,最近在研究 Mavlink,发现国内没有中文资料可查,所幸翻译了一些,供大家交流使用。由于时间匆忙翻译得很粗糙,大家明白大意就好啦!有意交流者可通过 与我联系,期待你的出现!mavlink 微型飞行器的通信协议 mavlink 是一个非常轻量级,对微型飞行器数据头信息进行引导的库。它可以高速地传递 c 语言并发送这些数据包到地面控制站。它已被广泛的在PIXHAWK,SLUGS 和 ArduPilotMega 平台上测试,并作为信息传递地主干网对有MCU/IMU 以及 Linux 的进程和地面链路通信进行信息的传递。整合教程 这些教程显示如何在您的自动驾驶仪整合 ma
2、vlink。板板载载集成教程集成教程,使用内建的自使用内建的自动动驾驶驾驶仪仪软软件件 mavlinkmavlink ROSROS(机器人操作系机器人操作系统统)集成教程微型空中集成教程微型空中机器人中机器人中使用使用 mavlinkmavlink mavlink地面控制集成教程适地面控制集成教程适应应 QGroundControlQGroundControl。QGroundControlQGroundControl 用户:虽然用户:虽然mavlink本身不依赖于它,本身不依赖于它,但但 QGroundControlQGroundControl调整的意见和基础调整的意见和基础设置设置都依赖都依
3、赖mavlink的语言的语言。QGroundControlQGroundControl 还还使用使用这个消息跟踪如果一个系统这个消息跟踪如果一个系统不论它是正常的还是断开连接的不论它是正常的还是断开连接的。因此,。因此,请请确确保保每每 6060,3030,1010 或或 1 1 秒(秒(发送发送消息消息 1 Hz1 Hz 的建议,但不要求)的建议,但不要求)Mavlink 编码和驱动 有一个“common message set”包含广泛使用的消息。如果你想使用自己的自定义消息,您可以使用与这些 mavlink 启动器如(C/C+,Python)或QGroundControl。(下载 QGC
4、 请访问 http:/qgroundcontrol.org/downloads)托管 mavlink 二进制版本:https:/ mavlink 消息定义和驱动代码托管:https:/ MAVCONN轻型空中飞行器http:/pixhawk.ethz.ch/software/middleware/start oooArk/MAVSim http:/ mavlink 的 Python 绑定 MAVProxy(允许连接多个 UDP/串行链路,包括 FlightGear 的):git:/git.samba.org/tridge/UAV/MAVProxy.git 使用 mavlink 的项目(使用请点
5、击以下网站)ArduPilotMega http:/ UAV DevBoard http:/ http:/pixhawk.ethz.ch/ETH Flying Machine Arena http:/www.idsc.ethz.ch/Research_DAndrea/FMA ETH SenseSoarSolar airplane project http:/www.sensesoar.ethz.ch/doku.php?id=news ETH Skye Blimp Project http:/www.projectskye.ch/ArduCAM OSD http:/ Santa Cruz SLU
6、GS http:/slugsuav.soe.ucsc.edu/index.html 牌照 mavlink 是 LGPL 的许可,因此可以被用来作为一个库在闭源和开源应用程序的免版税。常见问题(FAQ)从 0.9.0 升级到 1.0.0 问问:是升是升级级容易做容易做吗吗?-是的,v.1.0.0 几乎是完全兼容的 API 与v.0.9.0。只有少数的消息已经改变,像消息协议解析(mavlink_parse_char)的所有功能完全兼容。问问:升升级级的主要好的主要好处处是什么?什么?-1 mavlink 现在使用 little-endian 的编码线,这使得很多在大多数平台上更有效。它仍然支持低
7、端和高端平台。2。现在检查每个消息包格式,所以如果两个通讯伙伴有不同的格式相同的消息,它会检测这种不匹配。3。现在有较小的消息缓冲区的支持。4。参数的协议,现在支持 32 个无符号和有符号整数和浮点值。5。mavlink 现在支持 IEEE 754 双精度浮点数。6。所有邮件都自动生成的测试套件测试,使该协议甚至更安全。7。一些消息已经清理,以更好地适应实际飞行使用。8。mavlink 现在默认 C/C+和 Python 的支持。问问:新版本将很快用于新版本将很快用于?-是的,QGroundControl 完全移植到和ArduPilotMega 和 PIXHAWK 已经将他们的软件移植。不久,
8、所有采用移植到新的版本,只是因为它是没有太多精力。用户 问问:有多少有多少飞飞机确机确实实 mavlink 支持支持-255 型飞机,从 1 到 255 不等。0不是一个有效的飞机编号。问问:如何高效是如何高效是 mavlink?-每包 8 个字节,包括开始的标志和丢包检测,mavlink 是一个非常有效的协议。问问:在哪里可以使用在哪里可以使用 mavlink?-mavlink 已被证明是工作在多个微控制器和操作系统,包括 ARM7 的,ATMEGA,DSPIC,STM32 的和 Windows,LINUX 和 MacOS。问问:安全性如何安全性如何?mavlink-两年多前已用于 mavl
9、ink 在 PIXHAWK MAV的飞行项目,并依靠行之有效的 ITU X.25 的校验数据包损坏的检测。包解剖 这是一个包的解剖。它的灵感来自于 CAN 和 SAE AS-4 标准。字字节节的的索引索引 内容内容 值值 解解释释 0 包开始标志 V1.0:0 xFE 的(V0.9:将 0 x55)表示开始一个新的包。1 有效载荷的长度 0-255 表示以下的有效载荷的长度。2 包序列 0-255 每个组件计数他的发送序列。允许检测丢包 3 系统 ID 1-255 发送系统的 ID。允许在同一网络上区分不同的飞行器。4 组件的ID 0-255 发送组件的 ID。允许在同一系统中区分不同的组件,
10、如 IMU 和自动驾驶仪。5 消息 ID 0-255 消息 ID-ID 定义有效载荷“是指”应如何正确解码。6(N+6)数据(0-255)字节 消息数据,取决于消息的 ID。(N+7)至(n+8)校验和(低字节,高字节)国际电联 X.25/SAE AS-4 拼凑,不含包开始的不含包开始的标标志志,所所以字以字节节 1 1.(n n+6+6)注:校验包括 MAVLINK_CRC_EXTRA(数计算从消息字段保护了不同版本的解码包相同的数据包,但不同的变量)。校验和是相同的,在 ITU X.25 和 SAE AS-4 标准(使用 CRC-16-CCITT 的),SAE 的 AS5669A 记录。请
11、请 mavlink 为为一个文件的一个文件的 C C 执执行它行它。源代源代码码的的链链接接为为 CHECKSUMCHECKSUM 确认无有效载荷包的最小数据包长度为 8 字节 最大包长度是充分有效载荷为 263 字节 支持的数据类型 mavlink 支持固定大小的整数数据类型,IEEE 754 单精度浮点数,这些数据类型的数组(如 char 10)和特别的 mavlink_version 领域,该协议将自动添加。这些类型可供选择:charchar-字符/字符串 uint8_tuint8_t-无符号 8 位 int8_tint8_t-签订 8 位 uint16_tuint16_t-无符号 16
12、 位 int16_tint16_t-16 位签名 uint32_tuint32_t-32 位无符号 int32_tint32_t-符号 32 位 uint64_tuint64_t-无符号 64 位 int64_tint64_t-签名的 64 位 floatfloat-IEEE 754 单精度浮点数 doubledouble-IEEE 754 双精度浮点数 uint8_t_mavlink_version -无符号的 8 位字符自动补充到当前的 mavlink版本-它不能被写入,只是读按照 8 位字符的方式读取。性能 此协议由两大特性:传输速度快和安全性高。它可以检查邮件的内容,它也可以检测丢失的
13、消息,但仍然只需要每个数据包 6 个字节的开销。传输的例子 链链接速度接速度 硬件硬件 更新率更新率 有效有效载载荷荷 floatfloat 值值 115200 波特 2.4 千兆赫的 XBee 50 赫兹 224 字节 56 115200 波特 2.4 千兆赫的 XBee 100 赫兹 109 字节 27 57600 2.4 千兆赫的 XBee 100 赫兹 51 字节 12 9600 波特 XSC 900 的 XBee 50 赫兹 13 个字节 3 9600 波特 XSC 900 的 XBee 20 赫兹 42 字节 10 今后的工作/意见 变长数组 位域的支持(如包装成一个 uint8_
14、t 8 个布尔值,但呼吁所有八个布尔提供的 C 函数。因此,用户不会转移/屏蔽自己摆弄。)多变化的头函数,允许设置目标体系和目标组件(没有协议的变化,唯一的便利功能访问 ROS(机器人操作系统)MAVLink 集成教程 安 装ROS 可 登 录http:/ros.org。在 写 作 此 教 程 时,当 前 版 本 是ROS Fuerte(http:/ros.org/wiki/fuerte/Installation)。MAVLink ROS 桥安装 ETH PIXHAWK 团队提供了一个 MAVLink ROS 桥为最常见的消息。桥之间通过 UART/串行端口和 UDP 连接,传输到装有 MAV
15、Link 和 ROS 实例的计算机上。快速简介$HOME就是你的主目录,如果你的用户名是 John,它保存在 Mac OS/Users/John中。/opt/ros/fuerte 是 ROS 安装的地方。如果你的 ROS 安装到不同的位置,请自行调整。下载文件 ROS 工作区的改变:roscd 或者如果您想有一个不同的目录(我们),将它添加到ROS_PACKAGE_PATH。要做到这一点,编辑$HOME/.bashrc 中(在 Linux 中)或$HOME/.bash_profile(MAC)和采购 ROS 的安装脚本:source/opt/ros/fuerte/setup.sh export
16、 ROS_PACKAGE_PATH=$HOME/src:$ROS_PACKAGE_PATH 这一步后,关闭所有终端,并重新打开 现在去你想要安放 MAVLink 桥或者是 ROS 工作区的地方,目录:roscd 或在不同的目录,如下:CD/src 下载的 MAVLink 桥:git clone https:/ 更改到目录和编译 CD mavlink_ros rosmake 航点协议 航点的协议说明了发送到航点是如何从 MAV 读取的。目标是确保发送方和接收方之间的一致状态。QGroundControl 有一个实施协议,每一个使用 MAVLINK 使用者可以与QGroundControl 沟通和
17、交流,并进行实时的更新。通讯/主机 该协议包括不同的交易,每个交易或成功完成,或在以前的状态在由于接收端的航点列表方式不变而失败。只有当在通信双方之间没有其他的交易是活跃的时候,一个交易才可以启动一个特定的消息。这意味着启动一个交易双方通信双方必须是在空闲状态。如果一个事务开始的状态发生变化时,用这样一个简单的状态机的协议,可以轻松实现。在每次发送的消息,发送组件启动一个计时器。如果没有收到任何答复,直到指定的时间已经过去了,再次请求消息发送。重发时重试的次数,最后重试超时交易失败后,如果没有答案。重试机制意味着所有组件必须能够处理重复消息。阅读 MAV 的航点列表 要检索的所有航点从组件列表
18、WAYPOINT_REQUEST_LIST消息发送。有针对性的组件将响应,说明在其名单的航点数量WAYPOINT_COUNT消息。请求组件会在此时要求每一个序列号 0 开始发送WAYPOINT_REQUEST消息,同时目标组件相应的回答每一个请求包含航点的数据信息waypoint航点。当最后一个航点被成功接收请求组件发送WAYPOINT_ACK消息到目标的组成部分时,交易完成。请注意,有针对性的组件有听到WAYPOINT_REQUEST最后一个航点的消息,直到它得到的WAYPOINT_ACK或启动一个不同的交易或超时发生另一条消息。写写 MAV 的航点列表的航点列表 发送一个航点列表WAYPO
19、INT_COUNT含有清单中的数量航点的消息被发送到目标的组成部分。组件会做好接待准备,并开始从 0 发送检索WAYPOINT_REQUEST所有航点的序列号。航点列表的组件发送应答与所有的请求WAYPOINT消息 当最后一个航点已成功通过有针对性的组件收到,发送WAYPOINT_ACK邮件发送组件。这时交易完成。如果一个航点规划者组件接收waypoint以外的交易的消息,它应以WAYPOINT_ACK消息的形式回应。清除 MAV 的航点列表 在清除航点列表有针对性的组成部分答案WAYPOINT_ACK消息后。要清除一个航点列表组成部分WAYPOINT_CLEAR_ALL的消息发送。设置新的当
20、前 MAV 的航点 在用新的序列号WAYPOINT_CURRENT消息改变目前的航点后,对新的组件设置一个的活跃航点消息WAYPOINT_SET_CURRENT。航点达到 MAV 的状态消息 如果在 MAV 的航点规划者达到一个航点,它广播WAYPOINT_REACHED 的消息。由于 ACK 消息没有通过广播发送,而且也没有接待保证可以被采取。当前航点,改变了从微型飞行器的状态消息 如果在 MAV 的航点规划师,选择当前目标作为其新的航点,广播WAYPOINT_CURRENT 的消息。由于 ACK 消息没有通过广播发送,而且也没有接待保证可以被采取。建议将这个消息发送一个小的延迟,以确保达到
21、所有的接收器,高达两倍概率。图像传输协议 本页面描述影像流功能如何实现,包括实施细则(在 MAV 和 QGroundControl)以及 MAV UND QGroundControl 之间的通信。图像传输协议包括两个模块:一个图像流和视频流组件:图 像 流像 流 组 件 使 用 MAVLink 为 沟 通 渠 道,并 可 以 用 来 运 送 任 何 从 MAV 到QGroundControl 的一种图像。它基本上是一个活的摄像机图像,把它分割成小块再通过 MAVLink 发送。此模块主要用于图像直接传送到 QGroundControl(即 HUD 的组件如下所示)组件的视视频流流为“真实的”M
22、PEG2 格式的视频。它采用现场摄像机图像和 FFmpeg 的视频流进行编码。本模块的主要使用的情况下是观看上几乎任何移动设备(笔记本电脑,智能电话,.),此组件还可以通过移动媒体来发送大量的数据块图像而不尽尽局限于 QGroundControl 或 MAVlink 客户端。视频流,图像流组件的主要优点是更好地融入到 QGroundControl。主要缺点是它需要MAVLink 支持(因此不作为跨 plattform 视频流组件)。通讯 影像串流 图像流组件使用两个 mavlink 消息:一个手动消息,DATA_TRANSMISSION_HANDSHAKE发起,控制和停止图像流;和数据容器的消
23、息,ENCAPSULATED_IMAGE,传输图像数据(见下图)。(1)通信由 QGroundControl 发起请求启动流。要做到这一点,必须设置以下字段在MAVLink 消息:目标:到有针对性的微型飞行器的 ID,状态:通过 0 来发送请求请求,ID:ID 的图像流,注注:形象流光的那一刻,只支持每一个图像类型的流,因此需要你设置ID相同的整数类型的字符。类型:在枚举类型的 mavlink.h 库中的任何MAVLINK_DATA_STREAM_TYPES 频率:大于 0 为“每秒帧数”,低于 0 为“每帧秒数”要求一个特定的图像质量,这是可能的。要做到这一点,你必须设置质量领域。在初始请求
24、里,所有其他领域应该是零。(2)当目标 MAV 的接待 handshake 请求,它发回一个确认,并开始在请求帧率的图像流。要求由 QGroundStation(状态设置为 1,因为它是一个 ACK)handshake ACK 包通常包含相同的值,并增加了关于未来发送图像大小的数据:地址field包含的 MAVLink 中的ENCAPSULATED_DATA包,payload字段指定每个数据包的有效载荷(一般为 252 个字节)的大小,size字段指定以字节为单位的图像大小。(3)图像数据分割成块以适应分为正常 MAVLink 消息。然后将它们装进ENCAPSULATED_DATA包和超过 M
25、AVLink 发送。每个数据包包含一个序列号,以及它属于图像流的 ID。图像流光现在定期发送新的图像而没有进一步交互的需要。每一个新的形象是一个新的DATA_TRANSMISSION_HANDSHAKE与更新图像 ACK 数据包size,packets和payload领域。之后,新图像作为ENCAPSULATED_DATA系列的包到达。注:注:对于每个流的新图像序列号都是从 0开始的。(4)要停止图像数据流,你必须发送一个新的频率设置为 0 的DATA_TRANSMISSION_HANDSHAKE请求数据包。微型飞行器将承认由回送一个 ACK 包,包含在请求相同的数据。视频流 视频传输通信协议
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MAVLink 微型 飞行器 通信协议
限制150内