mavlink协议解析_jlink 串口

mavlink协议解析_jlink 串口MAVLink是为微型飞行器MAV(MicroAirVehicle)设计的(LGPL)开源的通讯协议。是无人飞行器和地面站(GroundControlStation,GCS)之间,以及无人飞行器之间通讯常用的协议。APM、PIXHAWK飞控,MissionPlanner、QGroundControl地面站均使用了MAVLink协议进行通讯。MAVLink源码下载地址(现已更新至v2.0):https://github.com/mavlink/qgroundcontrol 用户手册:ht

大家好,又见面了,我是你们的朋友全栈君。

MAVLink是为微型飞行器MAV(Micro Air Vehicle)设计的(LGPL)开源的通讯协议。是无人飞行器和地面站(Ground Control Station ,GCS)之间,以及无人飞行器之间通讯常用的协议。APM、PIXHAWK飞控,Mission Planner、QGroundControl地面站均使用了MAVLink协议进行通讯。

MAVLink源码下载地址(现已更新至v2.0):https://github.com/mavlink/qgroundcontrol

  用户手册:https://docs.qgroundcontrol.com/en/

https://mavlink.io/zh/(开发手册)

mavlink协议解析_jlink 串口

 

1、 common文件夹:原始的MAVLink消息,包括各种消息的头文件

    common.h:定义MAVLink各个消息包中用到的枚举类型,各个消息包对应的CRC—EXTRA值、LENGTH值,包含(include)各个消息包的头文件

    各个消息的头文件:1)定义消息内容对应的数据结构,2)打包、发送消息的便捷函数,3)消息包解析并获取各个参数

2、 autopilotmega,ASLUAV,pixhawk等文件夹:这些文件夹包含各个飞控自定义的MAVLink消息类型 

3、 checksum.h:计算校验码的代码 

4、 mavlink_conversions.h:dcm,欧拉角,四元数之间的转换

5、 mavlink_helper.h:提供各种便捷函数:

  1)将各个消息包补充完整并发送。将数据载荷加上消息帧的头部,如sysid和compid等,计算校验码,补充成为完整的mavlink消息包后发送;

  2)MAVLink消息包解析。

6、 mavlink_types.h:定义用到的各种基本结构体(如mavlink_message_t)、枚举类型(如 mavlink_param_union_t)

MAVLink消息包结构

  MAVLink传输时,以消息包作为基本单位,数据长度为8~263字节。消息数据包的结构如下:

mavlink协议解析_jlink 串口

注:校验(checksum)功能。加入MAVLINK_CRC_EXTRA,当两个通讯终端之间(飞行器和地面站,或飞行器和飞行器)使用不同版本的MAVLink协议时,双方计算得到的校验码会不同,则不同版本的MAVLink协议之间将无法通讯。MAVLINK_MESSAGE_CRCS中存储了每种消息包对应的MAVLINK_CRC_EXTRA。这个 MAVLINK_CRC_EXTRA在用python生成MAVLink代码时在common.h头文件中自动生成。

MAVLink数据包的结构在mavlink_types.h中用mavlink_message_t结构体定义:

mavlink协议解析_jlink 串口

MAVLINK Common Message Set

  MAVLink通用消息集可以在《MAVLLINK Common Message set specifications》文档中查看。这些消息定义了通用消息集,这是大多数地面控制站和自动驾驶仪实现的参考消息集,头文件包含在common文件夹中。

  分为两部分:MAVLink Type Enumerations(MAVLink类型枚举 )和MAVLink Messages(MAVLink消息包)。

MAVLink Type Enumerations

  MAVLink Type Enumerations在common.h文件中定义。如下,枚举变量定义了飞行器的类型MAV_AUTOPILOT。

mavlink协议解析_jlink 串口

