無人機、無人船通信協議——MAVLink(V1.0、V2.0,心跳包,GPS定位,7種飛行模式)

目錄

2、MAVLink的優勢

3、MAVLink信息結構

3.1、MAVLink V1.0

3.2、MAVLink V2.0

4、心跳包(HEARTBEAT MESSAGE)

5、全球定位信息(GLOBAL POSITION MESSAGE)

6、命令信息(COMMAND MESSAGES)

6.1、COMMAND_LONG

6.2、任務項命令(THE MISSION ITEM COMMAND)

6.3、飛行模式(FLIGHT MODES)


在無人機、無人船控制中,由於無人機等控制爲切入式設備而地面站爲高級計算機(常爲Windows或Linux),因此兩者之間存在着不同系統的問題,不同系統之間如何進行通信保證互相理解對方發來的信息就成爲一個問題。

打一個比方一箇中國人和一個日本人進行交流,中國人說漢語,日本人說日語,顯然無法溝通。這個時候,全球規定英語爲通用語言,中國人和日本人都學習英語後,兩者就可以進行有效溝通了。這裏英語就好比通信協議,它指定了信息內容表達的方式。而MAVLink指定了無人設備和地面站之間信息內容如何封包,如何解讀。

MAVLink全稱Micro Air Vehicle Link ,即微型飛行器連接通信協議,於2009年初由Lorenz Meier首次發佈。

2、MAVLink的優勢

(1)MAVLink基於LGPL開源協議而來,所以作爲商業公司可以免費使用,並且相對於GPL要求使用開發的商業軟件也必須開源,LGPL並無此要求,所以作爲商業公司可以放心使用;

(2)支持不同的傳輸層和傳輸媒介

