1. 程式人生 > >第五章 PX4-Pixhawk-GPS解析

第五章 PX4-Pixhawk-GPS解析

第五章 PX4-GPS解析

在上一章節我們對感測器MPU6000做了一個解析,MPU6000所支援的協議是SPI。這一章節我們來解析GPS,GPS使用的是串列埠通訊。這裡我們著重講解UBLOX的解析過程,並且會附帶串列埠的解析說明。這一章節完了之後大家有興趣可以嘗試RTK的資料解析,對於RTK我在前面講到過。

首先我們還是找到GPS的啟動程式碼,GPS的啟動在RCS檔案中直接就是第五章 <wbr>PX4-Pixhawk-GPS解析

。這裡我們回到驅動層第五章 <wbr>PX4-Pixhawk-GPS解析

找到檔案gps.cpp檔案找到入口函式第五章 <wbr>PX4-Pixhawk-GPS解析

。這裡說明一下PX4的gps驅動是可以支援2套gps的第五章 <wbr>PX4-Pixhawk-GPS解析

從這裡就可以看出來。首先我們還是來看device_name,這個引數是第五章 <wbr>PX4-Pixhawk-GPS解析

驅動層的h檔案均在第五章 <wbr>PX4-Pixhawk-GPS解析

目錄下。很顯然這裡其實就是串列埠的名字。既然說到這裡我們就來說說“/dev/ttys3”是如何註冊到串列埠的吧。

還記的SPI的驅動吧。這裡我們主控是V2板的所以是支援的處理器是stm32的,所以我們就到stm32的驅動中去找,這裡一般對stm32庫瞭解的話都知道,串列埠要麼是usart要麼是serial,這裡我們就可以知道檔案是stm32_serial.c,初始化串列埠程式就是up_serialinit了,至於為什麼,你可以去追蹤一下,發現這個函式在第五章 <wbr>PX4-Pixhawk-GPS解析

檔案中呼叫,stm32是屬於arm不是avr哦,第五章 <wbr>PX4-Pixhawk-GPS解析

然後一級一級的去追蹤你就能發現最終的源頭了。回到stm32_serial.c檔案的初始那段程式碼去。你可以看到NSH 後臺控制串列埠註冊的是串列埠7第五章 <wbr>PX4-Pixhawk-GPS解析

CONSOLE_UART=7哦,這裡你可以去追蹤哦,對照deconfig檔案,那些define定義在deconfig檔案能找到的。並且串列埠7還註冊了DMA控制

第五章 <wbr>PX4-Pixhawk-GPS解析,接下來的for會對串列埠一一初始化第五章 <wbr>PX4-Pixhawk-GPS解析看到沒一開始是複製第五章 <wbr>PX4-Pixhawk-GPS解析然後對x值進行改變然後註冊了哦,剛才我們找到GPS是ttys3,所以我們檢視一下uart_devs[2],這裡面的邏輯應該不難理解吧!發現註冊的是串列埠3。我們在來看看硬體的GPS介面第五章 <wbr>PX4-Pixhawk-GPS解析

正好是串列埠3哦,這下對應起來了吧。串列埠的註冊也就講完了。

這裡我們就直接進入start函式,第五章 <wbr>PX4-Pixhawk-GPS解析這裡的引數是第五章 <wbr>PX4-Pixhawk-GPS解析相信也不難理解吧。然後就是產生驅動首先還是以new的方式進行初始,然後成功後進行init函式第五章 <wbr>PX4-Pixhawk-GPS解析這裡的init函式就是gps的init,這個自己理解一下,所以這個初始化也在本檔案中,找到init函式看到的是串列埠任務第五章 <wbr>PX4-Pixhawk-GPS解析同樣去追中函式第五章 <wbr>PX4-Pixhawk-GPS解析找到task_main函式,首先是開啟串列埠

第五章 <wbr>PX4-Pixhawk-GPS解析這裡的_port在new的時候賦完值了哦。然後就是訂閱和初始化資料轉存,然後進入while中去執行。首先會判斷_fake_gps引數,這個是虛擬的資料,真正場合肯定不會用的,所以我們看else的,這裡是一個case語句是對模組的選擇,我們今天只講ublox,所以看到這裡也是new GPSDriverUBX.然後是檢測配置第五章 <wbr>PX4-Pixhawk-GPS解析主要是波特率,這裡的configure是一個虛擬函式,我們使用的ublox所以當然是到ubx.cpp中去找了。第五章 <wbr>PX4-Pixhawk-GPS解析這裡面的函式都不難,但是要對比手冊來看,這裡面的處理機制可以值得學習哦,通過輪詢的方式來查詢ublox的波特率,還有就是配置ublox。

