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