第七章 PX4-Mavlink解析
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
第七章?PX4-Mavlink解析
首先我們是還是來說一說mavlink吧。Mavlink協(xié)議是無人機(jī)的一種開源通信協(xié)議。可以理解就是按照一定的格式來發(fā)送數(shù)據(jù)。
這一章節(jié)涉及到了消息的打包發(fā)送和接收解析。
?????????首先我們還是找到入口函數(shù)然后回到腳本啟動(dòng)中找到mavlink的啟動(dòng)?,這個(gè)找到應(yīng)該不難吧,前面幾章都有這個(gè)。這里有一個(gè)需要提一下,很多人在后臺(tái)nsh調(diào)試出現(xiàn)亂碼需要拔掉SD卡就行了,造成這個(gè)問題的原因是同時(shí)也發(fā)送了mavlink消息,這個(gè)的啟動(dòng)如圖:
?????????回到start函數(shù)找到創(chuàng)建的任務(wù)start_helper在到else中找到task_main中。首先還是對(duì)波特率進(jìn)行初始化設(shè)置速率設(shè)置模式設(shè)置。然后根據(jù)啟動(dòng)參數(shù)我們可以知道_daterate=1200,_device_name=/dev/tty1很顯然數(shù)傳用的是串口1,我們對(duì)應(yīng)到硬件確實(shí)是串口1哦,這個(gè)沒什么好說的吧。
然后就是選擇控制模式這個(gè)也可以找到,在new初始化的時(shí)候就可以看到。進(jìn)入這個(gè)if可以看到對(duì)串口進(jìn)行了配置這個(gè)沒什么好說的跟GPS的配置方式差不多,如果大家不明白去看看GPS這一章節(jié)。然后初始化發(fā)送是否有沖突。更新mavlink參數(shù)所有的參數(shù)都是有用的這里貼出一個(gè)網(wǎng)站http://mavlink.org/messages/common大家自己去查查看,那些參數(shù)如果英文水平還可以的話可以自己去理解。
?????????接著就創(chuàng)建了mavlink消息接收這里面就也創(chuàng)建了一個(gè)任務(wù)查看這個(gè)start_helper函數(shù),首先還是new?然后執(zhí)行receive_thread函數(shù),在這個(gè)函數(shù)中一開始獲取串口,到while中開始讀取串口數(shù)據(jù)然后就需要解析獲取的數(shù)據(jù)這里有兩個(gè)一樣的我們用的mavlinkV2.0,剩下的就自己找。然后就是獲取數(shù)據(jù)ID?并解析這里的解析需要自己去定義結(jié)構(gòu)體然后去賦值和發(fā)布數(shù)據(jù)(最好是用msg文件)。這里我們舉個(gè)例子這個(gè)消息幀是138,里面就有對(duì)接收到的數(shù)據(jù)賦值然后就是發(fā)布數(shù)據(jù)。
?????????在回到mavlink_main.cpp中繼續(xù)往下分析,接下來就是數(shù)據(jù)流的配置和參數(shù)的數(shù)據(jù)流的配置。往下走你可以看到switch語(yǔ)句這里面就有對(duì)數(shù)據(jù)發(fā)送頻率配置了。如果某些沒用的數(shù)據(jù)或者不是很重要的數(shù)據(jù)你想傳的慢一點(diǎn)或者快一點(diǎn)就在這里修改了哦。。講到這個(gè)configure_stream數(shù)據(jù)函數(shù),接下來就對(duì)這個(gè)進(jìn)行描述一下,熟悉了這個(gè)你就可以自己添加數(shù)據(jù)進(jìn)行傳輸了。首先找到這個(gè)函數(shù),前面是對(duì)數(shù)據(jù)進(jìn)行搜索是否存在,然后通過for來找到這個(gè)數(shù)據(jù)流的列表,這里我們需要看一看streams_list列表了這是一個(gè)數(shù)組都是對(duì)這些要發(fā)送的數(shù)據(jù)進(jìn)行一個(gè)初始化。我們隨意找一幀數(shù)據(jù),我們就找第一個(gè)數(shù)據(jù)幀心跳包的,回到定義的這個(gè)類中,首先就是獲取這個(gè)名字,然后它的ID?,這里的ID我們稍后再講,然后就是send函數(shù),這里面就有函數(shù),這個(gè)函數(shù)可以自己編寫也可以生成。接下來我們就講這個(gè)ID和這個(gè)函數(shù)了。
?????????這個(gè)ID是唯一的,這個(gè)我們只需加入ID然后利用mavlink工具就可以生成相關(guān)函數(shù),打包函數(shù)和發(fā)送函數(shù),這些都不用管。首先我們?nèi)フ乙粋€(gè)文件common.xml,我們用的是2.0的協(xié)議,我們?cè)谶@個(gè)文件中的最后加入一個(gè)ID和name,這個(gè)你只需模仿就行,這里面有field name(參數(shù)名字)和type(數(shù)據(jù)類型)這個(gè)不難理解,大家相加多少就加多少。注意哦ID的個(gè)數(shù)是有限制的不能無限往上加。編輯好這個(gè)文件后你就要用mavlink工具了。
先下載工具gitclone?https://github.com/mavlink/mavlink?mavlink-generator,回到工具目錄cd mavlink-generator,執(zhí)行python mavgenerete.py就會(huì)出現(xiàn)一個(gè)配置GUI?,將該下的common.xml文件加入,生成文件目錄為這個(gè)要對(duì)應(yīng)不要搞錯(cuò)了,然后你在該目錄下就可以看到你要的.h文件了命名是mavlink_msg_***.h,然后你就可以使用了。如何加入一個(gè)新的數(shù)據(jù)幀就將完了。然后回到mavlink_main中,我們就到while中去執(zhí)行。這個(gè)里面當(dāng)中就基本上是對(duì)定義的消息幀去賦值了,賦值完了調(diào)用發(fā)送函數(shù)就算是完事。
總結(jié)
以上是生活随笔為你收集整理的第七章 PX4-Mavlink解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第六章 PX4-Sensors解析
- 下一篇: 第八章 PX4-SDlog解析