java实现mavlink协议解析与封包上传数据,实现mavlink数据交互,附带代码、详解
mavLink简介
MAVLink(Micro Air Vehicle Link,微型空中飞行器链路通讯协议)是无人飞行器与地面站(Ground Control Station ,GCS)或云端服务器之间通讯,以及无人飞行器之间通讯最常用的协议。它已经在PX4、APM、PIXHAWK和Parrot AR.Drone飞控平台上进行了大量测试。本篇文章介绍了使用java来进行mavlink协议解析,封包与解包的过程,并附带源码供大家使用。
源码使用
在使用源码前需要引入mavlink的sdk,这里我们在pom.xml文件中添加如下配置:
mavSdk是我们进行mavlink协议解析、封包解包的基础工具,添加好后可以将具体解包、封包的源码放入文件。
源码可以通过本篇文章绑定的资源进行下载。
源码目录如下:
mavlink协议数据包解析类为Parser.java
public class Parser {
static final String TAG = Parser.class.getSimpleName();
static final boolean V = false;
static void logv(String tag, String msg) {
if(V) System.out.println(String.format("%s: %s", tag, msg));
}
/**
* States from the parsing state machine
*/
enum MAV_states {
MAVLINK_PARSE_STATE_UNINIT,
MAVLINK_PARSE_STATE_IDLE,
MAVLINK_PARSE_STATE_GOT_STX,
MAVLINK_PARSE_STATE_GOT_LENGTH,
MAVLINK_PARSE_STATE_GOT_INCOMPAT_FLAGS, // MAVLink 2
MAVLINK_PARSE_STATE_GOT_COMPAT_FLAGS, // MAVLink 2
MAVLINK_PARSE_STATE_GOT_SEQ,
MAVLINK_PARSE_STATE_GOT_SYSID,
MAVLINK_PARSE_STATE_GOT_COMPID,
MAVLINK_PARSE_STATE_GOT_MSGID1,
MAVLINK_PARSE_STATE_GOT_MSGID2, // MAVLink 2
MAVLINK_PARSE_STATE_GOT_MSGID3, // MAVLink 2
MAVLINK_PARSE_STATE_GOT_CRC1,
MAVLINK_PARSE_STATE_GOT_CRC2, // MAVLink 2
MAVLINK_PARSE_STATE_GOT_PAYLOAD,
MAVLINK_PARSE_STATE_GOT_SIGNATURE, // MAVLink 2
}
private MAV_states state = MAV_states.MAVLINK_PARSE_STATE_UNINIT;
public MAVLinkStats stats;
private MAVLinkPacket m;
private boolean isMavlink2;
public Parser() {
this(false);
}
public Parser(boolean ignoreRadioPacketStats) {
stats = new MAVLinkStats(ignoreRadioPacketStats);
isMavlink2 = false;
}
/**
* This is a convenience function which handles the complete MAVLink
* parsing. the function will parse one byte at a time and return the