Pixhawk-系統框架梳理

   根深方能葉茂 在等待的日子裏,刻苦讀書,謙卑做人,養得深根,日後才能枝葉茂盛。--Better(根爺)


    四旋翼再不寫點東西,就都忘記了。


    萬事開頭難,就這樣先寫點,後續再改進深化吧。

    今天先說一下系統框架,之後的整理先說主要的四個文件:姿態的解算和控制,位置解算的控制,這四個文件之所以重點分析是因爲他們可以看作飛機協議棧的中間層,向下是一些硬件的驅動drive/和一些命令commander/以及導航navigator/。commander和navigator給出了一些底層的命令和規劃,產生一個position setpoint交給位置控制,位置控制根據現在的位置(位置解算)和期往的位置經過串級pid最終產生att_sp期往的姿態,之後姿態控制根據現在的姿態(姿態解算)和期望的姿態經過串級pid產生控制量actuators.control,控制量actuators.control向後交給mixer,具體的力矩分配由混控器自己去處理吧。


    飛機整個大致的數據流如下:


飛機的通信依靠兩種方式,飛機和外部之間通過mavlink通信,內部之間通過uorb通信。所以在飛機應用開發時,想實現定製功能,大致做兩部分工作就好了:

其一:仿照其他的module模塊,添加自己的模塊,模塊裏做自己想做的事情,實現自己要求的功能。模塊編輯完後後,添加到cmake編譯配置文件中,這時你的模塊就可以編譯到固件之中。固件之中只是有你的代碼,但是這時你的代碼並沒有啓動,所以還需要在rcs啓動文件中啓動你的模塊,如此兩步你的模塊就已經在系統之中正常工作。

其二:是信息流的問題,因爲你的模塊肯定需要從其他地方獲取數據,處理好的數據肯定也需要publish出去。這一部分就是uorb進程間通信的問題,關於uorb一定要把他的基本使用完全掌握,這樣整個信息流豈不是都在你手中。

uorb其實也就兩部分,一部分是訂閱數據,先訂閱subscribe後拷貝copy,另一部分就是發佈數據:先廣播advert再發布publish。注意訂閱和廣播建議都寫在主進程的初始化部分,因爲他們只需要一次初始化操作。還有一點就是copy數據的問題,模塊之中常用的是poll阻塞等待,模塊使用它是爲了保持大循環,其他地方取數據我更建議使用檢查更新check,免得阻塞浪費資源影響他人。


懂得修改這兩處,基本上就可以開發你的功能了,基於這一部分,我做了一點避障算法,低速避障效果很好,高速還有待完善。


下面再給大家幾個整體圖,供大家瞭解結構,如此先建立整體概念,方便入手。








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