typedef enum MAV_AUTOPILOT
  {
      MAV_AUTOPILOT_GENERIC=0, /* Generic autopilot, full support for everything | */
      MAV_AUTOPILOT_RESERVED=1, /* Reserved for future use. | */
      MAV_AUTOPILOT_SLUGS=2, /* SLUGS autopilot, http://slugsuav.soe.ucsc.edu | */
      MAV_AUTOPILOT_ARDUPILOTMEGA=3, /* ArduPilotMega / ArduCopter, http://diydrones.com | */
      MAV_AUTOPILOT_OPENPILOT=4, /* OpenPilot, http://openpilot.org | */
      MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY=5, /* Generic autopilot only supporting simple waypoints | */
      MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY=6, /* Generic autopilot supporting waypoints and other simple navigation commands | */
     MAV_AUTOPILOT_GENERIC_MISSION_FULL=7, /* Generic autopilot supporting the full mission command set | */
     MAV_AUTOPILOT_INVALID=8, /* No valid autopilot, e.g. a GCS or other MAVLink component | */
     MAV_AUTOPILOT_PPZ=9, /* PPZ UAV - http://nongnu.org/paparazzi | */
     MAV_AUTOPILOT_UDB=10, /* UAV Dev Board | */
     MAV_AUTOPILOT_FP=11, /* FlexiPilot | */
     MAV_AUTOPILOT_PX4=12, /* PX4 Autopilot - http://pixhawk.ethz.ch/px4/ | */
     MAV_AUTOPILOT_SMACCMPILOT=13, /* SMACCMPilot - http://smaccmpilot.org | */
     MAV_AUTOPILOT_AUTOQUAD=14, /* AutoQuad -- http://autoquad.org | */
     MAV_AUTOPILOT_ARMAZILA=15, /* Armazila -- http://armazila.com | */
     MAV_AUTOPILOT_AEROB=16, /* Aerob -- http://aerob.ru | */
     MAV_AUTOPILOT_ASLUAV=17, /* ASLUAV autopilot -- http://www.asl.ethz.ch | */
     MAV_AUTOPILOT_ENUM_END=18, /*  | */
 } MAV_AUTOPILOT;

mavlink协议解析_jlink 串口

心跳包的内容存放在payload数据载荷中。以心跳包为例:

mavlink协议解析_jlink 串口

typedef struct __mavlink_heartbeat_t
{
 uint32_t custom_mode; /*< A bitfield for use for autopilot-specific flags.*/
 uint8_t type; /*< Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)*/
 uint8_t autopilot; /*< Autopilot type / class. defined in MAV_AUTOPILOT ENUM*/
 uint8_t base_mode; /*< System mode bitfield, see MAV_MODE_FLAG ENUM in mavlink/include/mavlink_types.h*/
 uint8_t system_status; /*< System status flag, see MAV_STATE ENUM*/
 uint8_t mavlink_version; /*< MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version*/
} mavlink_heartbeat_t;

心跳包一般用来表明发出该消息的设备是否活跃(一般以1Hz发送),消息接收端会根据是否及时收到了心跳包来判断是否和消息发送端失去了联系。

  心跳包由6个数据成员组成,占用9个字节。

  1、 type:飞行器类型,表示了当前发消息的是什么飞行器,如四旋翼,直升机等。type的取值对应枚举类型MAV_TYPE(如四旋翼,对应数值2)。

  2、autopilot:飞控类型,如apm,Pixhawk等,发送心跳包的飞行器的飞控类型。autopilot的取枚举类型MAV_AUTOPILOT。

  3、base mode(基本模式):飞控现在所处的飞行模式,这个参数要看各个飞控自己的定义方式,会有不同的组合、计算方式。

  4、custom mode(用户模式):飞控现在所处的飞行模式,这个参数要看各个飞控自己的定义方式,会有不同的组合、计算方式。

  5、system status:系统状态,见MAV_STATE枚举变量。

  6、mavlink version:消息发送端的MAVLink版本。

  其余的消息也是类似的结构,基本消息的定义可以查看官方网页的说明(具体说明以各个飞控为准),也可查看各个消息包头文件的定义。

Mavlink 2.0协议:

MavLink协议目前网上可以找到的中文版资料只有1.0的。现在开发使用的固件版本号是1.7.3.串口抓的的包全部与1.0版本都不一致。爬到官方去看了下。有2.0的包结构。

uint8_t magic; ///< protocol magic marker

uint8_t len; ///< Length of payload

uint8_t incompat_flags; ///< flags that must be understood

uint8_t compat_flags; ///< flags that can be ignored if not understood

uint8_t seq; ///< Sequence of packet

uint8_t sysid; ///< ID of message sender system/aircraft

uint8_t compid; ///< ID of the message sender component

uint8_t msgid 0:7; ///< first 8 bits of the ID of the message

uint8_t msgid 8:15; ///< middle 8 bits of the ID of the message

