自己寫四軸飛控難度有多大?是個可完成的任務嗎?


四軸主要分為硬體驅動部分,和演算法部分,首先我給你介紹一下驅動部分,現在四軸飛控自己做,一般使用stm32飛控 103系列的,f4沒必要,主頻快,有些浪費了,上圖像識別又不行,stm32涉及的驅動主要是IIC(驅動mpu6050和磁力機以及氣壓計)SPI(主要是驅動nrf無線傳輸,但是也可以用在mpu6000),再就是串口,這個就是用在gps中,這些只是外部感測器的應用,內部設備主要使用四路接受pwm,和四路控速pwm,這需要用定時器,再就是eeprom這個也要用到,以及一些其他的部分。這是你需要張我的驅動部分,演算法部分主要是三個,第一個是濾波技術,需要用在姿態數據處理,ahrs演算法解算姿態,再就是pid這裡pid一般用雙環串級pid,單級的缺點很多,自己試一試可以。其實你想做到這一步還需要有不錯的C語言基礎以及紮實的調節驅動能力以及演算法的參數,另外調節pid也是和有技巧的,建議多看看調節pid心得,多調試然後對照別人的理論就會掌握。在一個你需要做的就是掌握pcb的製作,會使用ad軟體,這是pcb的入門,花幾塊板子練一下手,然後就可以製作飛控主控版了。樓主加油,本科生能做出來是完全可以的,答主大三,大二已完成全部工作,有心不難


樓上大部分回答都太片面了。

我當初用了一個月時間從零開始,硬體設計(沒什麼技術含量好么……),到實現不需要人去控制的定點懸停,外加一個有模有樣的地面站軟體,飛得還算可以。但是,後面花了一年多時間在做一些看似重複的工作,包括演算法的更新,系統級設計與優化,現在研究生還在這個坑裡,我現在我也只能說飛得還算可以。

這東西入門簡單,入了坑想做好就難了。最近半年,我看了慣性導航,最優狀態估計與卡爾曼濾波寫了個姿態的ekf已覺得收穫極大。控制還是pid 那套,稍微優化了一下,自覺得能達到dji nazalite80%水準,下一步就想看看能不能用點現代控制的手段能真正在飛行器上work起來,而不是停留在paper上的模擬。

視覺控制這個坑也想去填,不過有點力不從心。


MATLAB2014a以上的版本在Simulink裡面會有一個叫model based design的feature。有了它,你大概只要C或者C++寫一點讀感測器、讀遙控器接收端以及控制電機的庫,放進s-function builder,再用Simulink自帶的blocks就可以搞一個具有相當複雜度的控制程序了。四旋翼根本不在話下,當然前提是你得知道四旋翼的控制演算法。


你概念里的寫是否包括代碼?還是paper即可?寫出代碼是否包括編譯通過?編譯通過以後是否包括模擬測試?模擬測試以後是否包括飛行測試?飛行測試中一個bug至少摔一架飛機,一個參數沒調整好至少摔一架飛機,你能承擔的起摔多少架?不去草原/沙漠/倉庫測試,摔機以外砸了人或物的賠償呢?

忘了之前國內哪個做無人機飛控的團隊了。在敘述發展史時說摔了幾十架,二十多萬就這麼摔掉了。而我對他們的看法是:真牛,只摔了這麼點就能(敢)出產品。

如上是2015-08-31的回答,時隔一年半,看到了很多新的東西,觀點也反轉了。所以先反駁一下自己之前的回答。

1、飛控是否包括寫代碼?還是paper即可?相信每個想要嘗試編寫飛控的人都希望自己的飛控真的運行起來。有paper更好。

2、寫出的代碼是否包括編譯通過?編譯通過肯定是很基本的了,事實上飛控的難度並不在於編譯通過,而是代碼的正確性,好在已經有很多優秀的開源飛控值得學習了。

3、編譯通過後是否需要模擬測試?我所知librepilot(原openpilot)就已經對接了一些飛行遊戲來做模擬測試,這就使得飛控的測試難度降低了很多。

4、飛行測試摔飛機,承擔的起摔多少架?近來看了些飛控在室內的測試方法,將飛行器上下各拴一根繩子到天花板和地面,平時較松但也確保飛行器受限而無法撞上天花板和地面。側面可以開風扇模擬側風。可以極大的降低實測的成本。

