mavlink教程选编.pptx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
mavlink教程选编

MIVLINK协议;Mavlink消息帧 红色的是起始标志位(stx),在v1.0版本中以“FE”作为起始标志。这个标志位在mavlink消息帧接收端进行消息解码时有用处。 第二个格子代表的是payload长度(len),范围从0到255之间。在mavlink消息帧接收端可以用它和实际收到的有效载荷的长度比较,以验证有效载荷的长度是否正确。 第三个格子代表的是本次消息帧的序号(seq),每次发完一个消息,这个字节的内容会加1,加到255后会从0重新开始。这个序号用于mavlink消息帧接收端计算消息丢失比例用的,相当于是信号强度。 第四个格子代表了发送本条消息帧的设备的系统编号(sys),使用PIXHAWK刷PX4固件时默认的系统编号为1,用于mavlink消息帧接收端识别是哪个设备发来的消息。 第五个格子代表了发送本条消息帧的设备的单元编号(comp),使用PIXHAWK刷PX4固件时默认的单元编号为50,用于mavlink消息帧???收端识别是设备的哪个单元发来的消息(暂时没什么用) 。 第六个格子代表了有效载荷中消息包的编号(msg),这个字节很重要,mavlink消息帧接收端要根据这个编号来确定有效载荷里到底放了什么消息包并根据编号选择对应的方式来处理有效载荷里的信息包。 最后两个字节是16位校验位,ckb是高八位,cka是低八位。校验码由crc16算法得到 ;Mavlink封包过程;第一个是通用飞行器类型 第二个参数是自驾仪(即通常所说的飞控)类型,比如apm,ppz,Pixhawk等飞控 第三个参数是基本模式(base mode),mavlink介绍网页并不会给出具体的模式,在Px中基本模式为是否使用用户模式 第四个参数是用户模式,Px飞控为例,它分为主模式和子模式,两种模式组合在一起成为最终的模式,主模式分为3种,手动、辅助和自动,手动模式没啥好讲的,辅助模式中,又分为高度控制模式(定高模式)和位置控制模式(控制飞行器相对地面的速度)两个子模式,自动模式里又分为3个子模式,任务模式(GPS航点),留待模式(悬停),返航模式(返航)。 第五个是系统状态,查定义就好了 第六个是mavlink版本,现在是“3”版本。;ardupilotmega(apm),matrixpilot这类的文件夹里都是各个飞控自己定义的mavlink消息类型原始的mavlink消息放在common文件夹里面(大部分消息都在common文件夹中)。checksum.h中存放的是计算校验码的代码。 mavlink_helper.h里面是将各个消息包补充完整(调用checksum.h中的函数计算校验码并补上消息帧的头,比如sysid和compid等)成为mavlink消息帧再发送。最主要的功能集中在这两个文件夹中。mavlink_conversions.h里是dcm,欧拉角,四元数三种姿态表示方法之间的转换代码。;下面以发送心跳包(heartbeat)为例,说明下如何使用mavlink头文件来发送心跳包。首先打开common文件夹中的?mavlink_msg_heartbeat.h 头文件。这个头文件可以分为两部分,一部分用来打包、发送heartbeat消息,另一部分用来接收到heartbeat消息时解码消息。heartbeat.h定义了heartbeat消息对应的数据类型: typedef struct __mavlink_heartbeat_t { uint32_t custom_mode; uint8_t type; uint8_t autopilot; uint8_t base_mode; uint8_t system_status; uint8_t mavlink_version; } mavlink_heartbeat_t; 如果mavlink的发送方式可以使用(串口发送,函数接口也兼容),则可以调用? static inline void mavlink_msg_heartbeat_send(mavlink_channel_t chan, uint8_t type, uint8_t autopilot, uint8_t base_mode, uint32_t custom_mode, uint8_t system_status) 其中的chan是channel的缩写,用于选择发送的串口或者usb口。该函数功能是将传入的各个参数按照对应的格式放到heartbeat消息包中(即打包)这里还不是一个完整的Mavlink消息帧 这个函数内部有一句预处理: #if MAVLINK_CRC_EXTRA 是说是否使用额外的crc校验字符(默认使用),详情请看第一篇博客中对于两个校验字节的说明;函数中会调用函数【2】 _mav

您可能关注的文档

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档