接下來就是復位那些資料了,然後就是要接收資料了第五章 <wbr>PX4-Pixhawk-GPS解析。找到ublox的receive函式第五章 <wbr>PX4-Pixhawk-GPS解析,進入讀取串列埠資料第五章 <wbr>PX4-Pixhawk-GPS解析讀取的資料暫存在buf中。這裡的read函式大家不妨去找找,這個是一個過載到gps.cpp中的回掉函式第五章 <wbr>PX4-Pixhawk-GPS解析,大家也能看到讀取資料的case語句第五章 <wbr>PX4-Pixhawk-GPS解析這裡面就有對串列埠資料中斷讀取的函式,大家自己去理解一下。

然後進入資料解析階段了第五章 <wbr>PX4-Pixhawk-GPS解析這裡我們貼出ublox的協議格式。

第五章 <wbr>PX4-Pixhawk-GPS解析

所以從這裡就可以看出幀頭以0xb5,0x62開頭。第一個case就是判斷是0xb5和是否為rtcm格式第五章 <wbr>PX4-Pixhawk-GPS解析

第五章 <wbr>PX4-Pixhawk-GPS解析

完成幀頭後需要進行校驗了,看到沒校驗是從第三個資料開始的哦,第五章 <wbr>PX4-Pixhawk-GPS解析ublox採用的是校驗和的第五章 <wbr>PX4-Pixhawk-GPS解析然後得到2個數據的長度第五章 <wbr>PX4-Pixhawk-GPS解析

這裡的_rx_payload_length就是長度了。接著就開始解析相關資料了,這裡我們只解析SVINFO資訊第五章 <wbr>PX4-Pixhawk-GPS解析

看到沒通過之前接收到的_rx_msg來判斷接收到的是什麼資料。首先我們還是來看看ublox的SVINFO資料幀,第五章 <wbr>PX4-Pixhawk-GPS解析

進入到解析函式就可以看到這些資料的解析了,這裡不做過多說明,只要對照手冊就很容易讀懂,這幀資料主要是衛星高度角、信噪比了。

第五章 <wbr>PX4-Pixhawk-GPS解析

解析出資料後就要繼續進行校驗和了,從剛才ublox的資料幀也可以看出來校驗和是佔兩個字元。

第五章 <wbr>PX4-Pixhawk-GPS解析
當然校驗完成了後還是要解析其他的資料了第五章 <wbr>PX4-Pixhawk-GPS解析,這裡面就有NAV_PVT、NAV_POSLLH等等,這些資料幀你就看到了經緯度、高度,ecef座標了,這些解析的就沒必要說了吧。

所有的資料在這裡就算是接收完了,完了之後當然是要釋出出去給需要的機制去訂製。第五章 <wbr>PX4-Pixhawk-GPS解析

第五章 <wbr>PX4-Pixhawk-GPS解析大家也行看到的是_report_gps_pos,其實這個不難理解,大家還記得那個new嗎?找到ublox的new初始化你能找到原因的。到這裡GPS的驅動就基本上是完成了。

相關推薦

PX4-Pixhawk-GPS解析

第五章 PX4-GPS解析在上一章節我們對感測器MPU6000做了一個解析,MPU6000所支援的協議是SPI。這一章節我們來解析GPS,GPS使用的是串列埠通訊。這裡我們著重講解UBLOX的解析過程,並且會附帶串列埠的解析說明。這一章節完了之後大家有興趣可以嘗試RTK的資料

PX4-Pixhawk-MPU6000感測器驅動解析

第四章MPU6000感測器驅動解析          Mpu6000是一個3軸加速度和3軸陀螺儀感測器,這一章節我們將對MPU6000這個感測器進行解析,依照這個解析步驟同樣可以對L3GD20(3軸陀螺儀)、HMC5883(3軸磁力計)、MS5611(氣壓高度計)程式進行

Java入門 第一季 編程練習解析

使用 接收 family 程序 基本 快捷 ng- 導入 ear 這是我學習慕課網Java課程的筆記。原視頻鏈接為:http://www.imooc.com/learn/85 5-1 基本寫法 自己主動補全快捷鍵:alt + /

尚學堂java 答案解析

本答案為本人個人編輯,僅供參考,如果讀者發現,請私信本人或在下方評論,提醒本人修改 一.選擇題 1.AB 解析:A可以被所有類訪問,B可以被當前包的所有類訪問,也可以被所有子類訪問 2.A 解析:所有子類會先用super()方法呼叫父類構造方法,再呼叫自己的構造方法

HashMap原始碼解析

5.1、對於HashMap需要掌握以下幾點 Map的建立:HashMap() 往Map中新增鍵值對:即put(Object key, Object value)方法 獲取Map中的單個物件:即get(Object key)方法 刪除Map中的物件:即remove(Object key)方法 判斷

SpringMVC之ViewResolver和View解析

          過完年了,本來是想在年前將SpringMVC系列寫完的,只是在接近年末的時候沒有了一種學習心態,這兩天看了一下ViewResolver原始碼,就想盡快將這篇部落格寫出,也好完結SpringMVC的系列部落格並開始下面的學習。           自己寫的

