目前發現國內正兒八經機器人、無人機並且還能活躍地上網關注行業前沿動向、熱愛寫科普文章的研究人員原來越少。因此所有的研究回答裏都沒有人真正説明白無人機到底是什麼,而理解無人機到底是什麼才是回答這個問題的先決條件。
什麼是無人機
首先,無人機就是不載人的飛行器,而説到飛行器,通常我們又可以把飛行器分為三類。
1、固定翼(fixed wing)。平時坐的波音747空客A380.還有F-16殲-15之類的都是固定翼飛機。顧名思義就是翅膀形狀固定,靠流過機翼的風提供升力。動力系統包括槳和助推發動機。固定翼根據機翼尺寸的不同還有很多小的分類,在此不細説。固定翼飛行器的優點是在三類飛行器裏續航時間最長、飛行效率最高、載荷最大,缺點是起飛的時候必須要助跑,降落的時候必須要滑行。
2、直升機(helicopter)。特點是靠一個或者兩個主旋翼提供升力。如果只有一個主旋翼的話,還必須要有一個小的尾翼抵消主旋翼產生的自旋力。為了能往前後左右飛,主旋翼有極其複雜的機械結構,通過控制旋翼槳面的變化來調整升力的方向。動力系統包括髮動機、整套複雜的槳調節系統、槳。直升機的優點是可以垂直起降,續航時間比較中庸,載荷也比較中庸。缺點是極其複雜的機械結構導致了比較高的維護成本。
3、多旋翼(multi-rotor)。四個或者更多個旋翼的直升機,也能垂直起降,但是通常只有直升機叫直升機,多旋翼就叫多旋翼,而不叫多旋翼直升機。四旋翼特別叫做quadrotor。多旋翼機械結構非常簡單,動力系統只需要電機直接連槳就行。下圖是直升機的動力系統結構,再下圖是多旋翼的動力系統結構。不懂機械的人也能看出多旋翼簡單得多。多旋翼的優點是機械簡單,能垂直起降,缺點是續航時間最短,載荷也最小。
今天來給大家介紹下四旋翼無人機,看看怎麼是真正的技術,吼吼吼......
1.i2c通信方式;
因為我不是學電類專業,最開始對i2c這些是沒有一點概念,最後通過Google瞭解了一些原理,然後發現STM32的開發庫是帶有i2c通信的相關函數的,但是我最後還是沒有用這些函數。
我通過GPIO模擬i2c,這樣也能獲得mpu6050的數據,雖然代碼多了一些,但是比較好的理解i2c的原理。
STM32庫實現的模擬i2c代碼(註釋好像因為編碼問題跪了):
2.PID控制算法;
由於簡單的線性控制不可能滿足四軸飛行器這個靈敏的系統,引入PID控制器來更好的糾正系統。
簡介:PID實指“比例proportional”、“積分integral”、“微分derivative”,這三項構成PID基本要素。每一項完成不同任務,對系統功能產生不同的影響。
以Pitch為例:
error為期望角減去實時角度得到的誤差;
iState為積分i參數對應累積過去時間裏的誤差總和;
if語句限定iState範圍,繁殖修正過度;
微分d參數為當前姿態減去上次姿態,估算當前速度(瞬間速度);
總調整量為p,i,d三者之和;
這樣,P代表控制系統的響應速度,越大,響應越快。
I,用來累積過去時間內的誤差,修正P無法達到的期望姿態值(靜差);
D,加強對機體變化的快速響應,對P有抑制作用。
PID各參數的整定需要綜合考慮控制系統的各個方面,才能達到最佳效果。
輸出PWM信號:
PID計算完成之後,便可以通過STM32自帶的定時資源很容易的調製出四路pwm信號,採用的電調pwm格式為50Hz,高電平持續時間0.5ms-2.5ms;
我以1.0ms-2.0ms為每個電機的油門行程,這樣,1ms的寬度均勻的對應電調的從最低到最高轉速。
至此,一個用stm32和mpu6050搭建的飛控系統就算實現了。