亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于MSP的無(wú)人機(jī)通信協(xié)議開發(fā)設(shè)計(jì)

        2018-01-03 07:05:38趙旭彭克勤北京信息科技大學(xué)計(jì)算機(jī)學(xué)院
        數(shù)碼世界 2017年12期
        關(guān)鍵詞:飛控數(shù)據(jù)類型通信協(xié)議

        趙旭 彭克勤 北京信息科技大學(xué)計(jì)算機(jī)學(xué)院

        基于MSP的無(wú)人機(jī)通信協(xié)議開發(fā)設(shè)計(jì)

        趙旭 彭克勤 北京信息科技大學(xué)計(jì)算機(jī)學(xué)院

        在無(wú)人機(jī)應(yīng)用趨向廣泛的今天,無(wú)人機(jī)發(fā)展已成為一股潮流,隨之而來(lái)的是大量愛好者的涌入,以及開源飛控的熱門。本文從基于Multiwii飛控的通信協(xié)議的講解,說(shuō)明MSP(Multiwii Serial Protocol)的開發(fā)設(shè)計(jì)模式。

        無(wú)人機(jī) 開源飛控 Multiwii 通信協(xié)議

        1 MSP的簡(jiǎn)介

        MSP(Multiwii Serial Protocol)是用于上位機(jī)與基于Multiwii飛控通訊的協(xié)議。使用MSP可使操作端更輕便,更具有通用性(例如使用GUI,OSD,遙控或是自制遙控裝置控制無(wú)人機(jī)或從無(wú)人機(jī)中獲取信息);MSP具有以下特征:

        (1).效率更高:傳輸數(shù)據(jù)為2進(jìn)制代碼

        (2).更安全:數(shù)據(jù)傳輸伴隨校驗(yàn)和,避免無(wú)人機(jī)被劫持

        (3).對(duì)代碼升級(jí)依賴更少:代碼升級(jí)對(duì)GUI等控制端影響更小

        使用MSP將大大拓展與無(wú)人機(jī)的通訊方式,而不僅僅局限于2.4G信號(hào)(大多數(shù)移動(dòng)設(shè)備,或是PC都沒(méi)有配備2.4G模塊),也就大大拓寬了無(wú)人機(jī)上位機(jī)開發(fā)的方向。

        注:1.無(wú)人機(jī)專指基于Multiwii飛控的無(wú)人機(jī)。

        2.Multiwii版本在 2.3 之后(包含 2.3)無(wú)需在 config.h中選擇RCSERIAL(RC Serial)預(yù)編譯選項(xiàng)。

        2 MSP的工作流程

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

        3 MSP的傳輸格式及數(shù)據(jù)類型

        MSP的數(shù)據(jù)傳輸格式包含:數(shù)據(jù)頭(header),方向(direction)大?。╯ize),類型(type),數(shù)據(jù)包(data),校驗(yàn)和(checksum)。一條MSP消息中,每一個(gè)元素都是使用byte類型來(lái)存儲(chǔ)數(shù)據(jù)。

        (1)header:數(shù)據(jù)頭,包含兩個(gè)byte,$,M,表示這條數(shù)據(jù)是一條Multiwii傳輸用數(shù)據(jù),所有指令必須包含這一部分。

        (2)direction:方向,包含一個(gè)byte,<或>。向飛控發(fā)送指令時(shí),direction為<;從飛控獲取信息時(shí),direction為>。

        (3)size:數(shù)據(jù)大小,包含一個(gè)byte,用來(lái)描述data的個(gè)數(shù),例如,data有4個(gè)字符,那size就為0x04,但是注意數(shù)據(jù)的總長(zhǎng)度不能超過(guò)64。

        type:類型,標(biāo)明這條指令的目的,填入內(nèi)容根據(jù)MSP官方文檔中的message_id來(lái)定義

        例:如需獲取無(wú)人機(jī)身份信息,message_id查表可知為100,則type為ASCII碼為100的byte(或用十六進(jìn)制表示為0x64(數(shù)據(jù)類型為byte))。

        注:官方文檔鏈接 http://www.multiwii.com/wiki/index.php?title=Multiwii_Serial_Protocol

        (4)data:傳輸數(shù)據(jù),包含n個(gè)byte類型數(shù)據(jù)(數(shù)量根據(jù)MSP文檔中不同Command所需要傳輸?shù)臄?shù)據(jù)個(gè)數(shù)來(lái)定)。當(dāng)傳輸是8-bit數(shù)據(jù)時(shí),可直接將8-bit數(shù)據(jù)加入數(shù)據(jù)鏈中,若傳輸數(shù)據(jù)為16-bit或是32-bit數(shù)據(jù)時(shí),需要將數(shù)據(jù)拆分為2個(gè)8-bit或四個(gè)8-bit數(shù)據(jù),且低八位在前,高八位在后,例如:

        傳輸?shù)膁ata中的一個(gè)int型16-bit數(shù)據(jù)為1192,十六進(jìn)制表示為0x4A8,在加入數(shù)據(jù)鏈之前需拆分為兩個(gè)8-bit數(shù)據(jù):0x04(高八位),0xA8(低八位),然后加入順序?yàn)?xA8(低八位),0x04(高八位)。

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

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

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

        checksum ^= (size&0xff)

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

        4 具體實(shí)現(xiàn)

        發(fā)送消息:

        MSP消息中比較固定的信息可以使用一個(gè)類中的靜態(tài)變量(數(shù)據(jù)類型為byte)來(lái)表示,例如:MSP消息中的header,direction,和type部分。

        data部分若添加8-bit數(shù)據(jù)時(shí),直接向data鏈中添加byte類型數(shù)據(jù)即可,若為16-bit需將數(shù)據(jù)拆分為兩個(gè)8-byte數(shù)據(jù),

        具體方法:

        拆分目標(biāo):int target = 0x4A8,二進(jìn)制表示:0000 0100,1010 1000

        拆分時(shí)高八位為byte lower_byte = (byte)(target>>8)

        低八位為byte upper_byte = (byte)target

        根據(jù)Multiwii源碼決定,MSP消息中,如遇到需發(fā)送16-bit數(shù)據(jù)時(shí),低八位在前,后八位在后。

        拆分原理:java語(yǔ)言中高位數(shù)據(jù)向低位數(shù)類型轉(zhuǎn)換時(shí)僅會(huì)保留高位數(shù)據(jù)的低位數(shù),例如16-bit向8-bit數(shù)據(jù)轉(zhuǎn)換時(shí),16-bit數(shù)據(jù)保留低八位,賦值給8-bit數(shù)據(jù),且最高位保存為符號(hào)位。數(shù)據(jù)右移時(shí),低位數(shù)據(jù)被高位數(shù)據(jù)占據(jù),原本高位數(shù)據(jù)變?yōu)?,右移后可將原本在高位的數(shù)據(jù)移到低位。結(jié)合以上兩點(diǎn),使用高位數(shù)據(jù)向低位數(shù)據(jù)轉(zhuǎn)換可獲得高位數(shù)據(jù)的低位部分,使用移位后,再配合類型轉(zhuǎn)換即可獲取高位數(shù)據(jù)的高位部分。

        校驗(yàn)和(checksum):根據(jù)MSP規(guī)定的校驗(yàn)和算法,需要初始話一個(gè)byte類型,初值為0的數(shù)據(jù),先與size,type分別作異或運(yùn)算,隨后再逐一與data里的數(shù)據(jù)作異或運(yùn)算(^=)直到data的最后一位(包含最后一位)。

        接收到的消息格式如下

        驗(yàn)證數(shù)據(jù):接收到消息后因?yàn)閔eader和direction是固定部分,所以我們開始從size開始分析。在使用這條消息之前,需驗(yàn)證數(shù)據(jù)是否有丟失情況,具體方法:計(jì)算這條消息的校驗(yàn)和,然后再判斷是否與消息自帶的校驗(yàn)和相等。若相等,說(shuō)明數(shù)據(jù)無(wú)丟失,可以使用;若不想等則丟棄數(shù)據(jù),重新發(fā)起請(qǐng)求。

        使用數(shù)據(jù):可以根據(jù)type來(lái)確定MSP消息的目的,從而確定MSP的功能,再根據(jù)MSP用列表去分析data中的數(shù)據(jù)。

        圖中的message_id為MSP消息中的type;direction中FC->說(shuō)明消息來(lái)自飛控。->FC說(shuō)明消息發(fā)往飛控。圖中type說(shuō)明接收到的數(shù)據(jù)類型。comment為對(duì)數(shù)據(jù)的解釋。UINT 8:8-bit int型數(shù)據(jù)。UINT 16:16-bit int型數(shù)據(jù)類型。UINT 32:32-bit int型數(shù)據(jù)類型。

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

        例:發(fā)送 0x24 0x4D 0x3C 0x00 0x64 0x64(對(duì)應(yīng)圖中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部分包含四個(gè)數(shù)據(jù):VERSION(UINT 8),MULTITYPE(UINT 8),MSP_VERSION(UINT 8), capability(UINT 32)

        根據(jù)規(guī)則:

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

        MULTITYPE(UINT 8) = 0x03 = 3(QUAD X)

        MSP_VERSION(UINT 8)= 0x00

        Capability(UINT 32) 為了區(qū)分,四個(gè)部分分別改為 :0x01 0x02 0x03 0x04拼裝后:0x4321 = 17185

        5 結(jié)語(yǔ)

        完成了對(duì)MSP的設(shè)計(jì),就可以和Multiwii無(wú)人機(jī)進(jìn)行通訊,也就可以對(duì)無(wú)人機(jī)進(jìn)行開發(fā)。使用串口通訊控制無(wú)人機(jī)除了距離不如2.4Ghz,其他方面都與2.4Ghz無(wú)異。而且使用串口通訊之后,就可以使用掌上設(shè)備來(lái)控制無(wú)人機(jī),就可以使無(wú)人機(jī)的應(yīng)用大大拓寬。

        [1]MWC飛控V2.3串口通信協(xié)議——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作與運(yùn)算的目的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的轉(zhuǎn)換http://freewind886.blog.163.com/blog/static/661924642011810236100/

        趙旭,男,本科,北京信息科技大學(xué)計(jì)算機(jī)學(xué)院。彭克勤,女,碩士,副教授,北京信息科技大學(xué)計(jì)算機(jī)學(xué)院。

        猜你喜歡
        飛控數(shù)據(jù)類型通信協(xié)議
        詳談Java中的基本數(shù)據(jù)類型與引用數(shù)據(jù)類型
        如何理解數(shù)據(jù)結(jié)構(gòu)中的抽象數(shù)據(jù)類型
        民用飛機(jī)飛控通電自檢測(cè)安全性研究
        無(wú)人機(jī)飛控軟件架構(gòu)設(shè)計(jì)初探
        基于Z-Stack通信協(xié)議棧的紅外地溫采集電路設(shè)計(jì)
        02 飛控技術(shù)與機(jī)場(chǎng)安保引關(guān)注
        飛控系統(tǒng)故障告警實(shí)時(shí)監(jiān)控軟件的設(shè)計(jì)與實(shí)現(xiàn)
        基于DMX512通信協(xié)議的多路轉(zhuǎn)發(fā)器設(shè)計(jì)與研究
        基于NS-3的PLC多頻通信協(xié)議仿真平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)
        RSSP-I、RSSP-Ⅱ及SAHARA三種安全通信協(xié)議實(shí)現(xiàn)技術(shù)簡(jiǎn)介
        欧美熟妇色ⅹxxx欧美妇| 日韩女优视频网站一区二区三区| 国产精品内射久久一级二| 国内免费高清在线观看| 台湾佬娱乐中文22vvvv | 男女性生活视频免费网站| 美腿丝袜在线一区二区| 中文人妻熟妇乱又伦精品| 亚洲AV成人无码久久精品老人 | 亚洲av永久无码天堂网毛片| 无码久久流水呻吟| 一区二区三区日本久久| 亚洲av无码精品无码麻豆| 麻豆果冻传媒在线观看| 亚洲AV毛片无码成人区httP | 免费一区二区三区久久| 亚洲最新中文字幕一区| 亚洲成年国产一区二区| 日本护士xxxx视频| 最近高清中文在线字幕观看| 亚洲精品一区二区三区播放| 久久热免费最新精品视频网站| 97日日碰曰曰摸日日澡| 精品推荐国产精品店| 人妻少妇av中文字幕乱码免费| 久草视频这里只有精品| 少妇高潮一区二区三区99| 国产精品成人va| 日本高清不卡一区二区三区| 亚洲最大中文字幕在线| 久久久g0g0午夜无码精品| 日韩二三区| av有码在线一区二区| 亚洲av精二区三区日韩| 免费特级毛片| 亚洲一区二区在线视频播放| 三个黑人插一个女的视频| 女人下边被添全过视频| 国产一区二区不卡老阿姨| 免费大学生国产在线观看p| 日本一区二区三区区视频|