真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

開源飛控初探(五):MAVLink協(xié)議和Java庫-創(chuàng)新互聯(lián)

概述

MAVLink協(xié)議是一種(應用層)數(shù)據(jù)協(xié)議,不依賴傳輸協(xié)議。傳輸層可以是TCP、UDP、RS232串口,甚至基于WebSocket。在定義數(shù)據(jù)的基礎上,補充描述了幾種子協(xié)議(microservice,直譯是微服務)的現(xiàn)有實現(xiàn)。協(xié)議不保證送達,客戶端需要經(jīng)常檢查機器狀態(tài)確認命令被執(zhí)行。

公司專注于為企業(yè)提供網(wǎng)站設計、成都網(wǎng)站制作、微信公眾號開發(fā)、成都商城網(wǎng)站開發(fā),成都微信小程序,軟件按需開發(fā)等一站式互聯(lián)網(wǎng)企業(yè)服務。憑借多年豐富的經(jīng)驗,我們會仔細了解各客戶的需求而做出多方面的分析、設計、整合,為客戶設計出具風格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)建站更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務。

具體的數(shù)據(jù)定義包括:

  1. 數(shù)據(jù)幀格式,包括協(xié)議頭和載荷(Payload),協(xié)議頭包括協(xié)議版本、載荷長度、兼容標識、次序號、發(fā)送者系統(tǒng)號、發(fā)送者組件號、消息號、CRC檢驗和可選的簽名。

  1. 消息號枚舉和意義,不同的消息號其載荷的長度和意義。

  1. 命令子協(xié)議(一種特殊的消息),命令枚舉和意義

官方提供了數(shù)據(jù)幀的裝幀和解析基礎庫,支持12種語言,還有非官方的庫額外多支持3種語言。官方的基礎庫是通過腳本解析多個XML生成的,XML原始地描述了所有的消息、命令、枚舉。這些XML是包含的關系,按消息數(shù)量多少排序是:廠商定制消息集(例如ardupilotmega.xml) >common.xml(常用消息集,有161種消息)>minimal.xml(最小消息集,有2種消息)。生成基礎庫時可傳參給腳本指定消息集。

MAVLink的Java庫

生成目標為APM板子。源碼都在com.MAVLink包中,目錄文件結構:

  • uAvionix/CRC.java。CRC算法,算法的約定整數(shù)序列全是0。

  • enums/

  • 97個java文件,按協(xié)議規(guī)范定義了各種枚舉值。

  • Messages/

  • MAVLinkMessage.java。各種消息的抽象基類。每種MAVLink消息都有一個子類。

  • MAVLinkPayload.java。表示協(xié)議載荷,直接操作ByteBuffer。

  • MAVLinkStats.java。統(tǒng)計收發(fā)幀的數(shù)量和錯誤數(shù)。主要實現(xiàn)協(xié)議中的seq消息次序號。

  • ardupilotmega/

  • CRC.java。CRC算法,算法的約定整數(shù)序列已設為MAVLink自定義的值。

  • msg_*.java。63個消息類,APM特有的,都繼承MAVLinkMessage。

  • common/

  • CRC.java。和ardupilot/CRC.java是一樣的。

  • msg_*.java。136個消息類,都繼承MAVLinkMessage。

  • MAVLinkPacket.java。對一幀數(shù)據(jù)的封裝,有裝幀和解析(生成一個具體的消息類)操作。

  • Parser.java。解析過程的實現(xiàn)類,逐字節(jié)傳入數(shù)據(jù)。

數(shù)據(jù)接收流程:

  1. 將底層連接接收的字節(jié)流逐個字節(jié)傳入Parser.mavlink_parse_char(int c)函數(shù),至一幀接收完畢時會返回一個MAVLinkPacket實例,否則返回null。

  1. 調用MAVLinkPacket.unpack()函數(shù),即得到一個MAVLinkMessage實例

  1. 根據(jù)msgid成員變量判斷,強制轉換成對應子類。

發(fā)送流程:

  1. new一個具體的消息,對成員變量賦(業(yè)務)值

  1. 調用MAVLinkMessage.pack()函數(shù)得到一個MAVLinkPacket實例

  1. 調用MAVLinkPacket.encodePacket()函數(shù)得到byte[]傳給底層連接。

重要的協(xié)議流程 系統(tǒng)號和組件號

協(xié)議中各用一個字節(jié)(0~255)分別表示消息發(fā)送者的系統(tǒng)號(system ID)和組件號(component ID)。系統(tǒng)就兩種,飛控和地面站(飛控客戶端都叫地面站)??梢酝瑫r有多架飛機和多個地面站連接,所以系統(tǒng)號必須唯一。組件可以是飛控(固件)、無線電臺、相機、電機、萬向節(jié)、電池、顯示設備、降落傘,地面站控制模塊、慣性導航、GPS等,有固定枚舉值來表示這些組件。