作業-陣列-計算機17級(帶詳細解析

解析在下面    解析: p2-1:  可以省略行,但不能省略列,因為總的元素個數已知,如果只知道行數,並無法確定第二維中每一維有多少元素.但如果知道列數,即已知第二維每一維有多少元素,則,

構建之法 團隊和流程

ini 之前 組織 第五章 團隊 mod 交互 然而 逆轉 典型的團隊開發模式和流程,完全是新的內容;涉及到更多的術語和有意思的策略性東西 1.團隊模式【我比較認可的】 主治醫師模式 由首席程序員(相當於首席醫生)負責整個工程,周圍人員各司其職,配合支持中心人物的工作;

Java 線程三版 極簡同步技巧 讀書筆記

prev ear ont java else 停止 第三版 不同的 結合 一、能避免同步嗎? 取得鎖會由於下面原因導致成本非常高: 取得由競爭的鎖須要在虛擬機的層面上執行很多其它的程序代碼。 要取得有競爭鎖的線程總是必須等到鎖被釋放後。 1. 寄

讀《構建之法》

交付 瀑布模型 pro 集體 成員 統一 工作 變形 流程 第五章說的是團隊和流程, 什麽是團隊? 團隊有一致的集體目標,團隊要一起完成這目標,一個團隊的成員不一定要同時工作,例如接力賽跑。 團隊成員有各自的分工,互相依賴合作,共同完成任務。 軟件團隊有許多

紫書訓練2 F - Compound Words

每次 bre main sed color ons div img insert F - Compound Words You are to find all the two-word compound words in a dictionary. A two-word c

紫書訓練 uva 10763 Foreign Exchange by crq

evo pan hang n) 情況 sed 是否 for ear Your non-profit organization (iCORE - international Confederation of Revolver Enthusiasts) coordinates

《構建之法》讀書筆記

收集數據 效率 衡量 配置 測試 人在 模式 輸出 發現 第5章 團隊和流程  一、非團隊和團隊 團隊的共同特點: 1、團隊有一致的集體目標,團隊要一起完成這目標。一個團隊的成員不一定要同時工作,例如接力跑。 2、團隊成員有各自的分工,互相依賴合作,共同完成任務。 二、軟件

團隊和流程隨筆

步驟 但是 位置 產品 地理位置 開始 如果 軟件 流程 軟件團隊的模式: 主治醫師模式、明星模式、社區模式、業余劇團模式、秘密團隊、特工團隊、交響樂團模式、爵士樂模式、功能團隊模式、官僚模式。 瀑布模型的特點: 強調階段的順序性和依賴性,即下一個階段的開始必須以上一個階段

深入理解計算機系統 大略和大略

$0 一個 編譯 存儲器 系統 32位 做了 ++i 擴展 這2章總結的很少,主要是覺得沒那麽重要。 1.2個操作數的指令,第二個操作數通常是目的操作數:movb a b,move a to b,而add a b,b+=a,指令分為指令類,如mov類:movb,movw,m

讀構建之法 :團隊和流程

min 這樣的 程序員 希望 成員 eat 貢獻 核心 不能 團隊有一致的集體目標,團隊要一起完成這目標。一個團隊的成員不一定要同時工作,例如接力賽跑。 團隊成員有各自的分工,互相依賴合作,共同完成任務。 軟件團隊有各種形式,適用於不同的人員和需求。基於直覺形成的團隊模式未

《Java並發編程實戰》 同步容器類 讀書筆記

blank sortedset 方法 width lists 讀書 run 生產者消費者模式 ear 一、同步容器類 1. 同步容器類的問題 線程容器類都是線程安全的。可是當在其上進行符合操作則須要而外加鎖保護其安全性。 常見符合操作包括: . 叠代 . 跳轉(

工作 業務 同時 變更管理 構造 部署 交付 階段 rup 團隊有一致的集體目標,要一起完成這個目標。一個團隊的成員不一定要同時工作。 團隊成員有各自的分工,互相依賴合作,共同完成任務。 軟件團隊的模式有: 一窩蜂模式,主治醫師模式,明星模式,社區模式,業余劇團模式,秘密團

隨筆

缺點 實現 定義 選擇 根據 的人 目的 反饋 目前   本章繼上一章的兩人合作,深入講解,介紹了團隊的定義,模式,開發流程等,雖然有多種模式,也有多種開發流程,但這些各有其優缺點,有其適合的情況,所以在進行選擇時,應該的更多的分析項目的需求,以及需要達到的目標,對質量的要

Java(

簡潔 重復 清晰 快速 結束 編寫 int() input 出現 第四章 一、 switch結構(開關語句)的語法 switch(表達式[dream1] ){ case 常量1[dream2] : //語句塊1