1. 程式人生 > >px4原始碼學習三--px4原始碼結構分析

px4原始碼學習三--px4原始碼結構分析

px4原始碼結構分析

Px4原始碼目錄

這裡寫圖片描述
這裡寫圖片描述

cmake:

是存放的 Cmake 編輯指令碼資料夾, 其中 Cmake/Configs 是存放的不同硬體的編譯指令碼, nuttx_mindpx-v2_default 是 PIXHAWK 這個硬體的編輯指令碼, 如果要新增驅動, 新增系統功能的模組函式, 要修改裡面的編譯選項, 保證新增的模組檔案, 能夠被編譯到。

msg

這個目錄存放在有關urob主題相關的資料,檔名對應著主體名稱。需要擴充套件uORB主題時候,需要在這個目錄下新增對應檔案,加入資料,就會自動生成主題名稱的資料結構。

nuttx-configs

(猜測)應該是執行nuttx系統時對應的硬體巨集的定義,以及編譯啊什麼的配置

ROMFS

是檔案系統資料夾。 裡面存放的飛控系統的啟動指令碼, 我們要修改啟動指令碼主要在這個資料夾裡面。 src/Romfs/px4fmu_common/init.d ,如 rcS 主要的啟動指令碼, 還有其他的rc.XXX 的指令碼, 感測器指令碼, 引數指令碼等等, 以 rc 為開頭的都是飛控的啟動指令碼的檔案,通過這些檔案決定哪些應用程式應該執行, 哪些不執行。

src

原始碼目錄,所有的原始碼都在這呢

drivers

所有的感測器驅動都在這裡面, 氣壓計, GPS, 加速度, 地磁, 光流等等。 新增支援硬體在這裡新增程式碼

examples

這是demo一樣的檔案,裡面有helloworld性質的px4示例程式。

這裡可以是開發者最開始學習熟悉程式碼風格的地方。

firmware

不知道幹嘛的

include

沒什麼用,裡面只有一個定義可見性的巨集檔案

lib

比較重要的庫檔案

modules

各個模組的原始碼,模組化控制,各模組獨立。開發主要在這裡做。

platforms

不清楚

systemcmds

系統支援的命令,nsh(nuttx shell)裡用的

makefiles

這個資料夾中的檔案負責構建構建PX4系統並且配置PX4板子和軟體。

Images

有關版本的簡紹檔案(?)

Documentation

大多都流程圖,轉換圖的,配合程式碼看,效果更好。

PX4啟動

​ 飛控上點後自動執行Firmware/ROMFS/px4fmu_common/init.d/rcS指令碼(startup script)

PX4軟體架構理解

官方文件中的PX4軟體架構:

軟體架構
可以看出來,很明顯的層次結構。

最底層是作業系統核心層次,主要是基礎的東西,檔案系統,作業系統,感測器驅動。還是有就是uORB模組,作為PX4系統中最重要的資料互動模組,實現方式與較多核心底層有關,(其中裝置節點繼承Cdev類,算是一個字元型別的驅動裝置檔案)

在這之上是庫函式一層,封裝了一些比較通用的演算法模組。

再之上就是抽象的應用層,這一層主要是導航模組,系統命令模組,各種機型的控制模組,Mavlink通訊協議模組。算是比較抽象的,這一層中程式碼邏輯基本就是這個物件呼叫另外一個模組的函式,看不到具體實現。因為都交給lib層去實現了。

再往上,不知道這個是幹嘛的。

以下是我理解的PX4軟體模組的執行關係:

px4軟體架構

各種硬體將資料讀入uORB中,

上層模組從uORB中讀取需要的資料,根據情況,傳入對應的引數,呼叫不同的庫,獲得期望輸出,輸出到uORB中

最後由輸出混合器對控制模組的輸出進行混合,再輸出到電機舵機