微型四旋翼飛行器設計經驗之瞎扯淡
在正式開始記錄微型四旋翼飛行器設計的學習筆記之前,感覺自己很有必要先給自己一個總結,也希望能夠幫到更多的朋友少走彎路(雖然不知道幫助大不大)。
去年九月下旬開始了微型四旋翼飛行器的學習與設計,在12月底的時候初步實現了穩定的遙控與飛行,後續又增加了一些常規的輔助的功能,失控保護、姿態微調等等,之後又利用OLED螢幕,設計了一個三級選單,把各種引數的設定,飛控鎖定與通訊的狀態等等一些資訊都整合在一起,利用相應的按鍵,可以很方便的檢視、設定。通過一次一次的優化一些細節,飛行器的飛行效果令人滿意。
在此真心要感謝喵嗚實驗室的開源四旋翼專案,我最初的學習標杆就是在參考喵嗚實驗室的小四軸。當然,也有很多朋友參考匿名,圓點博士等等,都是可以的,本人也對比參考了一部分。感謝這些團隊的開源精神。
在開始之前,先吐槽!!!!!!!!!!!!!!!
8位機做多旋翼飛控!?
8位機做飛控!?這是我在設計飛行器期間聽到的最多質疑。甚至很多“德高望重”的老古董老師,從頭到尾把你批判一番,理由是什麼8位機的PWM輸出只有256寬度的計數週期,解析度不夠。。。更有甚者直接放話說8位機就是專科生玩的玩意,本科生用8位機做設計簡直就是xxx。。。面對這樣的言論,我只能選擇呵呵一笑,老古董你可知道MWC飛控,APM飛控的主控ATmage328P也是8位的,但是這並不影響人家引領全球DIY多旋翼的熱潮啊,而且誰告訴你當下的8位機就是你那個年代的8051或者8086?講真,做四旋翼的這個過程,讓我認清了很多東西。至少我們院系是這樣的:喜大好功、什麼東西只認準最高階的、功能只看是不是天花亂墜而不管實際的學習成本。一個老師甚至說,做四旋翼,要把DSP、FPGA、ARM、作業系統神馬的全都搞上。。。但是初期學生學習的時候會遇到什麼具體問題?怎麼能讓他們快速上手少走彎路?四旋翼學習的真正核心在哪裡?很少有人真的關心這些實際問題。“你沒有用STM32,那你就是低端的”,這種言論真的是受夠了。。。
個人認為,不管做任何設計,晶片本身沒有高低端之分,只有適用於不適用之別,根據設計需要不同(時間因素,成本因素,開發難度等等)選擇最合適的晶片和方案,就是最好的。如果說只是因為別人的晶片位數不高或者不夠“高大上”就以此去把別人批判一番,我覺得不是真正搞技術的人該有的心態。
對於初學者來說,尤其是像我這種渣渣,大四本身已經沒有多少學習時間了,並且因為種種原因我沒有實驗室可以進,手邊的STM32學習板是借童鞋的不好一直佔為己用(窮),而且自己學習四旋翼的計劃重點在於姿態與控制演算法的學習,因此我必須讓自己在最短的時間內設計出軟硬體,並且能夠掌握理論知識,那麼綜合考量,我自己用8位機可以節省我自己的時間,把更多的經歷放在學習演算法上,這樣豈不是很高效?我不知道自己的這種學習安排有什麼不好,就因為8位機就不高階了、簡直是笑話。什麼叫8位機只是專科生玩的?老古董就會帶著有色眼鏡看人,專科生比本科生強的,一抓一大把。私以為,只要技術強的,都是應該尊敬的,別管人家是專科還是什麼,技術才是硬道理,學歷真的不能說明什麼。
吐槽半天,到底8位機能不能做多旋翼飛控?答案當然是可以的,在此真的感謝喵嗚實驗室!喵嗚團隊的飛行器恰好就是用8位機作為主控的,型號的STC15W4K32S4系列。我用過這個晶片做平衡車,還是很強大的。網上有一段它和ATMage328P的效能對比:現在的51早已不是當年的51,6路15位硬體PWM+2路CCP的16位硬體PWM,相當於是8路15位硬體PWM,mega328都可以直接秒掉,而mega328卻正是市售MWC飛控的主控,mega328速度16MHZ,等效16MIPS,IAP15W4K61S4@28MHZ,等效25MIPS,運算速度也秒了mega328,也就是說,用51微控制器做四軸絕對不成問題。
(來自:http://bbs.mydigit.cn/read.php?tid=1115916)
老古董打臉不?誰告訴你8位機的PWM計數週期只有256?高速八位機PWM不光是15位的,而且還是硬體PWM,非常好用。
以下是經驗談!!!!!!!!
以微型四旋翼飛行器來說,核心演算法大概分為兩個部分:姿態解算演算法與控制演算法。其中姿態解算演算法是核心中的核心!它在很大程度上決定了四旋翼飛行的準確性與穩定性!試想,如果飛行器無法正確計算出自己飛傾角,那麼再好的控制演算法也無法使之保持穩定。
因此,有很多盆友跟我說,做四旋翼,主要就是調PID,我只能說你們太不踏實了。我參考了好多個團隊程式碼,真正的姿態解算的核心部分大家幾乎都用的是同一個IMU.C檔案,其實這樣也無所謂,問題的關鍵是,不能只是呼叫人家的核心演算法,在調通程式碼的基礎上,一定要深入瞭解這個演算法是如何把姿態正確計算出來的!知其然一定要儘可能的去知其所以然,否則學到頭,自己依然只是會配置個暫存器,控制外設而已,那麼這樣一來,好像做四旋翼與不做四旋翼並沒有本質的提升,因為輸出PWM,配置箇中斷,除錯個通訊協議,開發板就能做到,還需要四旋翼幹什麼?
對於控制部分的演算法來說,用的最廣泛的就是PID控制了,在此我還是很想跟即將開始設計四旋翼的童鞋們來說,PID控制不應該只是會除錯引數。我們應該儘可能的去理解自動控制原理,去理解反饋的感念,去理解為什麼四旋翼上最常用的是串級PID而不是單級PID。這些內容推薦入門的盆友稍微學習一下《自動控制原理》(胡壽鬆)會有很多好處的。上一次的一個文章是以溫度系統為例,利用Simuink來模擬對比一下不同PID的效果,為的就是能夠動手感受一下不同PID不同引數下的響應特點,使學習PID控制有一個感性的認識。
(連結:http://blog.csdn.net/rick_grimes/article/details/75095315)
我選擇的喵嗚實驗室的小四軸,硬體設計很完善,前期讓我可以很放心的去除錯軟體而不用擔心硬體問題。當然,也有很多童鞋使用別的晶片例如STM32來設計的,大家也可以選擇別的硬體平臺。道理都是一樣的。學會站在巨人的肩膀上學習!
四旋翼飛行器的核心前面已經說過了,是姿態演算法。所以上手四旋翼的第一步,首先應該明確姿態感測器,我想大家一般都選用的是MPU6050,所以我就用它來說。首先在設計之初,至少需要利用IIC通訊,讀取出6050感測器的資料,並且去學習讀取出的資料如何轉化成我們需要的真實資料單位。這一步我認為是最關鍵的,因為只有感測器的資料讀取準確了,才能使後續演算法的計算有一個穩定的資料來源。因此學習四旋翼的第一步,應該是搞定MPU6050!
搞定6050感測器其實是有很多技巧的,比如最重要的資料手冊,必須要了解其中關鍵的一些部分,比如量程的選擇,精度的選擇,速度的配置等等。IIC通訊也是比較頭疼的比個地方,尤其是在電平時間的控制上,很容易出現問題。因此需要花時間去試錯。調著調著經驗就有了。
這個問題其實對於任何一個系統來說都是適用的,因為有盆友問過我這個問題,在設計飛行器某一個部分的程式的時候,出現問題無法及時確定出問題所在,或者無法正確排除沒有出問題的部分。所以單獨把這個小問題拿出來說說,本人也是個渣渣半吊子,在這方面沒什麼真正有用的經驗,我的一貫方法是:分模組各個擊破!對,很傳統的方法,但是我覺得比較適合自己。
舉個栗子:比如飛行器的程式,現在需要除錯2.4G無線通訊,那麼我只需要先寫好飛行器接收2.4G訊號的程式在開發板上,然後利用我購買的飛行器的遙控器,給開發板發資料,如果開發板收不到資料但是配套的飛行器可以收到,說明自己的程式有問題啦,對照飛行器的2.4G接收部分,自己程式和人家程式不一樣的地方,很有可能是出現錯誤的地方。這種方法挺笨的,但是我自己一直是在寢室獨自學習,沒裝置、沒老師。所以每次都是這樣一塊一塊自己摸索,因為有可供參考的標準硬體平臺,所以一個部分一個部分的來,還是很高效的!
總結
不一定有用的一些經驗和吐槽,但願能夠幫助到一些朋友吧。後續繼續總結,慢慢更新相關部分的學習筆記。
去年九月下旬開始了微型四旋翼飛行器的學習與設計,在12月底的時候初步實現了穩定的遙控與飛行,後續又增加了一些常規的輔助的功能,失控保護、姿態微調等等,之後又利用OLED螢幕,設計了一個三級選單,把各種引數的設定,飛控鎖定與通訊的狀態等等一些資訊都整合在一起,利用相應的按鍵,可以很方便的檢視、設定。通過一次一次的優化一些細節,飛行器的飛行效果令人滿意。
在開始之前,先吐槽!!!!!!!!!!!!!!!
8位機做多旋翼飛控!?
8位機做飛控!?這是我在設計飛行器期間聽到的最多質疑。甚至很多“德高望重”的老古董老師,從頭到尾把你批判一番,理由是什麼8位機的PWM輸出只有256寬度的計數週期,解析度不夠。。。更有甚者直接放話說8位機就是專科生玩的玩意,本科生用8位機做設計簡直就是xxx。。。面對這樣的言論,我只能選擇呵呵一笑,老古董你可知道MWC飛控,APM飛控的主控ATmage328P也是8位的,但是這並不影響人家引領全球DIY多旋翼的熱潮啊,而且誰告訴你當下的8位機就是你那個年代的8051或者8086?講真,做四旋翼的這個過程,讓我認清了很多東西。至少我們院系是這樣的:喜大好功、什麼東西只認準最高階的、功能只看是不是天花亂墜而不管實際的學習成本。一個老師甚至說,做四旋翼,要把DSP、FPGA、ARM、作業系統神馬的全都搞上。。。但是初期學生學習的時候會遇到什麼具體問題?怎麼能讓他們快速上手少走彎路?四旋翼學習的真正核心在哪裡?很少有人真的關心這些實際問題。“你沒有用STM32,那你就是低端的”,這種言論真的是受夠了。。。
個人認為,不管做任何設計,晶片本身沒有高低端之分,只有適用於不適用之別,根據設計需要不同(時間因素,成本因素,開發難度等等)選擇最合適的晶片和方案,就是最好的。如果說只是因為別人的晶片位數不高或者不夠“高大上”就以此去把別人批判一番,我覺得不是真正搞技術的人該有的心態。
對於初學者來說,尤其是像我這種渣渣,大四本身已經沒有多少學習時間了,並且因為種種原因我沒有實驗室可以進,手邊的STM32學習板是借童鞋的不好一直佔為己用(窮),而且自己學習四旋翼的計劃重點在於姿態與控制演算法的學習,因此我必須讓自己在最短的時間內設計出軟硬體,並且能夠掌握理論知識,那麼綜合考量,我自己用8位機可以節省我自己的時間,把更多的經歷放在學習演算法上,這樣豈不是很高效?我不知道自己的這種學習安排有什麼不好,就因為8位機就不高階了、簡直是笑話。什麼叫8位機只是專科生玩的?老古董就會帶著有色眼鏡看人,專科生比本科生強的,一抓一大把。私以為,只要技術強的,都是應該尊敬的,別管人家是專科還是什麼,技術才是硬道理,學歷真的不能說明什麼。
吐槽半天,到底8位機能不能做多旋翼飛控?答案當然是可以的,在此真的感謝喵嗚實驗室!喵嗚團隊的飛行器恰好就是用8位機作為主控的,型號的STC15W4K32S4系列。我用過這個晶片做平衡車,還是很強大的。網上有一段它和ATMage328P的效能對比:現在的51早已不是當年的51,6路15位硬體PWM+2路CCP的16位硬體PWM,相當於是8路15位硬體PWM,mega328都可以直接秒掉,而mega328卻正是市售MWC飛控的主控,mega328速度16MHZ,等效16MIPS,IAP15W4K61S4@28MHZ,等效25MIPS,運算速度也秒了mega328,也就是說,用51微控制器做四軸絕對不成問題。
(來自:http://bbs.mydigit.cn/read.php?tid=1115916)
老古董打臉不?誰告訴你8位機的PWM計數週期只有256?高速八位機PWM不光是15位的,而且還是硬體PWM,非常好用。
不吐槽了,畢竟是負能量,說句公道話。如果是進階的朋友,需要搞更復雜的功能,比如機器視覺啊,更復雜的演算法啊之類的,傻子都知道當然還是選擇ARM核心的啦。對於初學者,想學習基本演算法,實現基本的飛行,不搞那些高階的玩意的盆友,相信我,這款8位機足夠讓你快速開發四旋翼的軟體了,而且能夠節省很多時間用來學習演算法!根據需求不同,大家合理選擇晶片,才是最好的。千萬不要像我們系的老古董一樣,喜大好功。
以下是經驗談!!!!!!!!
一、四旋翼的學習核心在什麼地方?
這個問題我覺得是每一個想學習四旋翼的盆友都要考慮明白的,四旋翼是一個非常綜合的專案,涉及到了很多專業知識,甚至於非電子專業的知識。因此我們在學習之前,必須先搞清楚我們學習的核心在什麼地方?如果學習四旋翼,只是為了學習硬體程式設計,電路設計,配置一些暫存器,除錯一下IIC通訊,無線通訊之類的,那麼我覺得,這些還不足以是四旋翼學習的核心所在。我個人認為,四旋翼學習的前期,是上面說的到那些部分,需要認真對待,好好除錯。但是到了後期,等這一切都完成了,真正的核心應該回歸到演算法上。如果說硬體電路是骨骼,那麼演算法就是是一個控制系統的靈魂所在。對於控制部分的演算法來說,用的最廣泛的就是PID控制了,在此我還是很想跟即將開始設計四旋翼的童鞋們來說,PID控制不應該只是會除錯引數。我們應該儘可能的去理解自動控制原理,去理解反饋的感念,去理解為什麼四旋翼上最常用的是串級PID而不是單級PID。這些內容推薦入門的盆友稍微學習一下《自動控制原理》(胡壽鬆)會有很多好處的。上一次的一個文章是以溫度系統為例,利用Simuink來模擬對比一下不同PID的效果,為的就是能夠動手感受一下不同PID不同引數下的響應特點,使學習PID控制有一個感性的認識。
(連結:http://blog.csdn.net/rick_grimes/article/details/75095315)
二、設計製作四旋翼有什麼快速上手的方法?
這個問題應該也是出初學者最頭疼的問題,市面上飛行器一大堆,航模級別的飛控更是一抓一大把。打著開源旗號的飛控也是很多,但是航模級別的飛控只適合玩,真正想學習的話,APM、MWC之類的真心不合適。以我個人設計方案來說,首先我的學習時間短,不允許我有很多時間去浪費,其次我的方案是想選擇8位機。因此我選擇了先軟體,後硬體的學習計劃。也就是說,我先買一套成品小四軸,主控晶片跟我的方案一樣,然後再這個硬體平臺上先除錯自己的軟體程式,等一切調好之後,再著手設計自己的硬體,這樣出現問題,可以更快速的解決。試想如果從一開始就軟硬體自己來,出現問題需要把軟硬體都排查一遍,耽誤時間會很多,也會走很多彎路。我選擇的喵嗚實驗室的小四軸,硬體設計很完善,前期讓我可以很放心的去除錯軟體而不用擔心硬體問題。當然,也有很多童鞋使用別的晶片例如STM32來設計的,大家也可以選擇別的硬體平臺。道理都是一樣的。學會站在巨人的肩膀上學習!
三、新人應該從什麼地方開始學習?
我想,能夠來嘗試四旋翼的盆友,至少都是有軟硬體設計基礎的,排除什麼都不會的真小白,下面我就假設所有的盆友都已經有基礎了,以此來談談我認為應該從什麼地方開始動手。四旋翼飛行器的核心前面已經說過了,是姿態演算法。所以上手四旋翼的第一步,首先應該明確姿態感測器,我想大家一般都選用的是MPU6050,所以我就用它來說。首先在設計之初,至少需要利用IIC通訊,讀取出6050感測器的資料,並且去學習讀取出的資料如何轉化成我們需要的真實資料單位。這一步我認為是最關鍵的,因為只有感測器的資料讀取準確了,才能使後續演算法的計算有一個穩定的資料來源。因此學習四旋翼的第一步,應該是搞定MPU6050!
搞定6050感測器其實是有很多技巧的,比如最重要的資料手冊,必須要了解其中關鍵的一些部分,比如量程的選擇,精度的選擇,速度的配置等等。IIC通訊也是比較頭疼的比個地方,尤其是在電平時間的控制上,很容易出現問題。因此需要花時間去試錯。調著調著經驗就有了。
四、如何高效設計四旋翼飛行器的軟體程式?
這個問題其實對於任何一個系統來說都是適用的,因為有盆友問過我這個問題,在設計飛行器某一個部分的程式的時候,出現問題無法及時確定出問題所在,或者無法正確排除沒有出問題的部分。所以單獨把這個小問題拿出來說說,本人也是個渣渣半吊子,在這方面沒什麼真正有用的經驗,我的一貫方法是:分模組各個擊破!對,很傳統的方法,但是我覺得比較適合自己。舉個栗子:比如飛行器的程式,現在需要除錯2.4G無線通訊,那麼我只需要先寫好飛行器接收2.4G訊號的程式在開發板上,然後利用我購買的飛行器的遙控器,給開發板發資料,如果開發板收不到資料但是配套的飛行器可以收到,說明自己的程式有問題啦,對照飛行器的2.4G接收部分,自己程式和人家程式不一樣的地方,很有可能是出現錯誤的地方。這種方法挺笨的,但是我自己一直是在寢室獨自學習,沒裝置、沒老師。所以每次都是這樣一塊一塊自己摸索,因為有可供參考的標準硬體平臺,所以一個部分一個部分的來,還是很高效的!
總結
不一定有用的一些經驗和吐槽,但願能夠幫助到一些朋友吧。後續繼續總結,慢慢更新相關部分的學習筆記。
相關文章
- 四旋翼無人機飛越32公里英吉利海峽 創單次飛行最遠記錄無人機
- (ADRC)自抗擾控制器(二)——四旋翼無人機無人機
- 四軸飛行器實踐教程1.1.2飛行器的發展
- 預防四旋翼無人機墜落的演算法無人機演算法
- 飛行器的分類四軸飛行器實踐教程大學霸
- 四軸飛行器實踐教程第1章什麼是飛行器
- Infinity Wing Drive個人飛行翼:戴上它就能飛起來
- 四軸飛行器的原理和組成
- CSS:三欄佈局之雙飛翼佈局CSS
- 扎心!一個3年經驗的程式設計師經驗之談!程式設計師
- 植入式可程式設計微型電流刺激器解決方案之硬體設計除錯總結程式設計除錯
- 程式設計師自我修養之程式設計經驗總結程式設計師
- FIFO設計驗證經驗談
- 【譯】BerkeleyDB設計經驗
- 四軸飛行器實踐教程(內部資料)
- 線上資料遷移經驗:如何為正在飛行的飛機更換引擎
- 在手機上程式設計:自制的小飛可程式設計複數計算器(小飛計算器)程式設計
- 【乾貨】遊戲介面設計 (四)體驗設計遊戲
- CSS經典佈局——聖盃佈局與雙飛翼佈局CSS
- 程式設計師的經驗之談-生活與工作(轉)程式設計師
- 程式設計師面試經驗程式設計師面試
- plsql 程式設計經驗---引用SQL程式設計
- 關於網路框架設計封裝的扯淡框架封裝
- 小飛計算器(小飛可程式設計複數計算器)使用者手冊程式設計
- 『國產微控制器』led微型充氣泵方案開發設計
- 實驗一訊飛輸入法APP設計APP
- 微信小遊戲體驗之打飛機改造計劃遊戲
- 手記系列之四 ----- 關於使用MySql的經驗MySql
- 微型手術機器人同樣需要微型元件機器人元件
- 軟體測試用例設計實用經驗之談
- 小李飛刀 之 程式設計師版 (轉)程式設計師
- 程式設計師的管理經驗程式設計師
- VB程式設計經驗點滴程式設計
- 資料庫設計經驗談資料庫
- 亮瞎程式設計師雙眼的編輯器外掛橫空出世!程式設計師
- App架構設計經驗談:介面的設計APP架構
- 如何設計一個微型分散式架構?分散式架構
- 程式設計師為什麼千萬不要瞎努力?程式設計師