MAVLink

      MAVLink 是一种用于飞行器上的轻量级成熟通信协议,与很多自定的协议相比,它的开发难度非常小,有现成的配置工具,可直接生成MSG代码(简单来说,就是生成对应的函数接口供你直接调用即可),直接调用几个相应的函数接口即可,不需要自己封装、解析等;突出的优点在于配置调用比较简单


Pixhawk/APM都是采用MAVLINK协议实现的飞控的数据链路传输。先简单介绍下mavlink协议。Mavlink协议最早由 苏黎世联邦理工学院 计算机视觉与几何实验组 的  Lorenz Meier于2009年发布,并遵循LGPL开源协议。Mavlink协议是在串口通讯基础上的一种更高层的开源通讯协议,主要应用在微型飞行器(micro aerial vehicle)的通讯上。Mavlink是为小型飞行器和地面站(或者其他飞行器)通讯时常常用到的那些数据制定一种发送和接收的规则并加入了校验(checksum)功能。据说亿航四轴的初期版本就是参考的MAVLINK协议或者说参考的APM飞控系统。
下面是mavlink的消息简介和官方指导连接:

https://pixhawk.ethz.ch/mavlink/

http://qgroundcontrol.org/mavlink/start


 MAVLink 1 packet

 

Byte IndexC versionContentValueExplanation
0uint8_t magicPacket start marker0xFEProtocol-specific start-of-text (STX) marker used to indicate the beginning of a new packet. Any system that does not understand protocol version will skip the packet.
1uint8_t lenPayload length0 - 255Indicates length of the following payload section (fixed for a particular message).
2uint8_t seqPacket sequence number0 - 255Used to detect packet loss. Components increment value for each message sent.
3uint8_t sysidSystem ID1 - 255ID of system (vehicle) sending the message. Used to differentiate systems on network. Note that the broadcast address 0 may not be used in this field as it is an invalid source address.
4uint8_t compidComponent ID1 - 255ID of component sending the message. Used to differentiate components in a system (e.g. autopilot and a camera). Use appropriate values in MAV_COMPONENT. Note that the broadcast address MAV_COMP_ID_ALL may not be used in this field as it is an invalid source address.
5uint8_t msgidMessage ID0 - 255ID of message type in payload. Used to decode data back into message object.
6 to (n+6)uint8_t payload[max 255]Payload data Message data. Content depends on message type (i.e. Message ID).
(n+7) to (n+8)uint16_t checksumChecksum (low byte, high byte) X.25 CRC for message (excluding magic byte). Includes CRC_EXTRA byte.
  • The minimum packet length is 8 bytes for acknowledgment packets without payload.
  • The maximum packet length is 263 bytes for full payload.

MavlinkMessage的具体消息格式

STX-红色的是起始标志位(stx),在v1.0版本中以“FE”作为起始标志。这个标志位在mavlink消息帧接收端进行消息解码时有用处。
LEN-第二个格子代表的是灰色部分(payload,称作有效载荷,要用的数据在有效载荷里面)的字节长度(len),范围从0到255之间。在mavlink消息帧接收端可以用它和实际收到的有效载荷的长度比较,以验证有效载荷的长度是否正确。
SEQ-第三个格子代表的是本次消息帧的序号(seq),每次发完一个消息,这个字节的内容会加1,加到255后会从0重新开始。这个序号用于mavlink消息帧接收端计算消息丢失比例用的,相当于是信号强度。
SYS-第四个格子代表了发送本条消息帧的设备的系统编号(sys),使用PIXHAWK刷PX4固件时默认的系统编号为1,用于mavlink消息帧接收端识别是哪个设备发来的消息。
COMP-第五个格子代表了发送本条消息帧的设备的单元编号(comp),使用PIXHAWK刷PX4固件时默认的单元编号为50,用于mavlink消息帧接收端识别是设备的哪个单元发来的消息(暂时没什么用) 。
MSG-第六个格子代表了有效载荷中消息包的编号(msg),注意它和序号是不同的,这个字节很重要,mavlink消息帧接收端要根据这个编号来确定有效载荷里到底放了什么消息包并根据编号选择对应的方式来处理有效载荷里的信息包。
PAYLOAD-数据包
CKACKB-最后两个字节是16位校验位。


MAVLink的C源代码都是.h头文件。头文件只需要添加对应路径,包含头文件即可(#include "mavlink.h")

1

替换代码:#define MAVPACKED( __Declaration__ )       __Declaration__ 

为              #define MAVPACKED( __Declaration__ )      

2

#pragma   anon_unions

keil中默认是不支持匿名结构体的,需要编译指令#pragma anon_unions指名。

3

去掉  #include <math.h>


    mavlink_msg_test_types_encode_chan(1, 2, 0, &gMavlinkMsgSnd, (const mavlink_test_types_t*)&gTestTypesSnd);
    mavlink_msg_to_send_buffer(gMavSndBuf, (const mavlink_message_t *)&gMavlinkMsgSnd);
   ------------------------------------------------------------------------


int8_t TestMAVLinkParse(uint8_t* rxBuf, uint16_t len)
{

    uint16_t i=0,res=0;
    for(i=0; i<len; ++i){
        res =  mavlink_parse_char(0, rxBuf[i], &gMavlinkMsgRcv, &gMavlinkStatus);
        if (res){
            printf("Received message with msgID %d, sequence: %d from component %d of system %d\r\n", 
                   gMavlinkMsgRcv.msgid, gMavlinkMsgRcv.seq, gMavlinkMsgRcv.compid, gMavlinkMsgRcv.sysid);
            return 0;
        }
    }   

}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java MAVLink是一种用于通信的协议,用于无人机与地面站之间的数据传输和控制。MAVLink是Micro Air Vehicle Link的缩写,是一种轻量级的通信协议,旨在在无人机和地面站之间传输消息和数据。 Java是一种编程语言,为开发MAVLink编写Java代码可以实现与无人机的通信和控制。Java提供了各种工具和库,可以轻松地创建和处理MAVLink消息,并实现与无人机之间的双向通信。 使用Java MAVLink,我们可以实现以下功能: 1. 无人机状态监控:通过接收无人机发送的MAVLink消息,我们可以获取无人机的状态信息,例如位置、速度、电池电量等。 2. 无人机控制:通过发送MAVLink消息,我们可以向无人机发送控制指令,例如起飞、降落、悬停、改变飞行模式等。 3. 数据传输:Java MAVLink还支持传输图像、视频和其他传感器数据。通过使用MAVLink消息,我们可以在无人机和地面站之间可靠地传输各种类型的数据。 Java MAVLink的优点之一是其跨平台性。由于Java是一种跨平台的语言,它可以在不同的操作系统上运行,并与各种硬件和设备进行通信。这使得无人机开发人员可以选择使用他们喜欢的操作系统和硬件设备来开发和部署MAVLink应用程序。 总之,Java MAVLink是一种强大的工具,可以简化无人机和地面站之间的通信和控制。通过使用Java编程语言,开发人员可以轻松地实现与无人机之间的数据传输和控制,并为无人机应用程序提供跨平台的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EmbededCoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值