[飞控]如何学习无人机-入门篇「建议收藏」(汉典飞字的基本解释)
學什么
我把無人機分成3個大模塊
操作
目的:組裝無人機,享受駕駛無人機的樂趣。
抱歉我給不了太多建議,因為我從沒有以此為目進行過學習,但是我知道這一部分的知識關鍵詞是【航模】,有非常多的【航模】發燒友可以給你更專業的意見。
知識
目的:了解無人機的本質
知識解決的是「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 再開始?我是不是先學好嵌入式系統再開始?
都不需要,你的目標只有一個,就是學會飛控,
如果在你建立知識框架的時候,剛體力學阻礙了你,那就去查資料,把這部分解決,然后繼續回到你飛控的學習主線,什么問題阻礙了你,你就去解決它,然后再回歸你的主線任務。
你要時刻明白,你做的所有編程學習,數學學習,嵌入式學習,都是為了學習飛控的輔助技能,不要被輔助技能嚇倒,或者迷惑。
飛控是個交叉學科,你永遠不可能把所有知識都準備充分再開始,你需要的是在遇到障礙的時候都保持耐心,堅持一下,僅此而已。
關注微信公眾【無人機干貨鋪】獲取更多精彩內容
總結
以上是生活随笔為你收集整理的[飞控]如何学习无人机-入门篇「建议收藏」(汉典飞字的基本解释)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线性代数及其应用(part3)--对角化
- 下一篇: 【黄山seo】怎么使用整合营销来协助企业