Mavlink 通讯协议与新消息生成方法

简介: Mavlink 通讯协议与新消息生成方法

Mavlink 概念

Mavlink 的全称是 Micro Air Vehicle link

一些飞控(pixhawk)把它作为与地面站通信的手段

有了 它通信变的有序且简洁。

自身完成了封包的工作,需要新的传输变量可以方便的添加

mavlink的强大一部分源于支持的语言多达4种,不仅支持windows和linux,同时封包、发送的机制全部自动生成,这一点比较节省开发周期

Mavlink封包的数据包数据格式

在这里插入图片描述
Mavlink传输时的基本单位是消息帧。协议设计的目标是传输速度和安全性。它允许消息内容检查、消息丢失检测 ;每个数据包需要6 字节报头。每次发完一个消息,SEQ的内容会加1,加到255后会从0重新开始。这个序号用于mavlink消息帧接收端计算消息丢失比例用的,在地面站处理中相当于是信号强度。

这个不用关心,理解就可以。毕竟是自动完成封包的。

Mavlink 安装

下载软件进入mavlink官网
以前的官网
mavlink下载地址
现在好像不能用了。。。

自己上传一个吧

生成新的Mavlink消息包

1、修改common.xml或ardupilotmega.xml文件

路径如下图
在这里插入图片描述
以common.xml 为例
开头是这样的
在这里插入图片描述
找到最下边
下面基本上都是这种结构,找 没有使用的id
注意和 ardupilotmega.xml 对比 着看 , id不能重复,
在这里插入图片描述

180-229 是没有使用的 ,新加的可以在这个范围内在这里插入图片描述

新增自己的消息包

仿照 原有的写就可以了

    <message id="180" name="YOUR_MSG_NAME">// 你生成的消息包的id 和名称
      <description>your description</description> // 说明
      <field type="float" name="a"></field>  // 变量的类型 和名称
      <field type="uint64_t" name="b"></field>
      <field type="uint8_t" name="c"></field>
      <field type="uint16_t" name="d"></field>
      <field type="int32_t" name="e"></field>
    </message>    

2、自动生成

在这里插入图片描述
到MAVLINK/mavlink路径下
打开终端

$ python mavgenerate.py 

出现交互窗口如下
在这里插入图片描述
不用点击 Browse 了,没有用
XML里写入 common.xml或ardupilotmega.xml(在哪个里面添加的写哪个)
Out 里写入 要输出的路径,一般放
在这里插入图片描述
语言看用的场合 ,单片机 什么的 肯定用C
点后会下拉几种语言
在这里插入图片描述
然后点击Generate就可以了

3、查找自己的文件

自己的文件在Out设置的路径下面
C语言生成的文件名称为
mavlink_msg_your_name.h
Java语言生成的文件名称为
msg_your_name.java

相关文章
|
4月前
|
Java
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
|
4月前
|
消息中间件 存储 监控
AMQP 与其他消息协议的对比分析
【8月更文第28天】高级消息队列协议 (AMQP) 是一种开放标准的应用层协议,主要用于消息中间件。本文将对比分析 AMQP 与其他流行的协议如 MQTT 和 RMQ(通常指的是 RabbitMQ),探讨它们的特点以及适合的应用场景。
78 0
|
7月前
|
设计模式 监控 网络协议
socket通信处于网络协议那一层和两种接收发送消息方式
socket通信处于网络协议那一层和两种接收发送消息方式
89 2
|
7月前
|
前端开发 网络协议 JavaScript
如何在前端实现WebSocket发送和接收TCP消息(多线程模式)
请确保在你的服务器端实现WebSocket的处理,以便它可以接受和响应前端发送的消息。同时,考虑处理错误情况和关闭连接的情况以提高可靠性。
545 0
|
7月前
|
物联网 Go 网络性能优化
MQTT协议本身支持多种消息收发模式
MQTT协议本身支持多种消息收发模式【1月更文挑战第24天】【1月更文挑战第120篇】
168 3
|
Nacos
Netty自定义消息协议的实现逻辑处理粘包拆包、心跳机制
Netty自定义消息协议的实现逻辑处理粘包拆包、心跳机制
167 0
|
存储 网络协议 物联网
C语言代码封装MQTT协议报文,了解MQTT协议通信过程
MQTT是一种轻量级的通信协议,适用于物联网(IoT)和低带宽网络环境。它基于一种“发布/订阅”模式,其中设备发送数据(也称为 “发布”)到经纪人(称为MQTT代理),这些数据被存储,并在需要时被转发给订阅者。这种方式简化了网络管理,允许多个设备在不同的网络条件下进行通信(包括延迟和带宽限制),并支持实时数据更新。它是开放的,可免费使用并易于实施。
451 0
|
消息中间件 网络协议 Java
消息协议
消息协议
110 0
|
网络性能优化
mqtt协议中的发送消息的一个报文简单解释
mqtt协议中的发送消息的一个报文简单解释
691 0
mqtt协议中的发送消息的一个报文简单解释
|
网络协议 算法 API
网络协议之:WebSocket的消息格式
网络协议之:WebSocket的消息格式