[飛控]如何學習無人機-入門篇

學什麼

我把無人機分紅3個大模塊算法

操做

目的:組裝無人機,享受駕駛無人機的樂趣。編程

抱歉我給不了太多建議,由於我從沒有以此爲目進行過學習,可是我知道這一部分的知識關鍵詞是【航模】,有很是多的【航模】發燒友能夠給你更專業的意見。segmentfault

知識

目的:瞭解無人機的本質微信

知識解決的是「why?」 若是你遇到的問題一般是,爲何要用歐拉角?爲何要用濾波?那說明你如今須要的問題都是知識型問題。關鍵詞是【導航】【控制】等理論知識。架構

開發

目的:實現一個具體功能,好比:室內懸停,避障,全自動A點飛到B點等等框架

經過【知識】,使用【工具】完成本身的目標,【編程語言】【操做系統】等等在飛控開發裏可以使用就行編程語言

開發須要解決具體的問題,前提是你知道必定的無人機知識函數

開發解決的是 「how?」,怎麼裝編譯環境?怎麼調試?這個算法怎麼寫?這一部分的關鍵詞是【編程】【嵌入式】等專業技能。工具

怎麼學

其實若是你單獨學同樣,仍是挺容易的,飛手專心學操做,學生專心學知識。無非就是多動手,和多看書嘛。學習

就是這個開發,很氣人,飛控原本就是個交叉學科,原本就涉及不少不一樣學科的專業知識,可是由於你還須要把知識應用起來,又涉及一些計算機知識,編程知識等等。讓整個學習過程變的很是龐大無從下手。

可是,恰恰咱們大部分人學無人機的目的都是學開發對吧,那我就拋磚引玉,結合我多年走彎路的基礎上,介紹一下我認爲比較合適順序。

先給出建議:學習開發 專業知識>編程能力

飛控開發不須要特別強大的編程能力和花哨的編程技巧,相反一般是你經過你的專業知識,先想到解決方案,而後再稍做修改,或者簡單的實現一下算法,因此:

不要經過開源代碼去學飛控!!!!

不要經過開源代碼去學飛控!!!!

不要經過開源代碼去學飛控!!!!

爲何不要,由於「飛控知識」到「飛控代碼」飛控代碼 的過程當中,除了算法須要一些離散化,和一些迭代過程,還伴隨着做者本身對算法的理解,選擇,和編程習慣。

若是你試圖從 飛控代碼 ,反推 飛控算法 ,除非你自己對這個算法已經很是熟悉,否者即便你編程能力強,操做系統,嵌入式,編程語言,這些知識都很是強,你看代碼依然會很迷茫,你看到懂每一行代碼,但殊不知道爲何要這樣寫。

舉個栗子:我以前分析過一行濾波代碼,背後涉及的知識點遠遠超出你的想象,若是你指望經過代碼學習飛控知識簡直是給本身開了個【地獄模式】。

最快速的路線是你對算法已經有必定的瞭解,你知道這個算法應該應用在飛控系統中的哪一個環節,你知道這個算法有什麼用,而後你很好奇這個算法怎麼經過編程實現的?你找來了開源代碼做爲參考,相互對應下,你更加理解了算法,同時也知道了算法如何經過編程實現。

固然這個過程每每也不會這麼順利,可能你找的開源代碼過於複雜,即便你比較熟悉算法,依然看不懂被程序加工後的算法函數,起碼你已經能夠明確,目前你看不懂是由於一些編程技巧致使的,你就可專心去攻克這個問題,而不是苦思冥想爲啥我每天看就是看不懂?

因此首先明確究竟是哪一個步驟致使你的學習很難進行下去!

1.專業知識的阻礙

大部分人應該都會被困在這裏一段時間吧,畢竟飛控涉及的專業知識太多了,可是一般你只須要深刻理解其中一個部分,因此個人建議是先構建專業知識的框架

若是你還不知道你到底想學哪一個部分我先給你一個圖感覺一下。

這是一個簡單的模塊劃分:

1.無人機上的傳感器獲取數據

2.導航系統經過傳感器數據獲得當前飛機導航數據包括位置,速度,姿態等等

3.決策層提供目標,決策能夠是遙控,也能夠是自動導航

4.根據當前的導航信息,和決策層給出的目標,進行控制,是飛機以達到目標爲目的進行動做

5.控制器給出輸出,經過控制分配,給每一個電機PWM,使電機以必定的速度轉動。

6.電機轉動,飛機當前的導航信息發生變化。

7.回到第一步,獲取傳感器數據,以獲得最新的飛機導航信息。

這個簡單的劃分能夠看到,無人機系統實際上是有很是多的模塊組成的,初學者並不須要每一個部分都升入瞭解,可是你須要有這麼個框架概念,你就能夠定位你須要的知識屬於哪一個部分,你才能去針對性的學習。