它支持不同類型的傳輸層和介質。可以通過WiFi、以太網(即或串口遙測低頻寬通道,以低於ghz頻率運作,即433MHz、868MHz或915MHz。次千兆赫頻率允許我們達到大的通信範圍,遠程控制無人系統。最大imum數據速率可達250kbps,最大範圍通常爲500m,但高度依賴於環境和噪聲水平以及天線設置。下表列出了一些常用的遙測設備。

(3)高可靠性

MAVLink設定了心跳包機制(見第四點),可用於檢測無人設備與地面站之間連通性的檢測。衆所周知,UDP是一種數據報協議,不需要客戶端和服務器之間的連接,也沒有機制可以確保可靠地傳遞消息,但是可以爲實時性和丟失提供輕量級的替代方案 容忍的消息流。該機制使得使用UDP通信方式成爲可能。

3、MAVLink信息結構

當前MAVLink結構共有兩個版本,分別爲V1.0和V2.0

3.1、MAVLink V1.0

可見V1.0當0有效載荷爲0時,只有8個字節,非常小。

這裏面最重要的是信息包編號和有效載荷數據,信息包編號告訴設備這個是什麼信息,有效載荷數據是信息的具體內容。

如 滾轉角速度、俯仰角速度、偏航角速度、油門 信息編號爲59 (這裏我附上了MAVLink1.0協議全文)

3.2、MAVLink V2.0

與V1.0不同點:

(1)INC FLAGS(Incompatibility flags):此標誌位會影響包的結構,標誌指示數據包是否包含某些在分析數據包時必須考慮的功能。 例如,不兼容標誌等於0x01表示該數據包已簽名,並且在數據包的末尾附加了簽名;

(2)CMP FLAGS(compatibility flags):不影響包的結構,它指示如果沒有理解,可以忽略的標誌,即使無法解釋標誌,也不會阻止解析器處理消息;

(3)Message ID (MSGID):相較於V1.0版本的8位變爲24位,它允許在MAVLink 2.0中使用更多類型的消息,最多可以達到16777215種類型;

(4)可選用的SIGNATURE:最後,MAVLink 2.0使用可選的13字節簽名域來確保鏈接是防篡改的。 此功能顯着改善了MAVLink 1.0的安全性,因爲它允許對消息進行身份驗證並驗證消息源自受信任的源。 如果不兼容標誌設置爲0x01,則會附加消息的簽名;

(5)STX:1.0版本中爲0XFE,2.0版本中爲0XFD。

4、心跳包(HEARTBEAT MESSAGE)

查閱V1.0通訊協議,心跳包對應MSG ID值爲0

HEARTBEAT消息是MAVLink中最重要的消息,其結構上圖所示。它表示無人系統存在且處於活動狀態。無人系統定期(通常每秒)將心跳消息發送到地面站,以通知GCS它處於活動狀態。心跳是必備消息。除報頭外,消息有效負載還包含有關無人系統的基本信息。

(1)type:它表示微型飛行器的類型。根據最新規範,在MAV_TYPE中定義了33種預定義類型,包括四旋翼(MAV_TYPE_QUADROTOR = 2),直升機(MAV_TYPE_HELICOPTER = 4),固定翼(MAV_TYPE_FIXED_WING = 1),以及其他幾種。

(2)autopilot:自動駕駛的類型。 MAV_AUTOPILOT枚舉結構中定義了幾種類型。例如,MAV_AUTOPILOT_GENERIC = 0表示通用自動駕駛儀,MAV_AUTOPILOT _ARDUPILOTMEGA = 3表示ArduPilot自動駕駛儀,MAV_AUTOPILOT_PX4 = 12用於PX4自動駕駛儀。

(3)base_mode:指示不同的操作模式。 正確理解心跳消息並從中提取有用信息對理解base_mode至關重要。 它以8位編碼。 共有8個預定義的標記。

         FLAG= 1:保留供將來使用;

         FLAG=2:表示已啓用測試模式。 此模式用於臨時測試,而不用於常規工具;

         FLAG=4:表示啓用了自主模式(AUTO)。 這意味着無人系統通過導航到從地面站發送給它的目標航路點來自主運行。 在自動模式下,任務會加載到自動駕駛儀上。 任務由系統必須導航的一組多個航點組成。

         FLAG=8:表示啓用了GUIDED模式。 在GUIDED模式下,任務由發送到系統的單個航路點組成。 然後,系統自動導航到指定位置。

         FLAG=16:表示系統可以通過自動控制來穩定其姿態(方向和高度)以及可能的位置。 這就需要外部傳感器(例如室內環境中的GPS),高度傳感器(氣壓計,LIDAR)或用於室內定位的運動捕捉才能在穩定狀態下懸停。 系統需要外部控制輸入才能使其移動。

         FLAG=32:表示迴路仿真器中的硬件已激活,即當內部自動駕駛儀完全運行時,所有電機和電機執行器均被鎖定;

         FLAG=64:表示已啓用手動模式,這要求飛行員使用遠程控制輸入手動控制系統。 在手動控制中,自動駕駛儀不會進行自動控制;

         FLAG=128:系統處於待命狀態,這意味着電動機已啓用/正在運行,並且可以啓動飛行。

(4)custom_mode:自定義模式,也是必不可少的。 它指示除基本模式外還解釋的自動駕駛儀特定標記。 在心跳消息解析中使用它來確定自動駕駛儀系統的飛行模式。 自定義模式有一些預定義的值,其中0表示手動飛行模式,4表示引導模式,10表示自動模式,11表示RTL模式,9表示LAND模式,2表示ALT_HOLD,5表示LOITER。

(5)system_status:一個系統狀態的標誌。 根據最新規範,已定義:

         system_status = 0:指未初始化系統或未知狀態的系統;

         system_status = 1:表示系統正在引導;

         system_status = 2:表示系統正在執行校準。 實際上,傳感器校準是一個非常重要的階段,以確保諸如慣性測量單元(IMU)和通行證這樣的飛行傳感器保持一致並按預期運行。

         system_status = 3:這意味着系統處於待機模式,可以隨時啓動;

         system_status = 4:表示電動機已接合並且系統處於活動狀態並且可能在空中;

         system_status = 5:表示潛在的錯誤,並且系統處於嚴重狀態,儘管它仍然可以導航。 例如,在臨時干擾或電池電量不足時,可能會發生這種情況;

         system_status = 6 :這意味着緊急情況,其中無人駕駛系統失去了對某些零件的控制權,並處於困境中。 系統可能已經崩潰;

         system_status = 7:表示系統已開始關閉電源過程,現在正在關閉;

         system_status = 8:表示系統正在終止並結束其飛行。

(6)mavlink_version:表示MAVLink版本。 用戶不可編輯,由協議設置。

5、全球定位信息(GLOBAL POSITION MESSAGE)

全球定位消息的id等於33,代表全球定位傳感器提供的已過濾GPS座標。 如圖4所示。此消息執行與全球位置相關的無人系統的重要信息,即GPS緯度(lat),經度(lon)以及絕對高度(alt)。 這三個值被編碼爲四個字節(32位)。 必須將維度(lat)和經度(lon)的值除以10^{7},以獲得真正的浮動GPS值。高度以毫米表示。

該消息還包含一個相對高度場(relative_alt),它表示相對於無人機系統的起飛地面點的高度。 它不同於絕對高度。 例如,由於無人機在地面上,福州的絕對高度爲7.58米,對應於0米的相對高度。 如果無人機在距地面10米的相對高度處起飛,則其絕對高度爲17.58米。 此外,該消息還執行有關無人機系統沿3軸((x,y,z)的線速度)的信息,可從GPS傳感器中收集該信息,並也可以從其他傳感器(例如慣性測量單元(IMU))中讀取。

6、命令信息(COMMAND MESSAGES)

MAVLink中有許多命令消息,它們可以請求無人系統執行某些操作。 接下來,我將概述了一些最重要的命令。 

6.1、COMMAND_LONG

COMMAND_LONG是一個多功能命令,允許根據消息的命令類型及其參數發送不同類型的命令。 COMMAND_LONG消息ID等於76,並用11個字段定義,如圖5所示。target_system字段和target_component字段指定將執行命令的系統及其底層件。

command:是指要執行的命令的類型。 它在MAV_CMD命令枚舉中定義。 另外,對於每個命令,可以設置與該命令相關的一組參數。例如,帶有21的命令ID是指LAND命令,而沒有參數。 其他一些命令具有參數,例如起飛命令(ID = 22),該參數必須在param7中指定起飛高度 。 MAV_CMD命令枚舉中定義了大約60種命令類型。

confirmation:指示消息是第一次發送的,值爲0,其他值表示消息的確認。

param1-7:7個參數取決於命令的類型。 例如,對於LAND命令,所有七個參數均無用。 在起飛命令中,第七個參數代表起飛所需的高度。

6.2、任務項命令(THE MISSION ITEM COMMAND)

任務項目命令的消息ID等於39,允許將航路點發送到無人系統,以便它在GUIDED模式下自動導航到該特定路點。每個任務項目命令消息都有一個序列號,該序列號指定從0開始的任務編號,該序列號指定了起始位置。它還具有三個字段(x,y,z),用於指定路標的座標。但是,必須相對於參考系指定座標。因此,該消息具有一個稱爲框架的字段,該字段指定了航路點的參考座標框架。該參數很重要,因爲解釋座標(x,y,z)的含義至關重要。例如,如果我們相對於全局框架MAV_FRAME_GLOBAL將航路點座標設置爲(24.68773,46.72185,10),這意味着將轉到GPS位置(24.68773,46.72185)的航路點,並且絕對高度爲10米海平面。例如,在福州,絕對高度爲7.58 m,因此這可能是因爲目標高度低於地面高度,導致無人機可能墜落並撞到地面。但是,通常情況下,我們要指定相對於地面的位置(例如,離地面10米),爲此,我們需要將參考框架指定爲全局框架,但相對海拔高度應爲MAV_FRAME_GLOBAL_RELATIVE_ALT。

6.3、飛行模式(FLIGHT MODES)

飛行模式見另一篇文章:

https://blog.csdn.net/qq_35379989/article/details/104862128

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章