uint8_t msgid 16:23; ///< last 8 bits of the ID of the message

uint8_t target_sysid; ///< Optional field for point-to-point messages, used for payload else

uint8_t target_compid; ///< Optional field for point-to-point messages, used for payload else

uint8_t payload[max 253]; ///< A maximum of 253 payload bytes

uint16_t checksum; ///< X.25 CRC

uint8_t signature[13]; ///< Signature which allows ensuring that the link is tamper-proof

包结构大致如下:

mavlink协议解析_jlink 串口

2.0包的总长为10+n+3(+2),其中括号的2为可选内容。抓包未发现。

抓包获得来自飞控的Msgind如下。

0,36,74,105,30,31,32,140,1,147,65,70,141,230,241,111,83,69,24

這些都是飞控无请求时主动发送过来的数据。

根据msgid:

mavlink协议解析_jlink 串口

mavlink协议源码: mavlink

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124668.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月20日 上午11:00
下一篇 2022年4月20日 上午11:00


相关推荐

  • 串联电路的电流处处相等吗_为什么并联电路电压处处相等

    串联电路的电流处处相等吗_为什么并联电路电压处处相等![](https://img2020.cnblogs.com/blog/1389259/202010/1389259-20201007085548274-1554004299.png)

    2022年8月6日
    6
  • c++和java哪个好学_选 Python 还是 Java ?[通俗易懂]

    c++和java哪个好学_选 Python 还是 Java ?[通俗易懂]对于在校学生,以及要转行学编程的,把一门语言熟悉起来,非常的重要。对于初学编程,以及想要转行到编程领域的人来说,总有这么一个选择,选C++、Python、还是Java好呢?哪个前景更好、哪个好学、哪个好找工作,等等这类问题。熟悉我的都知道,我是从LinuxC/C++后台开发,转行到算法工程师,在大四实习的时候,做过Go开发,大四下做毕设的时候,用过Java、以及前端一些技术;相对…

    2022年7月7日
    30
  • python3爆破服务器_dirsearch「建议收藏」

    python3爆破服务器_dirsearch「建议收藏」dirsearchCurrentRelease:v0.3.9(2019.11.26)Overviewdirsearchisasimplecommandlinetooldesignedtobruteforcedirectoriesandfilesinwebsites.Installation&Usagegitclonehttps://github….

    2022年10月6日
    7
  • 怎样找一张图片的原图、出处?最全搜图网站+具体案例分享

    怎样找一张图片的原图、出处?最全搜图网站+具体案例分享前不久随手帮一网友找了张图 想了想中间的经历挺有意思 所以今天打算来说说以图搜图这个话题第一部分 先介绍常用的识图引擎第二部分 想分享一下阿虚自己的搜图经验 也是今天主要想分享的 1 首先推荐几个识图引擎一样 识图这个东西 没有哪个引擎最强一说 每个引擎的算法不同 基于的数据库不同 对不同图片的搜索效果也不同 所以如果想掌握搜图这个东西的话 一定得用上多个识图引擎 不过总得来说优先度大体从上至下 部分识图引擎效果不好 下面就不介绍了 1 1 谷歌识图 被墙 网址 https

    2026年3月26日
    2
  • mysql 提示表不存在的解决方法error: 1146: Table doesn‘t exist

    mysql 提示表不存在的解决方法error: 1146: Table doesn‘t exist直接拷贝数据库导致提示表不存在的解决方法电脑重装系统后把原来的mysqldata复制进去后大部分表是可以访问的,但是有几个表提示表不存在:error:1146:Table’a_content’doesn’texist这种情况就是要把原来mysql安装目录data里的ibdata1也要拷贝过去INNODB是MYSQL数据库一种流行的数据库引擎,支持事务(行级),在企业级应…

    2022年6月14日
    45
  • Linux开启FTP服务和修改FTP密码

    Linux开启FTP服务和修改FTP密码1 首先服务器要安装 ftp 软件 查看是否已经安装 ftp 软件下 gt gt whichvsftpd2 查看 ftp 服务器状态 gt gt servicevsftp 启动 ftp 服务器 gt gt servicevsftp 重启 ftp 服务器 gt gt servicevsftp 查看服务有没有启动 gt gt netstat an grep21tcp000 0 0 0

    2026年3月17日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号