如何用開源飛控PIXHAWK進行二次開發?

最近在學習pixhawk的源碼,感覺代碼庫庫很大,不知道怎麼下手,看了官網的開發者指導,也是雲里霧裡的,有研習pixhawk的大神嗎,指導下怎麼看懂程序,需要什麼語言基礎呀,本人只學習過c,c++,行嗎,說詳細點


以下所描述的都是針對px4原生固件,此外,由於固件更新過於頻繁,本文描述的是15年7月的固件,主要是舉例,有改動的話,自己再研究研究吧(後面換cmake編譯方式了,改動蠻大)。
既然要做開發,第一步就是搭好開發環境,根據我的經驗,最好是在linux環境下編譯,這樣效率會很快,以前在windows下編譯,經常40分鐘以上,這樣就太影響開發了;
第二步,大概了解下固件的架構,

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

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

另外,不要試圖在代碼中找main函數,那是單片機思維,你只需看啟動腳本即可,ROMFSpx4fmu_commoninit.d
cs;

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

px4原生固件模塊列表:

系統命令程序

mavlink –通過串口發送和接收mavlink信息

sdlog2 –保存系統日誌/飛行數據到SD卡

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

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

uORB – 微對象請求代理器-分發其他應用程序之間的信息

驅動

mkblctrl–blctrl電子模塊驅動

esc_calib –ESC的校準工具

fmu –FMU引腳輸入輸出定義

gpio_led –GPIO
LED驅動

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固件只能在手動模式解鎖,假如我要修改成定高模式解鎖:

將MAIN_STATE_MANUAL替換成MAIN_STATE_ALTCTL即可。


首先題主先給自己一個定位吧,免得走彎路。我覺得這個定位大體分三種

  1. 想快速開發一個飛控,那首先要做的是了解apm的各種參數配置,了解每個參數的影響和起作用的代碼功能塊,用apm適配自己的機型還是需要修改,優化,和裁剪。正如克里斯安德森說希望APM做無人機行業的安卓,但是安卓的性能也只能是差強人意,比無人機行業的IOS大疆創新來說還差很多。
  2. 飛控行業或者研究領域應用,例如開發測繪手機app,無人機送快遞等等(傾向於demo性質)...這種應用不需要做一個飛控,首先大概了解飛控的原理,然後只要掌握apm的控制數據協議即可。
  3. 發燒級的愛好者或者開發者,迫切的想要了解apm的大部分演算法和邏輯,這個真的需要較長的時間,大致的思路就是:底層驅動-》感測器數據和物理意義-》姿態解算-》PID控制器-》飛行模式切換-》參數調優(包含gps懸停剎車什麼的很細但是影響手感和性能的參數)初學只是去看apm而不是自己動手去做很難搞懂,建議還是自己做飛控,哪怕複製apm部分功能代碼,做飛控的學習順序和讀飛控一樣,但對於apm這樣一個系統工程相對來說模塊更分立。

我要說的很簡單,首先了解自己要幹什麼,就能知道要怎麼做。
如果你的目標是飛機整體,自己做實驗,沒有商業目的,那麼ardupilot v2固件也就是所謂apm for pixhawk,就足夠了,能想到的85%以上無人機功能都做好了,調試使用就行無需開發,他是最接近商業飛控的固件。他的地面站軟體missionplanner不是很完善,多在那上面下功夫,用到vc#。
如果你的目的是開發商業產品要大批量銷售,那麼必須使用px4固件,就是所謂官方固件。px4使用的法律協議,讓你可以不再把自己開發的部分開源,能夠保護你的利益。他的地面站軟體和天上固件都不太完善,但是演算法設計的很好,架構清晰,飛行效果也比ardupilot好一些。當然,這也要看你的調試水平。開發固件使用他官網提供的工具包,最好linux下使用,當然ios也一樣。Windows會有錯誤,語言是c++。地面站軟體qgroundcontrol,開發工具也算vc#。


學會sorce insight,搞清楚函數調用順序,多看代碼,熟能生巧。


Pixhawk一直再用來做項目,沒有時間仔細研究代碼,因為之前研究過一些無人機開源項目代碼,其實大同小異。比如MWC,我之前曾經把裡面的代碼研一遍,並且進行多次開發,效果也不錯。3DR的東西寫的比MWC規範多了,應該是更好弄一些,我把之前研究其它開源項目的經驗寫一下把。
進入一個新的智能硬體開源項目,裡面的程序架構是非常關鍵的,說白了也就是知道文件目錄的意義。主文件,控制演算法,姿態演算法,導航演算法,感測器介面,函數定義文件,程序配置文件,特殊變數定義文件等等,這些文件都有標準的名稱,很容易區分,而且這些開源程序現在也規矩多了,文件說明也寫的很清楚,外國開源項目不像中國某些項目「猶抱琵琶半遮面」,不肯寫說明,或者故意寫很多垃圾代碼。老外放在github上的都很清晰。
弄懂這些就要找准自己二次開發的方向,想多加功能?減少功能?改變演算法?然後,注意了,關鍵:::::::從主函數入手!就算你只是改動一個小地方,也要把主函數搞清楚,然後進入相關函數,或者文件位置進行二次開發。
我還記得自己前兩年改MWC改完之後,發現新版竟然跟我改的一樣,自己還有些得意,這些年沒改代碼都有些手癢了。

作者:無人機中的城堡,公眾號:CastleUAVStudio

MR.城堡為您提供涵蓋無人機技術分析與分享,無人機產品評測(參評、機評),行業分析等領域的專業內容

作者為環球網無人機頻道,深圳灣,UAVSNEWS等行業媒體特約撰稿人。


畢竟它和其它飛控相比加了個操作系統,有操作系統和沒操作系統的完全是兩個概念,
首先得對rtos有了解.也不用了解太多,
百度一個"建立一個屬於自己的AVR的RTOS"不到30頁的文檔,粗略看完就行.
然後在PIXHAWK里添加個人應用可以參照.
http://dev.px4.io/tutorial-hello-sky.html
我理解的題主的二次開發就是這樣,如果是要自己改參數/演算法的話,那就得深入看看源碼了.
當然,第一步先把開發環境搭建起來,連源代碼都編譯不了,就沒得談了.
環境搭建百度有大把中文教程.
不管怎麼樣,先編譯一遍源碼再說.

其實我也沒用過,上面都是胡寫的,我裝不下去了...謝邀.(匿逃...


pix有兩個平台,一個是apm移植過來的固件,一個是px4原生固件,一般apm用得比較多,px4似乎是linux環境下開發的。有c基礎,最好還要有數學基礎,和控制理論基礎,才能看懂裡面的演算法。


hello sky的例子跑通了嗎?


沒有用過現成的飛控呢。。。一直致力於學習演算法,都是自己寫的。。。


@sw笨笨的無人機世界


pixhawk代碼寫的很規範,按理來講不應該很困難啊!從姿態結算,姿態控制,位置速度結算,位置控制,這幾個大面上去看他的代碼,很快就可以搞定的!至於一些細節的東西就需要一些時間的積累了


推薦閱讀:

魅族開放了M9,MX,MX2的內核源代碼,這意味著什麼?
Alljoyn 是什麼樣的技術,有哪些優缺點?
如果魔獸世界的代碼開源了會有什麼有趣的影響?
大家目前都在參與哪些開源項目?
怎樣看待網頁可以查看其源代碼而計算機語言所編譯的程序則不能?

TAG:開源 | 無人機Drone | 開發經驗 | 控制演算法 | 四軸飛行器 |