既然要做開發,第壹步就是搭好開發環境,根據我的經驗,最好是在linux環境下編譯,這樣效率會很快,以前在windows下編譯,經常40分鐘以上,這樣就太影響開發了;
第二步,大概了解下固件的架構,
如果只涉及應用層的開發,那底層的nuttx系統就可以繞過去了,壹般,最好先把uorb模塊的機制整明白就好了,從uorb入手,了解每個話題的來源以及作用,整理數據流,清楚每個模塊之間的關系即可,比如,要實現手動模式,哪些模塊互相交互,auto模式,又有哪些模塊起作用,
如果涉及相應算法的開發,要學會定位到相應的算法模塊,甚至具體到哪些代碼,比如,妳想試驗妳的姿態估計算法,那妳就將姿態估計模塊替換掉即可,不過相應的接口仍需要和px4環境壹樣,以姿態估計為例,最後要發布妳的vehicle_attitude話題,不然無法與其他模塊交互;
另外,不要試圖在代碼中找main函數,那是單片機思維,妳只需看啟動腳本即可,\ROMFS\px4fmu_common\init.d\rcs;
第三步,針對妳的具體情況,定位相應的模塊,進行精讀研究,雖然模塊基本是用C++寫的,但是不會C++也沒關系,畢竟又不是讓妳寫,本人倒目前為止,也不會C++,配合註釋,看明白就好了,比如,整理下mavlink的控制流程;
px4原生固件模塊列表:
系統命令程序
mavlink –通過串口發送和接收mavlink信息
sdlog2 –保存系統日誌/飛行數據到SD卡
tests –測試系統中的測試程序
top –列出當前的進程和CPU負載
uORB – 微對象請求代理器-分發其他應用程序之間的信息
驅動
mkblctrl–blctrl電子模塊驅動
esc_calib –ESC的校準工具
fmu –FMU引腳輸入輸出定義
gpio_led –GPIOLED驅動
gps –GPS接收器驅動
pwm –PWM的更新速率命令
sensors –傳感器應用
px4io –px4io驅動
uavcan –uavcan驅動
飛行控制的程序
飛行安全和導航
commander –主要飛行安全狀態機
navigator –任務,失效保護和RTL導航儀
估計姿態和位置
attitude_estimator_ekf –基於EKF的姿態估計
ekf_att_pos_estimator –基於EKF的姿態和位置估計
position_estimator_inav–慣性導航的位置估計
multirotor姿態和位置控制器
mc_att_control–multirotor姿態控制器
mc_pos_control –multirotor位置控制器
fixedwing姿態和位置控制器
fw_att_control –固定翼飛機的姿態控制
fw_pos_control_l1 –固定翼位置控制器
垂直起降姿態控制器
vtol_att_control –垂直起降姿態控制器
最後提壹句,多看看官網的說明,另外根據本人的經驗來看,由於大框架,代碼人家都寫好了,通常妳要加功能,所修改的也就幾行代碼而已,舉例說明,比如px4固件只能在手動模式解鎖,假如我要修改成定高模式解鎖