5、室外測試損壞他人財物?看測試的範圍了。避開人,去郊區甚至草原還是有些必要的。也可以測試時不帶電池,甩線出來地面供電來防止飛遠。

我還沒有開始寫,但從已經閱讀的部分MultiWii、LibrePilot、CleanFlight的源碼看,練習編寫飛控還是很鍛煉人的。希望所有正在嘗試的朋友在編寫和試飛中一切順利,注意安全。


有一句話叫做站在巨人的肩膀上。

在互聯網的時代,無論是知識還是飛控成果都有大量的肩膀可以站的。

建議樓主從開源演算法入手:3DR,MWC這些,沒有任何成本,代碼完全開放

MWC直接去這裡下載就可以

軟體下載 | DF飛享屋

3DR建議你去官網直接尋找內容

目錄 | ArduCopter中文網

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

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

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


選型主晶元和感測器,選型通信等模塊。參照開發板畫二層飛控電路板,這個需要試幾次,很難一次做出來各模塊都沒問題,找人焊接元件。根據晶元手冊編寫驅動程序,實現主晶元與各感測器通信,實現飛控與電腦通信。編寫上位機和通信協議,實現接收保存飛行數據便於後續飛行測試。編寫上層程序,包括遙控器通道讀取,飛行姿態位置測量,控制電機實現姿態的鎮定和追蹤,高度鎮定,位置鎮定。pid控制需要最後漫長的調參。我幹了一年,至少實現飛機定點飛行不會飄走,在正負1.5米之內晃。

另外要注意,如果處理器浮點運算效率低,那麼就要把所有浮點運算用整型數代替,比如一個旋轉矩陣,每個元素乘2的14次方來用定點表示


