1. 程式人生 > >PIXHAWK進行二次開發

PIXHAWK進行二次開發

有改動的話,自己再研究研究吧(後面換cmake編譯方式了,改動蠻大)。
既然要做開發,第一步就是搭好開發環境,根據我的經驗,最好是在linux環境下編譯,這樣效率會很快,以前在windows下編譯,經常40分鐘以上,這樣就太影響開發了;
第二步,大概瞭解下韌體的架構,

<img src="https://pic4.zhimg.com/11ad316fe65f69c396552fa422a68b57_b.png" data-rawwidth="708" data-rawheight="533" class="origin_image zh-lightbox-thumb" width="708" data-original="https://pic4.zhimg.com/11ad316fe65f69c396552fa422a68b57_r.png">如果只涉及應用層的開發,那底層的nuttx系統就可以繞過去了,一般,最好先把uorb模組的機制整明白就好了,從uorb入手,瞭解每個話題的來源以及作用,整理資料流,清楚每個模組之間的關係即可,比如,要實現手動模式,哪些模組互相互動,auto模式,又有哪些模組起作用,

如果只涉及應用層的開發,那底層的nuttx系統就可以繞過去了,一般,最好先把uorb模組的機制整明白就好了,從uorb入手,瞭解每個話題的來源以及作用,整理資料流,清楚每個模組之間的關係即可,比如,要實現手動模式,哪些模組互相互動,auto模式,又有哪些模組起作用,

<img src="https://pic3.zhimg.com/3e88f6bd847847e261a21c96fa72a256_b.png" data-rawwidth="721" data-rawheight="248" class="origin_image zh-lightbox-thumb" width="721" data-original="https://pic3.zhimg.com/3e88f6bd847847e261a21c96fa72a256_r.png">
<img src="https://pic1.zhimg.com/df287c10090be963ddf9ac454561e674_b.png" data-rawwidth="874" data-rawheight="352" class="origin_image zh-lightbox-thumb" width="874" data-original="https://pic1.zhimg.com/df287c10090be963ddf9ac454561e674_r.png">

如果涉及相應演算法的開發,要學會定位到相應的演算法模組,甚至具體到哪些程式碼,比如,你想試驗你的姿態估計演算法,那你就將姿態估計模組替換掉即可,不過相應的介面仍需要和px4環境一樣,以姿態估計為例,最後要釋出你的vehicle_attitude話題,不然無法與其他模組互動;

另外,不要試圖在程式碼中找main函式,那是微控制器思維,你只需看啟動指令碼即可,\ROMFS\px4fmu_common\init.d\rcs;

第三步,針對你的具體情況,定位相應的模組,進行精讀研究,雖然模組基本是用C++寫的,但是不會C++也沒關係,畢竟又不是讓你寫,本人倒目前為止,也不會C++,配合註釋,看明白就好了,比如,整理下mavlink的控制流程;

<img src="https://pic2.zhimg.com/50464e16d6e2e2ac974bb3955e4a6879_b.png" data-rawwidth="584" data-rawheight="780" class="origin_image zh-lightbox-thumb" width="584" data-original="https://pic2.zhimg.com/50464e16d6e2e2ac974bb3955e4a6879_r.png">

px4原生韌體模組列表:

系統命令程式

mavlink –通過串列埠傳送和接收mavlink資訊

sdlog2 –儲存系統日誌/飛行資料到SD卡

tests –測試系統中的測試程式

top –列出當前的程序和CPU負載

uORB – 微物件請求代理器-分發其他應用程式之間的資訊

驅動

mkblctrl–blctrl電子模組驅動

fmu –FMU引腳輸入輸出定義

gps –GPS接收器驅動

pwm –PWM的更新速率命令

px4iopx4io驅動

飛行控制的程式

飛行安全和導航

navigator –任務,失效保護和RTL導航儀

估計姿態和位置

multirotor姿態和位置控制器

fixedwing姿態和位置控制器

垂直起降姿態控制器


最後提一句,多看看官網的說明,另外根據本人的經驗來看,由於大框架,程式碼人家都寫好了,通常你要加功能,所修改的也就幾行程式碼而已,舉例說明,比如px4韌體只能在手動模式解鎖,假如我要修改成定高模式解鎖:

<img src="https://pic3.zhimg.com/1e322fe90f28945a2b0f08862126e67e_b.png" data-rawwidth="1529" data-rawheight="853" class="origin_image zh-lightbox-thumb" width="1529" data-original="https://pic3.zhimg.com/1e322fe90f28945a2b0f08862126e67e_r.png"><img src="https://pic1.zhimg.com/942b756cce2393c73c283fd65f1fbcc8_b.png" data-rawwidth="1554" data-rawheight="857" class="origin_image zh-lightbox-thumb" width="1554" data-original="https://pic1.zhimg.com/942b756cce2393c73c283fd65f1fbcc8_r.png">

將MAIN_STATE_MANUAL替換成MAIN_STATE_ALTCTL即可。