基于MSP的无人机通信协议开发设计
- 格式:pdf
- 大小:1.47 MB
- 文档页数:3
基于MSP的无人机通信协议开发设计 计算机技术 赵旭 彭克勘 北京信患科技大学计算机学院 摘要:在无人机应用趋向广泛的今天,无人机发展已成为一股潮流,随之而来的是大量爱好者的涌入,以及开源飞控的热门。本文从基 于Multiwii飞控的通信协议的讲解,说明MSP(Multiwii Serial ProZoco1)的开发设计模式。 关奠词:无人机开源飞控Multiwii通信协议
1 MSP的简介 MSP(Multiwii Serial Protoco1)是用于上位机与基于 Multiwii飞控通讯的协议。使用MSP可使操作端更轻便,更具 有通用性(例如使用GUI,OSD,遥控或是自制遥控装置控制无 人机或从无人机中获取信息);MSP具有以下特征: (1).效率更高:传输数据为2进制代码 (2).更安全:数据传输伴随校验和,避免无人机被劫持 (3).对代码升级依赖更少:代码升级对GUI等控制端影响 更小 使用MSP将大大拓展与无人机的通讯方式,而不仅仅局限 于2.4G信号(大多数移动设备,或是PC都没有配备2.4G模块), 也就大大拓宽了无人机上位机开发的方向。 注:1.无人机专指基于Multiwii飞控的无人机。 2.Multiwii版本在2.3之后(包含2.3)无需在config.h 中选择RCSERIAL(RC Seria1)预编译选项。 2MSP的工作流程 串口通讯均有TX,RX两端口,其中TX用于发送数据, RX用于接收数据。在实际应用时只需把相应传输模块(wifi, 蓝牙)TX端与飞控板的RX连接,RX端与飞控板的TX连接, 若是蓝牙模块,需设置传输波特率为115200。上位机连接上传 输模块后,编写符合传输格式的指令计算指令,即可接收或是 发送数据。 3 MSP的传输格式及数据类型 MSP的数据传输格式包含数据头(header),方向(direction)
(2)转子大轴校正,有条件的校静平衡或动平衡; (3)皮带轮或联轴器找中心、轴线找正、校平衡; (4)更换风扇或更换叶片。 (5)因轴承过度磨损或装配不良,造成定、转子相擦铁芯表 面损伤的,应用细锉等工具去除损伤面毛刺,清除干净后涂上绝 缘漆,加热烘干。 (6)校正端盖的位置,使受力平衡。 3轴承故障检..| 转轴通过轴承支撑转动,是负载最重的部分,又是容易磨损 的部件。在电动机运行中,一般滚动轴承缺油时,会听到骨碌骨碌 的声音,若听到不连续的异常声音,可能是轴承钢圈破裂。轴承内 混有沙土等杂物或轴承零件有轻度磨损时,会产生轻微的杂音。 拆卸后检查:先察看轴承滚动体、内外钢圈是否有破损、锈蚀、 疤痕等,一只手固定轴承外钢圈,另一只手用力推内钢圈,观察活 动间隙是否明显,如感到很松,就是磨损严重,需要更换轴承了a 轴承外表面上的锈斑可用00号砂纸擦除,然后放入汽油中 清洗或轴承有裂纹内外圈碎裂或轴承过度磨损时应更换新轴承。 更换新轴承时,要选用与原来型号相同的轴承。 4大轴故障检修 4.1轴弯曲 若弯曲不大,可通过磨光轴颈、滑环的方法进行修复;若弯曲 超过O.2ram,可将轴放于压力机下,在拍弯曲处加压矫正,矫正 后的轴表面用车床切削磨光;如弯曲过大则需另换新轴。 4.2轴颈磨损 轴颈磨损不大时,可以用錾子打毛,再套上轴承,也可在轴颈 上镀一层铬再磨削至需要尺 磨损较多时,可在轴颈上进行堆焊, 再到车床上切削磨光;如果成本较高或修复工艺代价较高,则考 虑重新更换。 5机壳和端董的检修 机壳和端盖若有裂纹应进行堆焊修复若遇到轴承镗孔间隙 过大,造成轴承端盖配合过松,一般可用錾子将轴承孔壁均匀打 出毛刺,然后再将轴承打入端盖,对于功率较大的电动机,也可采 用镶补或电镀的方法最后加工出轴承所需要的尺寸。 6结束语 随着电动机在工矿的广泛使用,电动机的维修和保养各级 领导和技术人员也是高度重视,只有加强电动机的日常维修和 保养才能够安全的创造更多财富。总之,无论是从事电气的工 作人员或是管理人员,都要从实际出发,切实落实好设备的维 护与维修,以保证生产的正常运行,促进社会经济建设的顺利发 展。 计算机技术 大小(size),类型(type),数据包(data),校验和(checksum)。 一条MSP消息中,每一个元素都是使用byte类型来存储数据。 (1)header:数据头,包含两个byte,¥,M,表示这条数据 是一条Multiwii传输用数据,所有指令必须包含这一部分。 (2)direction:方向,包含一个byte,<或>。向飞控发送 指令时,direction为<;从飞控获取信息时,direction为>。 (3)size:数据大小,包含一个byte,用来描述data的个数, 例如,data有4个字符,那size就为0x04,但是注意数据的总 长度不能超过64 type:类型,标明这条指令的目的,填人内容根据MSP官 方文档中的message—id来定义 一一 … 一 ’ ~1一’一 ~一一一一 — 轴嘲 瞳 i 蜡 {拍 嘲m 由健 姆I 洚 罐稽 i碲彝 呻 诺爨蒜 辅 毒 r 蠛 蜻 § 鞲骈 韩 瑚 描嗲 毒 ………{ i渊 耱 { 三 一~ … … j 例:如需获取无人机身份信息,message_id查表可知为 100,则type为ASCII码为100的byte(或用十六进制表示为 0x64(数据类型为byte))。 注:官方文档链接http://www.multiwii.com/wiki/ index.php?title=Multiwii—Serial—Protocol (4)data:传输数据,包含n个byte类型数据(数量根据 MSP文档中不同Command所需要传输的数据个数来定)。当 传输是8一bit数据时,可直接将8一b 数据加入数据链中,若传 输数据为16-bit或是32-bit数据时,需要将数据拆分为2个 8-bit或四个8-bit数据,且低八位在前,高八位在后,例如: 传输的data中的一个int型16-bit数据为1192,十六进 制表示为0x4A8,在加入数据链之前需拆分为两个8一bit数据: Ox04(高八位),0xA8(低八位),然后加入顺序为0xA8(低八位), Ox04(高八位)。 32-bit数据亦然,拆分后,最先加入数据链的是位级最低 的八位数据,越后加入,位级越高。 (5)checksum(crc):校验和,包含一个byte数据,用来 保证通信中数据的完整性和准确性。算法:初始化一个校验和 为零后,依次从数据链中从size开始的每一个元素与Oxff作与 运算的结果作异或运算,直至data中的最后一个元素,与Oxff 作或运算保证了每一个元素的二进制数据的一致性。 数码世界R62 例如:初始化校验和(checksum)为OxO0后,与size(假 设为0x04)作与运算表示为 checksum :(size&Oxff) 若只需从FC获取信息,data即为空,size为0,所以校验 和command一致,如下图。
j ~ 4具体实现 发送消息: MSP消息中比较固定的信息可以使用一个类中的静态变 量(数据类型为byte)来表示,例如:MSP消息中的header, direction,和type部分。 data部分若添加8-bit数据时,直接向data链中添加 byte类型数据即可,若为16一bit需将数据拆分为两个8-byte 数据, 具体方法: 拆分目标:int target=0x4A8,二进制表示:0000 0100, 1010 1000 拆分时高八位为byte lower_byte=(byte)(target>>8) 低八位为byte upper_byte=(byte)target 根据Multiwii源码决定,MSP消息中,如遇到需发送16- bit数据时,低八位在前,后八位在后。 拆分原理:java语言中高位数据向低位数类型转换时仅会 保留高位数据的低位数,例如16一bit向8-bit数据转换时,16- bit数据保留低八位,赋值给8-bit数据,且最高位保存为符号位。 数据右移时,低位数据被高位数据占据,原本高位数据变为0, 右移后可将原本在高位的数据移到低位。结合以上两点,使用高 位数据向低位数据转换可获得高位数据的低位部分,使用移位 后,再配合类型转换即可获取高位数据的高位部分。 校验和(checksum):根据MSP规定的校验和算法,需要 初始话一个byte类型,初值为0的数据,先与size,type分别 作异或运算,随后再逐一与data里的数据作异或运算( =)直到 data的最后一位(包含最后一位)。 byte checksum=0x00; checksum =size; checksum :type ̄
接收消息 接收到的消息格式如下 h∞姗4■“t曲 忡
验证数据:接收到消息后因为header和direction是固定 部分,所以我们开始从size开始分析。在使用这条消息之前,需 验证数据是否有丢失情况,具体方法:计算这条消息的校验和, 然后再判断是否与消息自带的校验和相等。若相等,说明数据无 丢失,可以使用;若不想等则丢弃数据,重新发起请求。 使用数据:可以根据type来确定MSP消息的目的,从而确 定MSP的功能,再根据MSP用列表去分析data中的数据。 图中的message—id为MSP消息中的type;direction中 FC—->说明消息来自飞控。_>FC说明消息发往飞控。图中type 说明接收到的数据类型。comment为对数据的解释。UINT 8: 8-bit int型数据。UINT 16:16-bit int型数据类型。UINT 32:32-bit int型数据类型。 ■●●_ … 1H■■■■■ ■‘■■kH,■‘^■^■■■日■■ 日嘶 q^^ aguq^■ ●t■ ,a ■ ■u ■■ ■#E q■目^ ,催 I-● ■●_●■● ■ ■-I c■ ■-●^^■-自_ … - ql岫 啊 ¥■■ -●‘■●■■ ● ●●■■'峨一 目●■_ ●・●…■■■■■■’●■叶 一 一=.一 …’ __‘●●嚷-杯_…●■■- ^■●忡 ■0¨“HH● ■I呕帅i●‘,-,■d■^q峨l●■0■“,■ u J■』 神薯,‘ 目目●h靠jL'●删..1,‘ad*冉 当接收到的data为8-bit(图中的UINT 8)时,每个数 据即为接收到的消息的data链中的一个byte,如果为16-bit (32-bit),每个数据就由data数据链中的两个byte(四个 byte)组成,与发送时的规则一致,两个(四个)组成元素中,前 面的是低数据位,后面的是高数据位,获取到组成元素之后先 将高位数据赋值给目标数据,再将目标数据左移,再将低位数 据加到目标数据上。 例:发送0x24 0x4D 0x3C 0x00 0x64 0x64(对应图中 MSP-IDENTI获取飞控信息)后 接收到的消息为:0x24 0x4D 0x3E Ox07 0x64 0xE6 OxO3 0x00 0x00 OxO0 0x00 OxO0 0x86 将消息分解后0x24 0x4D(header) 0x3E(direction) Ox07(size) 0x64(type) OxE6 Ox03 0x00 0x00 OxO0 0x00 0x00(data) 计算机技术 0x86(checksum) 有MSP样例表(上图)可知,data部分包含四个数据: VERSION(UINT 8),MULTITYPE(UINT 8),MSP-_ VERsION(UINT 8),capability(UINT 32) 根据规则: VERSION(UINT 8) =0xE6=230(版本为2.3) MUIJ1、ITYPE(UINT 8) =0x03=3(QUAD X) MSP. VERSION(UINT 8)=0x00 Capability(UINT 32) 为了区分,四个部分分别改为: 0x01 0x02 0x03 0x04拼装后:0x4321=17185 5结语 完成了对MSP的设计,就可以和Multiwii无人机进行通 讯,也就可以对无人机进行开发。使用串口通讯控制无人机除了 距离不如2.4Ghz,其他方面都与2.4Ghz无异。而且使用串口 通讯之后,就可以使用掌上设备来控制无人机,就可以使无人机 的应用大大拓宽。