部分消息的載荷里,有targetSystemID和targetComponentID參數(shù)來表示期望執(zhí)行命令的系統(tǒng)組件。

多架飛機的SystemID從1開始遞增。多個地面站的SystemID從255開始遞減。

心跳

各組件都發(fā)出HEARTBEAT ( #0 )消息,被其它系統(tǒng)組件用來判斷是否在線。各組件必須有規(guī)律地發(fā)出心跳消息,即使不發(fā)控制命令的也要。通常頻率為1Hz,如果連續(xù)4或5次沒收到消息就認為那個系統(tǒng)掉線了。

參數(shù)type

  • 地面站應為6,MAV_TYPE_GCS

  • 飛控是14,MAV_TYPE_OCTOROTOR,4軸8槳飛行器。

參數(shù)(組件能力與狀態(tài))

飛控客戶端可以請求想要的數(shù)據(jù)以及設置響應頻率,這些數(shù)據(jù)都來自上文的組件。完整的可請求的數(shù)據(jù)列表在這:https://ardupilot.org/dev/docs/mavlink-requesting-data.html。

涉及4種消息。

獲取

PARAM_REQUEST_LIST,獲取所有參數(shù)。地面站發(fā)出這個命令,飛控用PARAM_VALUE消息逐個參數(shù)回復。PARAM_VALUE消息有param_count參數(shù)表示總共有多少個參數(shù)以及param_index表示這是第幾個。

PARAM_REQUEST_READ,獲取單個參數(shù),飛控用PARAM_VALUE消息回復。

設置

PARAM_SET,設置單個參數(shù)。地面站發(fā)出這個命令,飛控用PARAM_VALUE消息再廣播一次表示收到。

航線

涉及10種消息

上傳
  1. 地面站發(fā)出MISSION_COUNT,表示有多少個item

  1. 飛控發(fā)來MISSION_REQUEST_INT,參數(shù)seq表示第幾個。

  1. 地面站回復MISSION_ITEM_INT,按seq第幾個來上傳

  1. 飛控發(fā)來MISSION_ACK表示已接受所有item。

查詢
  1. 地面站發(fā)出MISSION_REQUEST_LIST

  1. 然后是上傳過程調換角色,即地面站發(fā)MISSION_REQUEST_INT,飛控發(fā)MISSION_ITEM_INT,最后地面站發(fā)MISSION_ACK

流程圖如下:

報告

飛控發(fā)出MISSION_CURRENT消息,當前執(zhí)行的item:飛控會報告當前執(zhí)行的mission item seq號

飛控發(fā)出MISSION_ITEM_REACHED消息,飛控每到達一個mission item的地點就會報告一次,參數(shù)為seq

設置當前item

地面站發(fā)出MISSION_SET_CURRENT消息。我們不會用。

清除

地面站發(fā)出MISSION_CLEAR_ALL消息,清除所有任務item

重要的命令
  • MAV_CMD_NAV_WAYPOINT (16 ),航點信息,會直線飛過去。用在MISSION_ITEM_INT消息中

  • MAV_CMD_NAV_RETURN_TO_LAUNCH (20 ),返航命令。用在MISSION_ITEM_INT消息中

  • MAV_CMD_NAV_LAND (21 ),著陸命令。用在MISSION_ITEM_INT消息中

  • MAV_CMD_NAV_TAKEOFF (22 ),起飛命令。用在COMMAND_LOG消息中

  • MAV_CMD_NAV_SPLINE_WAYPOINT (82 ),航點信息,會延曲線路徑飛過去。用在MISSION_ITEM_INT消息中

  • MAV_CMD_MISSION_START (300 ),開始執(zhí)行任務。用在COMMAND_LOG消息中

  • MAV_CMD_COMPONENT_ARM_DISARM (400 ),鎖定或解鎖。用在COMMAND_LOG消息中

  • MAV_CMD_SET_MESSAGE_INTERVAL (511 ),設置消息的發(fā)送間隔。用在COMMAND_LOG消息中

  • MAV_CMD_REQUEST_MESSAGE (512 ),511命令的一次性版。用在COMMAND_LOG消息中

  • MAV_CMD_REQUEST_PROTOCOL_VERSION (519 ),請求對方的MAVLink版本兼容性。對方應該ACK并發(fā)回一個PROTOCOL_VERSION消息。用在COMMAND_LOG消息中

  • MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES (520 ),獲取自動駕駛的能力。用在COMMAND_LOG消息中。

參考資料
  • 設計原則。https://docs.google.com/document/d/1XtbD0ORNkhZ8eKrsbSIZNLyg9sFRXMXbsR2mp37KbIg/edit

  • 基礎知識。MAVLink Basics ? Dev documentation

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


標題名稱:開源飛控初探(五):MAVLink協(xié)議和Java庫-創(chuàng)新互聯(lián)
標題網(wǎng)址:http://weahome.cn/article/ijhdd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部