這個階段主要以搭建知識架構爲主,能夠忽略一些細節,不要被一些具體問題卡主,堅持看下去,有了知識框架後,再回頭專研某個具體問題。

好比姿態控制,第一步確定是從導航讀取當前姿態,從某個地方獲取指望姿態,而後求姿態偏差,而後進行控制,最開始你能夠不知道每一個細節如何實現,等你有了這個架構。

在去定位具體問題,導航如何獲取姿態,首先確定是從傳感器讀取原始數據,進行一些濾波,而後融合,最後獲得可用的姿態,把每一個大問題也拆分紅框架,最後你就有了整個知識。

一旦你構建好了你的知識框架,遇到問題你能夠快速定位在你的框架體系中,就能夠經過相關專業名稱搜索來快速查找資料,同時平時若是看見一些討論,一些好的文章,論文,均可以迅速添加到你的知識框架裏。

你看,我確實不懂導航,以前也沒接觸過,主要是工做上暫時用不到,可是個人知識框架仍是在的,只要有須要,我隨時均可以開始查閱資料進行學習。

如何構建你本身的知識框架呢?你要是以前問我,我也沒有答案,由於個人學習過程,都是經過關鍵詞的搜索。

可是如今我有更好的答案:《多旋翼飛行器設計與控制》全權 ,全權老師這本書是我看過最全面的書籍,很是適合旋翼的學習,是我手邊如今最常翻閱的書籍。

2.編程技巧的阻礙

若是你已經有必定的基礎,瞭解一些專業知識,確定會火燒眉毛,想要知道書上的知識如何變成代碼,這時候一份優秀的開源代碼,是最適合你的學習資料。

可是,我歷來都不建議,沒有編程經驗,沒有接觸過嵌入式系統的朋友,一開始就直接看 APM ,PX4 的代碼。

他們的系統過於龐大,很容易打擊學習的積極性,一會就放棄了,我甚至一度懷疑這玩意只有計算機專業的人才能看的懂吧,我是否是該先去學計算機?

能夠找一些本身能看懂的比較簡單的飛控代碼看,關鍵詞【小四軸】,代碼會簡單一些,可是麻雀雖小五臟俱全,該有的都有,依然是很好的入門資料。學習的時候千萬不要貪心,就選擇本身能看懂的資料就行,能看懂的才能堅持下去,慢慢遞增難度,學習貴在堅持,只要能堅持學下去,之後都能看懂。

其實看懂代碼並不須要特別強的編程能力,由於只是閱讀而已,

給出一些關鍵字:【構造函數】【重載】【啓動腳本】【uorb】【建立線程】,若是熟悉這幾個概念,看懂 PX4 ,apm 的代碼也僅僅是須要點耐心。

閱讀工具:understand (強列推薦)

具體讀代碼的小技巧能夠看我以前的文章【打造本身的工做流】

至於實現算法,簡單的 if else , switch ,for 基本也夠用了,大部分狀況不須要特別花哨的技巧。

3.PX4,APM的阻礙

若是你有必定的專業知識,同時編程能力也比較優秀,恭喜你,成爲一名優秀的飛控工程師就只須要一點點耐心。

這時候你能夠充分利用開源界兩大教科書(APM ,PX4),不論何時他們依然是最好的參考資料,可是同時也會給學習的人帶來而外的迷茫。

由於這兩個參考資料太過耀眼,你可能會把他們做爲金科玉律,以致於你可能會很是困惑,爲何他要這麼作,跟書上的不太同樣?

但我想說的是,他們是很好的代碼,可是依然有不少做者的偏好,因此不少地方不過就是做者作了一些取捨,作了一些選擇,不要迷失在深究爲何做者爲何這樣寫,反卻是你能夠提出質疑,若是是我,我會怎麼處理這個問題。不要被代碼支配,代碼只是幫助你學習的一個工具而已。

盯住你的目標

若是你看到這裏,依然摩拳擦掌,躍躍欲試,那就放心大膽的幹。

不要擔憂我是否是先把數學學好再開始?我是否是先學會C++再開始?我是否是先學好嵌入式系統再開始?

都不須要,你的目標只有一個,就是學會飛控,

若是在你創建知識框架的時候,剛體力學阻礙了你,那就去查資料,把這部分解決,而後繼續回到你飛控的學習主線,什麼問題阻礙了你,你就去解決它,而後再回歸你的主線任務。

你要時刻明白,你作的全部編程學習,數學學習,嵌入式學習,都是爲了學習飛控的輔助技能,不要被輔助技能嚇倒,或者迷惑。

飛控是個交叉學科,你永遠不可能把全部知識都準備充分再開始,你須要的是在遇到障礙的時候都保持耐心,堅持一下,僅此而已。

關注微信公衆【無人機乾貨鋪】獲取更多精彩內容

相關文章
相關標籤/搜索