1. 程式人生 > 實用技巧 >PX4原始碼學習(一):結構概述

PX4原始碼學習(一):結構概述

最近在做PX4韌體的移植開發工作,由於之前沒有這方面開發經驗,加之PX4原始碼又比較龐雜,所以想要通過一點一點的學習梳理和實踐,使這部分工作能夠儘快開展起來。部落格中如有錯誤,懇請大家指正,同時歡迎小夥伴們一起交流學習。

另:這篇部落格很多內容借鑑了其他大神的部落格,根據自己的理解做了部分修改,關於原創還是轉載的問題我有些疑問,如有不妥,敬請告知。

PX4飛控原始碼系統框架介紹:

注:本篇內容中所編譯的PX4 韌體版本為v1.11,以 px4_fmu-v2_default 為例。

一、boards

各種不同的飛控板硬體配置檔案。

二、px4_fmu-v2_default

編譯後生成的檔案,其路徑為:Firmware/ bulid / px4_fmu-v2_default

三、Cmake

配置檔案,其路徑為 Firmware / boards / px4 / fmu-v2 / default.cmake。該檔案主要是關於系統使用的檔案的路徑配置。PX4系統中所有的.cpp和.c檔案都要在該處進行路徑包含。自定義的任務或sensor驅動程式也需要新增到該處。

四、mavlink

是飛控和地面站QGC的通訊協議部分,可直接呼叫,現已更新為2.0版本。路徑為:Firmware / mavlink

五、msg

是uORB Messaging的縮寫。路徑為:Firmware / msg

該部分主要是PX4系統使用的所有資料的集合,各種任務和sensor驅動中需要獲取的sensor資料都在此部分,還包括各種執行狀態的資料。注意該資料夾下的CMakeLists.txt,該文件是整個msg部分的配置檔案,類似於二中Cmake中的配置檔案,在開發者建立任務或者sensor驅動時建立對應的資料(xxx.msg檔案)以後,需要將其新增到CMakeLists.txt中,否則編譯時識別不到開發者建立的資料。

六、Nuttx

PX4所使用的作業系統,路徑為 Firmware / platforms / nuttx,關於os的基本概念暫不在此詳述。

七、ROMFS

ROM file_system的簡寫,路徑為 Firmware / ROMFS,內部的px4fmu_common資料夾中的init.d資料夾裡包含了px4系統初始上電啟動的啟動指令碼,即一系列的啟動過程和系統配置。包含rcS、rc.sensors 、rc.mc_default、 rc.mc_apps等檔案。

其中:

rcS:最先啟動的指令碼,負責掛載SD,啟動uORB、配置系統引數等。

rc.sensors:啟動sensors啟動程式碼。如果在src / drivers 中自己建立sensor驅動,則應放在該部分啟動。

rc.mc_default:配置和PWM***相關的系統引數,內部含有怠速的配置。

rc.mc_apps:啟動上層應用,如attitude_estimate、attitude_control、position_estimate和position_control等。如在src / modules 中自定義app,則應放在在該部分啟動。

八、src

8.1 drivers

該資料夾內包含了飛控硬體系統中使用的所有sensor的驅動程式碼。也包含了STM32主控MCU的io輸出控制(PX4IO)和pwm的驅動。

8.2 examples

PX4系統給的一些簡單的例項,為了便於開發者做二次開發除錯測試使用。尤其是px4_simple_app,內部涉及瞭如何通過uORB獲取需要的資料。

8.3 lib

標準庫。

8.4 modules

上層任務程式碼的實現部分,包括姿態解算、姿態控制、配置解算、位置控制、落地檢測、sensor初始化、系統配置、uORB、commander等。其中commander是實現整個控制模式的程式碼,包括pixhawk燈顯控制、飛航模式切換、上鎖解鎖等。

相關演算法實現也在該部分,下面是module裡的app介紹:

attitude_estimator_ekf:

attitude_estimator_q: 使用mahony的互補濾波演算法實現姿態解算。

commander: 整個系統的過程實現,如起飛前各sensor的校準演算法實現、安全開關是否使能、飛航模式切換、pixhawk硬體上燈的控制等。

gpio_led:

land_detector: 飛行過程中使用land模式降落或者落地時的落地監測部分,內部會監測Z軸速度和加速度等。

local_position_estimator: 常說的LPE演算法實現位置解算。

logger: 關於log日誌的讀寫函式。

mavlink: 和地面站通訊的通訊協議,結合地面站QGC原始碼配合修改,或者僅僅呼叫mavlink內部的API介面,即可通過無線訊號將所需的資料顯示在地面站QGC上,此方法是一種實時監測目標資料的方法。

mc_att_control: 姿態控制的實現演算法,主要就是姿態的內外環PID控制,外環角度控制,內環角速度控制。

mc_pos_control: 位置控制的演算法實現,主要是位置的內外環PID控制,外環速度控制,內環加速度控制。

sdlog2:

sensors: 關於各種sensor的相關函式。

systemlib:

uORB: IPC通訊機制。首先需要了解如何使用它進行程序間通訊,瞭解整個系統中的資料流流向。

九、Makefile

最終的編譯命令,用shellscript編寫,可根據需要修改。


參考部落格:https://www.cnblogs.com/kinson/p/12124764.html