這無人機真是夠難學的,我就簡單分析試著了解一下就用了一天半的時間,同樣是從工作原理,系統(tǒng)結(jié)構(gòu),程序的設(shè)計思想,具體的程序設(shè)計思路四個方面試圖了解一下。首先說明一下,只是我的理解,和樓主的代碼實現(xiàn)流程是不一樣的。
飛行原理:轉(zhuǎn)速差會推動其向一個方向飛行,有四種飛行方式:上下飛行(垂直運動,如懸停狀態(tài)時,4個電機同時提高轉(zhuǎn)速,就會升高),前后飛行(俯仰運動,如后方電機轉(zhuǎn)速大于前方,就會往前飛),左右飛行(滾轉(zhuǎn)運動,如左側(cè)電機轉(zhuǎn)速大于右側(cè),就會往右飛),左右轉(zhuǎn)向(偏航運動,如逆時針轉(zhuǎn)動的M1,M3轉(zhuǎn)速大于順時針轉(zhuǎn)動的M2,M4,就會右轉(zhuǎn)向)。
四軸飛行為了抵消螺旋槳的自旋,相隔的漿旋轉(zhuǎn)方向是不一樣的,適合順時針轉(zhuǎn)的叫正槳,適合逆時針轉(zhuǎn)的是反槳,正反槳的風都是往下吹的。
有兩種飛行姿態(tài),+型和X型,區(qū)別是:①電機擺放角度不同(將+型四個電機順時針旋轉(zhuǎn)45°就是X型),②“前后/左右”飛行時需控制的電機數(shù)量不同(+型前后左右每個方位相當于只有一個電機,X型前后左右每個方位相當于都是兩個電機)X型對于飛行姿態(tài)控制更好。
可能表述不夠清楚,可以結(jié)合下面這篇文章理解
https://blog.csdn.net/qq_27270029/article/details/79877022
沒玩過四旋翼,看看這個文章多少能理解些概念
https://blog.csdn.net/msdnwolaile/article/details/51525245
系統(tǒng)結(jié)構(gòu):遙控器,飛行器。
遙控器:采集(按鍵,油門桿,方向桿的動作)控制(數(shù)據(jù)傳輸 和OLED顯示)
飛行器:采集(MPU5060加速度,陀螺儀,HMC磁力定方位(飛行姿態(tài)感測),超聲波定高,MS5611氣壓定高(兩者互補),GPS定位點(返回點定位),NRF24L01遙控數(shù)據(jù)通信)處理(PID算法,姿態(tài)解算,卡爾曼濾波算法對數(shù)據(jù)整合)控制(PID控制算法,控制電調(diào)來控制電機轉(zhuǎn)速)
https://v.youku.com/v_show/id_XM ... t.13141534.2_1.d1_2
程序設(shè)計思想:
從結(jié)果往過程去分析。使用角度:當按順序打開遙控器和飛行器的電源后,先進行對頻(NRF24L01的2.4GHz數(shù)據(jù)通信(遙控器的指令,飛行器的數(shù)據(jù)),遙控和飛行器的配對)然后地磁校準(定方位,為了前后左右飛行),再GPS收星(定位點,讓飛行器自動返航),再解鎖電機,緩?fù)朴烷T(否則好像可能會炸機),使它起飛,然后就是各種操作了。
在飛行過程中,需要融合三軸加速度計和三軸陀螺儀(MPU5060)及磁力計(HMC5883L)的數(shù)據(jù)進行姿態(tài)解算(此時會用到卡爾曼濾波算法),陀螺儀知道“我們轉(zhuǎn)了個身”,加速計知道“我們又向前走了幾米”,而磁力計知道“我們是向西方向”的。 然后通過PID控制算法(PID飛行控制算法能有效對飛行器的姿態(tài)和位置跟蹤進行有效控制),PWM波輸出,通過‘電調(diào)(電機驅(qū)動模塊)’來控制電機轉(zhuǎn)速。
高度在3米內(nèi),使用超聲波(HCSR04)測高,否則用氣壓計(MS5611)測高,OLED在遙控器上,可能會顯示飛行高度。
具體程序設(shè)計思路:
首先,關(guān)于NRF24L01, OLED,BEEP都沒有用到(通過查看初始化函數(shù)),也就表示沒有遙控器的功能,GPS沒有用到,說明就是沒有返航功能。沒有遙控器控制,就是能飛起來,然后應(yīng)該對飛行器的飛行姿態(tài)來說好控制了很多。功能就是圍繞姿態(tài)解算和PID飛行控制為核心的,飛個幾十秒后落下。關(guān)于樓主的代碼,沒有功能說明注釋,沒有實現(xiàn)步驟注釋,沒有使用單片機某些資源的作用注釋,總的來說,注釋太少,再加上本人水平不高,看得一頭霧水。
關(guān)于為什么樓主介紹的和代碼不一致,我的理解是這樣的:樓主完成此項目用時較長,且沒有使用版本管理,每過一段時間就保存一個版本,最后都不知道哪個是最新版本,每個版本都實現(xiàn)了哪些細節(jié)了,因為疫情,再次接觸的時候都過了快兩個月了,雖然自己寫的但都快忘差不多了,不過好在主要實現(xiàn)的函數(shù)都在main里,查看main文件修改日期確定哪個是最新版本,再加上注釋還算詳盡,補救了回來。
兩點注釋:
卡爾曼濾波:需要對陀螺儀和加速度傳感器所測得的數(shù)據(jù)進行綜合和校正,而均值濾波,很難滿足精度和實時性上的要求,通過卡爾曼濾波將加速度傳感器和陀螺儀的數(shù)據(jù)進行融合,在計算實時姿態(tài)時很好地抑制了噪聲的干擾作用,以提高測量精度。
PID飛行控制算法:對四旋翼的控制包括姿態(tài)控制(內(nèi)環(huán)控制)和位置控制(外環(huán)控制),外環(huán)控制,解算出為了到達預(yù)定的位置期望的姿態(tài)角,該期望的姿態(tài)角作為內(nèi)環(huán)控制器的輸入。PID飛行控制算法能有效對飛行器的姿態(tài)和位置跟蹤進行有效控制。
|