1. 程式人生 > >微型四旋翼飛行器設計經驗之瞎扯淡

微型四旋翼飛行器設計經驗之瞎扯淡

在正式開始記錄微型四旋翼飛行器設計的學習筆記之前,感覺自己很有必要先給自己一個總結,也希望能夠幫到更多的朋友少走彎路(雖然不知道幫助大不大)。
去年九月下旬開始了微型四旋翼飛行器的學習與設計,在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,
[email protected]
,等效25MIPS,運算速度也秒了mega328,也就是說,用51微控制器做四軸絕對不成問題。
(來自:http://bbs.mydigit.cn/read.php?tid=1115916)
老古董打臉不?誰告訴你8位機的PWM計數週期只有256?高速八位機PWM不光是15位的,而且還是硬體PWM,非常好用。

不吐槽了,畢竟是負能量,說句公道話。如果是進階的朋友,需要搞更復雜的功能,比如機器視覺啊,更復雜的演算法啊之類的,傻子都知道當然還是選擇ARM核心的啦。對於初學者,想學習基本演算法,實現基本的飛行,不搞那些高階的玩意的盆友,相信我,這款8位機足夠讓你快速開發四旋翼的軟體了,而且能夠節省很多時間用來學習演算法!根據需求不同,大家合理選擇晶片,才是最好的。千萬不要像我們系的老古董一樣,喜大好功。



以下是經驗談!!!!!!!!


一、四旋翼的學習核心在什麼地方?

這個問題我覺得是每一個想學習四旋翼的盆友都要考慮明白的,四旋翼是一個非常綜合的專案,涉及到了很多專業知識,甚至於非電子專業的知識。因此我們在學習之前,必須先搞清楚我們學習的核心在什麼地方?如果學習四旋翼,只是為了學習硬體程式設計,電路設計,配置一些暫存器,除錯一下IIC通訊,無線通訊之類的,那麼我覺得,這些還不足以是四旋翼學習的核心所在。我個人認為,四旋翼學習的前期,是上面說的到那些部分,需要認真對待,好好除錯。但是到了後期,等這一切都完成了,真正的核心應該回歸到演算法上。如果說硬體電路是骨骼,那麼演算法就是是一個控制系統的靈魂所在。
  以微型四旋翼飛行器來說,核心演算法大概分為兩個部分:姿態解算演算法與控制演算法。其中姿態解算演算法是核心中的核心!它在很大程度上決定了四旋翼飛行的準確性與穩定性!試想,如果飛行器無法正確計算出自己飛傾角,那麼再好的控制演算法也無法使之保持穩定。
  因此,有很多盆友跟我說,做四旋翼,主要就是調PID,我只能說你們太不踏實了。我參考了好多個團隊程式碼,真正的姿態解算的核心部分大家幾乎都用的是同一個IMU.C檔案,其實這樣也無所謂,問題的關鍵是,不能只是呼叫人家的核心演算法,在調通程式碼的基礎上,一定要深入瞭解這個演算法是如何把姿態正確計算出來的!知其然一定要儘可能的去知其所以然,否則學到頭,自己依然只是會配置個暫存器,控制外設而已,那麼這樣一來,好像做四旋翼與不做四旋翼並沒有本質的提升,因為輸出PWM,配置箇中斷,除錯個通訊協議,開發板就能做到,還需要四旋翼幹什麼?
對於控制部分的演算法來說,用的最廣泛的就是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接收部分,自己程式和人家程式不一樣的地方,很有可能是出現錯誤的地方。這種方法挺笨的,但是我自己一直是在寢室獨自學習,沒裝置、沒老師。所以每次都是這樣一塊一塊自己摸索,因為有可供參考的標準硬體平臺,所以一個部分一個部分的來,還是很高效的!


總結
不一定有用的一些經驗和吐槽,但願能夠幫助到一些朋友吧。後續繼續總結,慢慢更新相關部分的學習筆記。

相關推薦

微型飛行器設計經驗瞎扯

在正式開始記錄微型四旋翼飛行器設計的學習筆記之前,感覺自己很有必要先給自己一個總結,也希望能夠幫到更多的朋友少走彎路(雖然不知道幫助大不大)。去年九月下旬開始了微型四旋翼飛行器的學習與設計,在12月底的時候初步實現了穩定的遙控與飛行,後續又增加了一些常規的輔助的功能,失控保

飛行器製作過程中遇到的問題及解決方法

作為一款四旋翼飛行器,能夠得到實時姿態的晶片自然必不可少,於是博主選用了較為常見的MPU6050來獲得姿態。同時輔以HMC5883L三軸電子羅盤感測器來矯正航向角,配備了MS5611氣壓計來做定高。(主控晶片也選擇了較為常見的STM32F407,並且博主是用

自主飛行器設計方案

針對2016年湖南省電子設計競賽的飛行器賽題,寫一篇四軸的方案,適合初學四軸的和想了解四軸的,大神級別的可以繞道。 1.方案設計 1.1姿態感測器的選擇 1.1.1加速度計 加速度檢測晶片有ADXL345、BMA180以及MPU6050等。ADXL345是ADI公司於

DIY(穿越機)軟硬體設計

今天教教大家怎麼真正意義上的DIY四旋翼飛行器,我將從機架入手DIY穿越機。 下面是我的步驟: 1、設計機架三維圖紙; 2、匯出機架的二維圖紙並做修改; 3、設計飛控板; 4、試飛。 step 1. 我們先設計穿越機的三維圖紙,我這裡使用的是soli

APM飛控學習路:2 的工作原理與系統組成

        “一葉障目,不見泰山”。在研究四旋翼飛行器之前,有必要從整體介紹其工作原理、主要部件、技術名詞等基礎知識。不然就像羊入虎口,陷入一大堆不同層次的資料,難覓出口。接下我就拋磚引玉,儘自己所能,介紹四旋翼的工作原理和主要部件。餘雖不敏,然餘誠也。 工作原理

姿態和位置,的控制流程

無人機或者飛行器的控制器叫做飛控,瞭解這種控制方法不但是其中的演算法還包括控制物件,控制器等等。飛控作為一個體系來理解更容易入手。 <img src="https://pic3.zhimg.com/398c918a7d29e9bf36ae968d039c30ca_b.png" data-

姿態解算——互補濾波演算法及理論推導

上次我們討論了姿態解算基礎理論以及幾個比較重要的公式的一些推導,如果有不熟悉的請點選這裡開啟連結。這次來介紹一些實際的姿態解算演算法吧! 一般在程式中,姿態解算的方式有兩種:一種是尤拉角法,一種是四元數法。這裡不介紹尤拉角法,只介紹四元數法,如有興趣可以去

初次組裝

一 四旋翼配置清單 初次嘗試組裝四旋翼,在淘寶上買相關配件,進行組裝。初次組裝,比較亂。 二 裝機步驟 1:機臂與上層中心板安裝,2.5mm螺絲。 2:香蕉頭灌錫,電機三線插入,連上電調線 3:裝上四個電機,3mm螺絲。注意電機的順序,銀色冒為1,2號對角,

玩轉無人機(GPS基礎)

本文主要介紹關於GPS及其相關資料計算方法,GPS經常用於移動機器人及其他移動過程中的定位和地圖顯示。本文先介紹一些關於GPS參考座標等相關知識。 GPS 資料簡介 實際的GPS系統會以一定格式輸出很多資料,如時間,精度因子,衛星編號,信噪比等等,但對於

知識簡要介紹

(4)偏航運動:旋翼轉動過程中由於空氣阻力作用會形成與轉動方向相反的反扭矩,為了克服反扭矩影響,可使四個旋翼中的兩個正轉,兩個反轉,且對角線上的各個旋翼轉動方向相同。反扭矩的大小與旋翼轉速有關,當四個電機轉速相同時,四個旋翼產生的反扭矩相互平衡,四旋翼飛行器不發生轉動;當四個電機轉速不完全相同時,不平衡的反扭

玩轉無人機(感測器)

IMU 一個典型的IMU包括一個三軸陀螺儀,一個三軸加速度計和一個三軸磁力計。首先定義慣性座標系A,機體座標系B。 陀螺儀 陀螺儀測量B相對於A的角速度 ΩIMU=Ω+bΩ+η η為可加性測量噪聲,bΩ為陀螺儀常量偏置。 加速度計 加速度計

(ADRC)自抗擾控制器(二)——無人機

自抗擾四旋翼控制中的幾個問題:自抗擾控制器包含三大部分:TD微分跟蹤器 :微風跟蹤器主要可以安排過渡,過程同時還具有一定的濾波功能,四旋翼由遙控器和地面站傳送期望控制訊號,可以通過微分跟蹤器安排過渡過程,加快響應速度,同時還可以用於對資料進行濾波。ESO擴張狀態觀測器:擴張觀

姿態解算——基礎理論及推導

對於每個像我一樣入坑四軸飛行器不久的新手來說,最初接觸也頗為頭疼的東西之一就是四軸的姿態解算。由於涉及較多的數學知識,很多人也是覺得十分頭疼。所以,我在這裡分享一些我學習過程中的筆記和經驗,以便大家學習。 兩個座標系: 首先,在一個姿態航向參考系統(簡稱

基於單目視覺的定點降落——如何搭建基於gazebo的pixhawk模擬環境(三)-1

    搭建模擬環境是相當重要的,因為我們的程式碼如果直接放到飛機上去跑,那麼很容易炸機。通過模擬環境,我們至少可以保證程式碼邏輯的正確性。這篇文章還是要感謝我的隊友舒仔仔的幫助,話不多說,上正文。1 安裝gazebo一般安裝的ROS就已經自己安裝了gazebo,如果已經安裝

無人機 UAV 相關的學習資料

書籍:1、《Handbook of Unmanned Aerial Vehicles》          2、《》PTAM 是增強現實相關的一個庫,與SLAM框架類似,相容ROS。    以下是關於PTAM相關的一些網頁:    PTAM (Parallel Tracking

微型飛行器(4)通訊設計

通訊方式選擇 如今的四軸飛行器上使用的無線通訊模組有5種大類,WIFI、藍芽、2.4G模組、433M模組、868M模組。Wifi和2.4G其實都是一個頻段,但是wifi是經過了協議封裝的結果,而後者模組僅僅是用於傳輸,並沒有任何協議。綜合考慮下我使用了WIFI

設計模式-Factory模式

無需 告訴 實現 比較 原則 更強 方便 可能 fprintf 簡單工廠模式 簡單工廠模式是工廠模式中最簡單的一種,他可以用比較簡單的方式隱藏創建對象的細節,一般只需要告訴工廠類所需要的類型,工廠類就會返回需要的產品類,但客戶端看到的只是產品的抽象對象,無需關心到底是

面向對象設計原則:依賴倒置原則

ron 通過 發生 需要 系統 面向對象設計 啟動 模塊 == 依賴倒置原則 所謂依賴倒置原則(Dependence Inversion Principle )就是要依賴於抽象,不要依賴於具體。簡單的說就是對抽象進行編程,不要對實現進行編程,這樣就降低了客戶與實

C#設計模式抽象工廠模式(AbstractFactory)【創建型】

抽象 抽象工廠 album 代碼 ctf bst actor 抽象工廠模式 .cn 一、引言 寫了3篇有關設計模式的文章了,大家有了些反饋,說能從中學到一些東西,我感到很欣慰,那就繼續努力。今天我要寫第四個模式了,該模式叫抽象工廠。上一篇文章我們講了【工廠方法】模式,它是為

Java進階篇設計模式 -----適配器模式和橋接模式

原則 pub 是我 protect 接口 logs 將不 多說 外鏈 前言 在上一篇中我們學習了創建型模式的建造者模式和原型模式。本篇則來學習下結構型模式的適配器模式和橋接模式。 適配器模式 簡介 適配器模式是作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬於結構型模