999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于MSP的無人機通信協議開發設計

2018-01-03 07:05:38趙旭彭克勤北京信息科技大學計算機學院
數碼世界 2017年12期

趙旭 彭克勤 北京信息科技大學計算機學院

基于MSP的無人機通信協議開發設計

趙旭 彭克勤 北京信息科技大學計算機學院

在無人機應用趨向廣泛的今天,無人機發展已成為一股潮流,隨之而來的是大量愛好者的涌入,以及開源飛控的熱門。本文從基于Multiwii飛控的通信協議的講解,說明MSP(Multiwii Serial Protocol)的開發設計模式。

無人機 開源飛控 Multiwii 通信協議

1 MSP的簡介

MSP(Multiwii Serial Protocol)是用于上位機與基于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 Serial)預編譯選項。

2 MSP的工作流程

串口通訊均有TX,RX兩端口,其中TX用于發送數據,RX用于接收數據。在實際應用時只需把相應傳輸模塊(wifi,藍牙)TX端與飛控板的RX連接,RX端與飛控板的TX連接,若是藍牙模塊,需設置傳輸波特率為115200。上位機連接上傳輸模塊后,編寫符合傳輸格式的指令計算指令,即可接收或是發送數據。

3 MSP的傳輸格式及數據類型

MSP的數據傳輸格式包含:數據頭(header),方向(direction)大小(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來定義

例:如需獲取無人機身份信息,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-bit數據加入數據鏈中,若傳輸數據為16-bit或是32-bit數據時,需要將數據拆分為2個8-bit或四個8-bit數據,且低八位在前,高八位在后,例如:

傳輸的data中的一個int型16-bit數據為1192,十六進制表示為0x4A8,在加入數據鏈之前需拆分為兩個8-bit數據:0x04(高八位),0xA8(低八位),然后加入順序為0xA8(低八位),0x04(高八位)。

32-bit數據亦然,拆分后,最先加入數據鏈的是位級最低的八位數據,越后加入,位級越高。

(5)checksum(crc):校驗和,包含一個byte數據,用來保證通信中數據的完整性和準確性。算法:初始化一個校驗和為零后,依次從數據鏈中從size開始的每一個元素與0xff作與運算的結果作異或運算,直至data中的最后一個元素,與0xff作或運算保證了每一個元素的二進制數據的一致性。

例如:初始化校驗和(checksum)為0x00后,與size(假設為0x04)作與運算表示為

checksum ^= (size&0xff)

若只需從FC獲取信息,data即為空,size為0,所以校驗和command一致,如下圖。

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的最后一位(包含最后一位)。

接收到的消息格式如下

驗證數據:接收到消息后因為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型數據類型。

當接收到的data為8-bit(圖中的UINT 8)時,每個數據即為接收到的消息的data鏈中的一個byte,如果為16-bit(32-bit),每個數據就由data數據鏈中的兩個byte(四個byte)組成,與發送時的規則一致,兩個(四個)組成元素中,前面的是低數據位,后面的是高數據位,獲取到組成元素之后先將高位數據賦值給目標數據,再將目標數據左移,再將低位數據加到目標數據上。

例:發送 0x24 0x4D 0x3C 0x00 0x64 0x64(對應圖中MSP_IDENT:獲取飛控信息)后

接收到的消息為:0x24 0x4D 0x3E 0x07 0x64 0xE6 0x03 0x00 0x00 0x00 0x00 0x00 0x86

將消息分解后 0x24 0x4D(header)

0x3 E(direction)

0x07 (size)

0x64 (type)

0xE6 0x03 0x00 0x00 0x00 0x00 0x00(data)

0 x86(checksum)

有MSP樣例表(上圖)可知,data部分包含四個數據:VERSION(UINT 8),MULTITYPE(UINT 8),MSP_VERSION(UINT 8), capability(UINT 32)

根據規則:

VERSION(UINT 8) = 0xE6 = 230(版本為 2.3)

MULTITYPE(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無異。而且使用串口通訊之后,就可以使用掌上設備來控制無人機,就可以使無人機的應用大大拓寬。

[1]MWC飛控V2.3串口通信協議——new Multiwii Serial Protocol:http://www.cnblogs.com/2cats/p/3501033.html

[2]Multiwii serial protocol 官方文檔http://www.multiwii.com/wiki/index.php?title=Multiwii_Serial_Protocol

[3]與0xff作與運算的目的http://www.cnblogs.com/think-injava/p/5527389.html

[4] MSP - The Multiwii serial protocol http://www.stefanocottafavi.com/msp-the-multiwii-serial-protocol/

[5]Java中byte,int的轉換http://freewind886.blog.163.com/blog/static/661924642011810236100/

趙旭,男,本科,北京信息科技大學計算機學院。彭克勤,女,碩士,副教授,北京信息科技大學計算機學院。

主站蜘蛛池模板: 热99精品视频| 欧美不卡在线视频| 国内精品久久久久久久久久影视| 国产嫩草在线观看| 亚洲自偷自拍另类小说| 91久久国产成人免费观看| 亚洲国产精品久久久久秋霞影院| 国产91精品调教在线播放| 毛片在线播放a| 色欲不卡无码一区二区| 国产无吗一区二区三区在线欢| 99在线视频免费| 99国产精品国产高清一区二区| 午夜三级在线| 在线观看视频一区二区| 亚洲男人的天堂在线| 2021精品国产自在现线看| 国产剧情伊人| 玩两个丰满老熟女久久网| 欧美伊人色综合久久天天| 人妻中文字幕无码久久一区| 71pao成人国产永久免费视频| 成人福利在线视频| 日本a级免费| 999精品在线视频| 国产香蕉97碰碰视频VA碰碰看| 成人va亚洲va欧美天堂| 欧美一级高清片久久99| 午夜限制老子影院888| 久久性视频| 国产精品欧美在线观看| 人妻免费无码不卡视频| 精品福利视频导航| 97久久免费视频| 国产精品美女网站| 制服丝袜一区二区三区在线| 久青草国产高清在线视频| 欧美午夜视频在线| 欧美精品影院| 欧美福利在线播放| 久久亚洲中文字幕精品一区| 一级爱做片免费观看久久 | 真实国产乱子伦高清| 亚洲侵犯无码网址在线观看| 一本大道无码高清| 成人无码区免费视频网站蜜臀| 日本成人精品视频| 四虎AV麻豆| 亚洲人成网线在线播放va| 日韩欧美成人高清在线观看| 国产精品va| 伊人无码视屏| 91免费国产在线观看尤物| 欧美日韩北条麻妃一区二区| 91在线精品免费免费播放| 亚洲爱婷婷色69堂| 激情综合网址| 国产免费羞羞视频| 国产精品一区二区不卡的视频| 狠狠色丁香婷婷| 农村乱人伦一区二区| 免费A级毛片无码无遮挡| 三上悠亚一区二区| 青青青亚洲精品国产| 成人免费网站在线观看| 亚洲欧美另类中文字幕| 91久久偷偷做嫩草影院电| 欧美激情综合一区二区| 日本日韩欧美| AV无码一区二区三区四区| 8090成人午夜精品| 无码 在线 在线| 色婷婷狠狠干| 亚洲第一页在线观看| 2021国产精品自拍| 在线综合亚洲欧美网站| 亚洲区视频在线观看| 国产精品中文免费福利| 午夜福利在线观看入口| 亚洲精品卡2卡3卡4卡5卡区| 四虎精品黑人视频| 欧美亚洲网|