可完成,難度極大,完成需要多人合作或者自己牛b,砸它一年時間差不多就能勉強飛起來了(誤。

PID放著你調,一調調半月,難不在寫,而是在於調出合適的參數來保證飛機調整各種姿態的時候響應速度都要恰好,這都是需要大量實驗數據積累的。

本科生寫飛控,只要能讓一個四軸在空中保持高度誤差小於0.5m,定高方法超聲波GPS氣壓計什麼的隨便選;「懸停」時候水平方向別飄太快撞到人,就相當牛了。

近幾天同學有參加比賽的,我沒事就在他們的實驗室蹭空調順便打醬油圍觀。他們用的飛控是已經商品化的比較簡易的QQ飛控,帶自穩,然而飛起來只能說是「能穩住」,不至於飛機姿態失控,和「懸停」完全是兩碼事。高度飄忽不定,水平方向上只要不飄的太快撞人炸雞就是萬幸了。在室內測試時候,飛機最多能飛層高那麼高,4米的高度,對於飛機來說,就跟拴繩遛狗一樣。然而僅僅在這個高度限制內做個定高(還是上下飄忽在一定的高度範圍內晃悠的那種),就炸了不下十對槳。

可以說只要你c基礎還可以,掌握(不用精通)matlab之類自動化電子專業的必備工具,寫出來這些功能已經不是大問題。

但是參數的話,自己慢慢調吧。


現在網上已經有很多開源程序,像匿名那些都比較容易看懂,自己做過東西的話要做出來不難。不過要出好的穩定的效果就需要多花時間去debug了


單單寫主控程序的話並不難,前提是你的飛行器功能簡單,但如果要把姿態那部分自己純手擼就有些難度,花些時間研究一下別人的開源代碼也不是很難的。麻煩的是調試,會遇到各種問題的。。。


控起來很簡單。控得好太難太難太難了~


之前在學校的時候做過,在學校和幾個同學,從淘寶買的無刷直流電機,架子等,開發板用的stm32(後來感到這個頻率真的不夠,除了基本控制再做其他的就不行了),控制演算法用的是PID,還是基礎pid,並不是高大上的模糊pid,再各種濾波,藍牙導出實時數據進行調參。實現了可控高度的自平衡,做到這部感覺就不容易了,程序也是我們用c自己寫的,感覺想做好還是需要一定的數學基礎,不然很多優化做不到,更談不上高大上的演算法了。再後來就畢業入了互聯網額坑。。。


引用一下我另一個回答里的內容。

飛行控制演算法工程師的工作體驗? - 銳眼的回答 - 知乎

  1. 與硬體、軟體、結構等同事共同確定飛行器的主要參數,包括重量、動力、續航、功能,從而確定飛行器類型、確定各執行器和感測器的性能指標。
  2. 與嵌入式工程師溝通系統架構,確定程序中演算法任務的執行頻率、各個感測器調用方法、存儲方法。
  3. 如果團隊人多,根據人數拆解演算法工作,比如幾個人做組合導航,幾個人做控制,組合導航里姿態和位置拆不拆開,高度分不分離出來。
  4. 如果只有一個人,先測感測器數據,最主要的是慣導,看輸出值有無問題,如果有飛行器,直接上機,在真實的振動環境下看是否需要加低通濾波等處理,還包括氣壓計、超聲波、毫米波、攝像頭、GPS這些感測器也都需要測試。
  5. 寫標定演算法,標定加速度計、陀螺儀、磁力計(如有)。
  6. 寫狀態顯示演算法,如有LED時,什麼顏色代表什麼狀態。
  7. 確定數據融合方案,現在主流的都是卡爾曼濾波,然後開始設計演算法,在飛控板上調試,看姿態、位置、高度、速度等狀態量估計值是否合理。
  8. 寫控制演算法,最簡單常用的就是PID,在簡單的環境下試飛、調參。
  9. 增加複雜環境下的邏輯處理,比如使用超聲波測高時,飛行器飛過樓梯怎麼處理,如果是傾轉旋翼,傾轉過程如何控制等。
  10. FDI演算法設計,用於隔離異常,比如GPS丟星。
  11. 如有任務設備,簡單調試,比如控制相機曝光,操作執行機構。
  12. 功能開發,比如航線規劃後飛自動任務,避障,跟蹤,定點環繞,固定區域巡邏等。
  13. 跟蹤大量試飛測試,確保穩定性。

這裡只是演算法部分,飛控中還有嵌入式軟體部分。嵌入式負責整個軟體架構,如果需要跑多線程的話要引入嵌入式系統,相對複雜,裸奔的話簡單一點,需要定義好主要的輪詢周期,再加上寫感測器驅動,反覆調試。

如果想自己寫飛控以了解整個設計流程,當然嵌入式和演算法都要照顧到,我們姑且假設不考慮開源飛控架構,因為直接套用開源的話需要自己來完成的部分很少。

具體的工作量要看最終想附加的功能,如果是想要做有光流、能飛航點、多套感測器冗餘的就複雜點。當然如果我們只是想簡單的讓飛機飛起來,再加個增穩,這個不難,只需要寫一個裸奔系統,一個IMU驅動,再加上姿態解算和姿態控制就可以了。IMU可以選擇比較常用的MPU6050、6500,姿態解算用最簡單的互補濾波,控制用PID,這樣就很快了。之後有必要的話再一點點加難度,加上更多的功能,使用更多的感測器,換更好的演算法。


有難度,有興趣的話,絕對能夠完成
去年年底在公園撿了個四軸屍體,一直想把它修復,因是小廠玩具,沒有可替換配件,一直沒有再飛起來而我這個大叔卻入魔了!
今年開始,先是買模塊做飛控MWC,能飛了,不滿足,開始從零開始自己做飛控,開始泡圖書館,模擬電路,數字電路,c語言,從最基礎的開始,c51單片機,stm32,淘寶電子原件,烙鐵,工具,學習keil,atumdesiger,畫板,打樣一次成功,手工焊接QFN24的mpu9250,學習各種協議,iic spi,can,sdio,usart,學習各種晶元手冊,無線晶元,感測器flash,mpu6050,ms5611,超聲波,GPS, 寫驅動,移植dmp,學習卡爾曼濾波,互補濾波,四元數,歐拉角,姿態解算,pid控制,串級PID,實時系統ucos移植等,歷時半年多,基本能飛了,但還不完善,後續優化程序,增加功能模塊等。
心得:興趣是最好的老師,網路有你想要的一切!
後期再考慮全部開源,共享給模友。
目前平台:stm32f407+mpu9250+ms6511+GPS+Sdcard+can,所有io全部引出來,當開發版用,
軟體平台:ucosiii + dmp6.1+串級pid

本人非電子相關專業,目前職業跟這方面不沾邊,完全業餘時間折騰,痛苦且享受!

//--------------------------17年4月更新-----------------------------------
早些時間因家中增加了位小成員,所以沒有時間搞飛機。近幾日空,就再補充些。到目前為止,已經拼湊移植加上自己敲了這一堆代碼,基本實現了導航的大部分功能,如航點飛行,繞點飛行,無頭模式,一鍵起飛,一鍵返航等,以及航跡規劃(沒有上位機,只能刷固件時燒進去,或是抱著飛機跑來錄製航點);另外,給飛控板增加了FATFS文件系統支持,方便保存飛行數據到SD卡,方便電腦上分析,增加USB介面功能(用於調參、固件升級等,暫未完成);
首先,飛控軟體設計工作量遠遠大於硬體設計,其次,實踐是檢驗你成果的唯一標準,再高大上的設計和演算法,都飛不起來,或是飛不穩,說個x!一邊測試一邊改進程序,能加快你的設計進程,不要覺得一切工作都OK了才去試飛,出了狀況,可能因素太多,你都不好排查。

硬體實物

GPS模塊沒綁好,炸雞炸丟了,80塊啊,汗!

測試視頻:

做到現在,後面還有很長的路,優化程序,調節參數(一直在嘗試pid自動整定),目標就是飛得更穩更靈活(姿態),飛得更精準(GPS踩點,高度)。飛得更智能(加感測器和演算法)。搞到一定程度就會受到硬體限制,又得去搞硬體,加感測器(超聲波,光流, RTK ),還想自己做電調,自己做遙控器,自己3D印表機架,NND,再多的時間都不夠啊!
航模是個坑,


不知有多深,


入坑需謹慎,


小心誤青春。


以下內容可能與問題無關,並且多圖,沒流量慎入(不知道知乎能否摺疊)


我本專業是工業設計,學的有如材料,結構,構成,素描等,平日做的事情有產品造型設計,室內外裝修規劃等,具體做得比較多的是平面規劃、三維建模,渲染表現等,常用軟體如cad、3dmax、 vray 、ps 等CG軟體。
平面規劃

立體規劃

三維建模

渲染表現

飛機有關

電腦開始菜單

感覺確實太雜了,估計很少人像這樣。會些軟體,倒不是什麼負擔,就是工具而已,不用時就撂倒一邊,但好奇心就是負擔!記得知乎有人說應該關掉微信朋友圈,你看到的都是是別人願意讓你看到的一面,你的新聞和社交APP就是你眼界的圍欄,https://zhuanlan.zhihu.com/p/25564046。 而我想說的,不是圍欄,而是黑洞。對於像我這種好奇心特強的人,碰到個好奇點,就開始再網上扒拉扒拉。百度谷歌都來一遍,換批關鍵詞再來一遍,越扒越深,好不容易掙脫出來,又陷入另一個黑洞,總之就是無盡的再網上扒拉。所以,再這個時代,保持專註比任何別的時代都要重要,要嚴格限制自己的關注範圍, 在寫這個之前,我取消了許多知乎關注的話題,如量子物理,汗;
借用題主地盤,發了一些其他內容,因精力緣故,現在正考慮轉行智能嵌入式或無人機相關行業,還請知乎的朋友有沒有介紹或推薦,或是擅長職業規劃的牛人指導一二,感謝關注!


難度不是很大,至於能不能完成取決於你有多少動力。

答主非科班出生,野生程序員一枚,懷著對編程和單片機的熱愛, 開始了一個名叫 Avem 的輕量級開源飛控的項目:

but0n/Avem

PS: Avem 在拉丁語中是鳥的意思

目前已完成的成就:

  • Software I2C

  • Init MPU6050

  • Get 3 axes Gryo and 3 axes Accel data from MPU6050

  • Cumpute Quaternion and Euler Angles

  • PWM output

  • Driving motors with L9110S

  • PID Control

  • Schematic

  • PCB Layout

  • Brushless DC motor - Video on YouTube

  • Wi-Fi(ESP8266)

  • PID

  • FreeRTOS

對於答主來說前期主要的難點有三個部分:

  • 姿態數據輸入部分

  • 姿態控制輸出部分

  • 姿態控制PID演算法

  1. 姿態數據輸入部分 : 主要難點在於 四元數轉歐拉角 (姿態解算), 由於答主非科班出生, 這方面是短板, 目前解算部分的代碼只是按照網上那幾條公式寫的, 雖然目前姿態解算部分效果很好, 但是答主對於其中的原理理解的不是很深入.
  2. 姿態控制輸出部分 : 也就是單片機 PWM 輸出控制電機轉速, 這方面答主一開始用的空心杯直流有刷電機, 控制起來很簡單, 後來因為在使用時覺得空心杯推力不夠給力, 就買了商品電調和無刷電機 (Brushless DC Motor), 接下來控制就變得複雜了, 由於商品電調是面向航模玩家的, 在控制方面只介紹了遙控器油門的操作, 沒有對於PWM輸入信號占空比和頻率的詳細數據. 網上查到的數據有好幾種, 總之走了很多彎路, 經過不斷的調試和驗證後來找到了正確的頻率[MOD]: Changed the Rate of BLDC from 500Hz to 50Hz, 1ms-LOW, 2ms-HIGH · but0n/Avem@3396b7f

  3. 姿態控制PID演算法 : 對於PID控制演算法答主一直很感興趣, 答主也買過相關書籍, 最後根據文章類容自己寫出了串級PID控制代碼, 答主也整理了一份詳細的資料 but0n/Avem , 目前答主還在調參...

答主屬於Linuxer, 開發環境比較非主流, 所有工作都是在 Mac 上完成的

- 電路圖和 PCB Layout 使用開源軟體 KiCad

- 寫代碼用 Atom, Emacs, Vim

- 編譯使用答主自己整理修改的一套工具 (Makefile + arm-gcc), 同樣也是開源的:but0n/stm32_MacOS

- 燒寫使用開源的燒寫工具: ARMinARM/stm32flash


前段時間研究了下四軸飛控,剛好過來說說

對於飛控開發,分以下幾個層次,難度逐漸上升:

第一層,最簡單的,基於已有開源飛控及其相應平台進行修改和拓展。這個難度不大,有一點軟體/單片機基礎知識的人都能做到。從飛控到通信到上位機都是現成的,而且教程不少。你只要看懂(大概看懂)他的代碼和硬體搭配,就可以進行自己的修改了,還可以加點自己想要的東西,你就可以做一架自己的小飛機了。

第二層,參照已有的各類飛控,利用一些核心程序(比如姿態演算法,控制流程),開發一套適合自己的飛控。這個難度看自主部分的程度,由一般到很難。需要的知識也比較多,軟體硬體都要掌握,還要一定開發經驗。另外,測試也是一個很難,很費時費錢的事…參數調到你想死…摔一架飛機心疼的你想死…這一類程度已經足夠一個本科生的畢業設計了。大部分玩飛控的也都是做這一層,畢竟重複造輪子對大多數情況沒有必要。不過如果你肯花時間花精力花錢,對於一個人這是有可能的。

第三層,完全自主研發,設計一個全新的飛控。從控制理論到軟硬體架構到測試到成品,一步步從刀耕火種走向信息時代。這極難,涉及的知識面巨大,耗時耗資巨大,對於一個人幾乎不可能完成,需要一個開發團隊。


簡單!

用pixhawk, 先學會玩,然後自己改。無論是自己抄板子,還是改代碼。這是我給一般人的建議。

Home - PX4 Autopilot Project

這個網站看看心裡就有數了。

實際上pixhawk是個很好的學習對象,現在的很多無人機創業公司,用的就是根據pixhawk改的,讓他們自己從頭寫,也不是一般的公司能完成的,也是沒太必要的。

我們實驗室自己本來是做直升機,也有固定翼的項目,然後幾年前就開始搞多旋翼,說實話,開始做四旋翼還是極為簡單的,但是後來發展到六旋翼,八旋翼調控制演算法實驗就越來越難受,程序自身出問題就可能炸雞不說,還有一整套系統(gps,地面站,機械等等)都不能出問題。

所以一個人搞的話,我建議你從pixhawk先玩玩,知道現在的多旋翼有什麼功能,心裡有數了,還是要自己從頭搞也不是不可以,電子科大那位不是從頭做了crazycopter(好像是這名字)。不過像這種執行力很高的人也不會讓別人幫他評估這個任務能不能完成吧。


如果題主的要求只是買來成品飛控,然後在此基礎上寫程序,如APM、kk的話,不難

這些飛控一般都是開源的,陀螺儀什麼的也都給你裝在裡面了,上位機也有現成的。研究一下別人的程序,C、C++基礎好點的話差不多一個星期不要就可以寫一個自己的PID的控制程序了,推薦新手入門用kk,進階用APM,naza,MKW什麼的都行

但是如果題主想從零開始,自己搭建一個飛控,那就不僅要掌握編程,還得學習電子電路,微機原理,機電系統設計等相關的知識,上位機什麼的也得自己弄,還得學習C#,而且由於是自己手工搭建的,穩定性肯定不如成品飛控。推薦用stm32做主控,這款晶元有很多教程也有很多人用來做飛控,可以參考一下別人的程序

如果題主是想為自己的飛機量身定做一套飛控,可以試試別的控制理論,不過建議還是先找個航空院校讀個研究生再說吧


作為一個自動化專業的准大四,表示自己畢業設計就是四旋翼,而且今年畢設超級多的人都是選的這個。硬體軟體都是自己做。以上。

如果有時間再更。


其實只要掌握好控制原理和數學模型,在MDK里寫控制演算法已經不算什麼難事了,除非你要極致求完美,代碼用最完美的演算法、最少的bug。

現在MPU6050已經可以直接輸出四元數了,不用去摳AD值,不用去焦心去各種融合姿態解算、不用卡爾曼濾波和四元數轉化,這樣已經很方便了。何況四元數在旋轉控制變化的矩陣計算里已經是很容易的了,而且四元數轉化成歐拉角輸出也只是一個公式的問題,就只需要調用math頭文件。

但是難點就在於PID控制演算法,這東西不是那麼的容易的理解的,對於當時我這種高數掛三次的人來說,基本屬於從0學起。這之後心裡就要有一個數學模型了,PID其實也不難理解,就是誤差倍率、誤差的微分、積分,雙環PID共軛演算法這些也是用50~100行代碼左右可以表達出來。

剩下的就是對於晶元的控制了,IIC、SPI、UART(同步通信不推薦,佔用引腳太多了,非同步很適合在飛行器上使用)協議一定要理解,這些看起來是最簡單的,但是也是在調試方面最容易出bug且最不容易發現的地方。不過這些可以在開發板上完成,不用使用打樣的PCB浪費了。

一個人寫出四旋翼SOC如果不用RTOS的話,其實也不是很難的,但是真正實施起來的確挺糟心的,很容易調著調著就掀桌了,一定要沉得下來。


難度是有,但是具體多難,還是在於你的準備是否到位。

1.網上有很多開源的實例也有相關的論壇;

2.要具備一定的設計PCB的能力和C語言功底,以及要具備一些概率統計、信號與系統、電路和自動控制理論的基礎知識,否則很多演算法難以理解,比如常用的PID、卡爾曼濾波等。

3.某寶可以讓你迅速獲得很多最實際甚至第一手的資料,有時你買一些器件,賣家會附送你一些資料,這些資料可以省去你很多時間。

4.正如其他答案所言,調試周期很可能會比設計周期更長。由於此類四軸飛行器系統的不確定性決定了這個系統將難以建模,在調試過程我們可能只能通過實驗法來確定各個環節參數,並且還要面對在調試過程中源源不斷的問題。這對於一個鮮有調試經驗的初學者可能是最抓狂的一件事情。


推薦閱讀:

國內做化學分析儀(色譜,光譜等等……)比較好的有哪些公司?
Linux下開發,stm32和arduino,我該何去何從?
樹莓派比起低功耗x86 CPU有什麼獨特優勢?
小霸王之類的學習機上的DOS系統是如何實現的?

TAG:嵌入式系統 | 四軸飛行器 | 飛控航拍 |