蘆展博,童 謙
(河南科技大學(xué)信息工程學(xué)院,河南 洛陽 471000)
四軸飛行器由機(jī)身與分布在四角的螺旋槳組成,通過電機(jī)驅(qū)動,根據(jù)四個(gè)電機(jī)輸出功率不同來控制各個(gè)機(jī)翼的升力大小,進(jìn)而調(diào)整飛行方向。由于其體積小,飛行高度與速度較低,飛行狀態(tài)平穩(wěn),靈活等特點(diǎn),在實(shí)際生活中,四軸飛行器常被應(yīng)用在農(nóng)林偵測,電力巡航,火災(zāi)現(xiàn)場探明險(xiǎn)情或者高空搜救中;而在大多數(shù)四軸飛行器的實(shí)際應(yīng)用中,其最具有標(biāo)志性的特點(diǎn)就是無人方案,自主性。四軸飛行器的應(yīng)用不斷擴(kuò)展,對其具備的自主性要求也越來越高。其中,解決四軸飛行器自動返航以及它的精準(zhǔn)性和穩(wěn)定性就變得極為重要。
四軸飛行器可以實(shí)現(xiàn)前后運(yùn)動,垂直運(yùn)動,側(cè)向運(yùn)動和偏航運(yùn)動四種運(yùn)動。四軸飛行器的機(jī)身呈“X”型,四個(gè)電機(jī)分布在四個(gè)角上,為了抵消螺旋槳的自旋,需保證對角的槳轉(zhuǎn)向一致,相隔的槳轉(zhuǎn)向相反,所以需要正反槳。
四軸飛行器通過調(diào)節(jié)四個(gè)電機(jī)轉(zhuǎn)速來改變旋翼轉(zhuǎn)速,實(shí)現(xiàn)升力的變化,從而控制飛行器的姿態(tài)和位置[1]。當(dāng)電機(jī)產(chǎn)生的升力大于機(jī)身自身的重力時(shí),飛行器上升;當(dāng)減小電機(jī)輸出功率,產(chǎn)生的升力小于機(jī)身重力時(shí),飛行器下降;當(dāng)提升M1與M2的輸出功率,飛行器向前運(yùn)動,反之向后運(yùn)動;當(dāng)提升M2和M3的輸出功率,飛行器向右運(yùn)動,反之向左運(yùn)動;當(dāng)提升M1和M3的輸出功率,飛行器向與M1和M3轉(zhuǎn)向相反的方向偏航,反之向與其相同的方向偏航。
該系統(tǒng)由四軸飛行器,地面落點(diǎn)坐標(biāo),PC上位機(jī),LoRa通信技術(shù)組成。四軸飛行器采用一節(jié)600mAh的鋰離子電池作為電源,采用低壓差的LDO轉(zhuǎn)換成3.3 V的電壓,主控芯片接受MPU6050傳來的數(shù)據(jù)進(jìn)行姿態(tài)調(diào)整,保證飛行的穩(wěn)定性;通過高精度GPS獲取實(shí)時(shí)坐標(biāo)數(shù)據(jù),通過LoRa通信與PC上位機(jī)進(jìn)行數(shù)據(jù)傳輸,并將數(shù)據(jù)顯示在PC端的實(shí)時(shí)監(jiān)控軟件上,以此實(shí)現(xiàn)特定情況下對四軸飛行器的及時(shí)操控。四軸飛行器接收到PC上位機(jī)發(fā)送的指令后,自動向落點(diǎn)坐標(biāo)飛行;由于GPS存在一定的誤差,當(dāng)飛行到指定坐標(biāo)后,利用機(jī)身上掛載的攝像識別模塊對落點(diǎn)標(biāo)志物進(jìn)行精確識別并實(shí)現(xiàn)降落。以此來實(shí)現(xiàn)飛行器的自動返航。在定位落點(diǎn)方面與GPS相比,攝像識別能做到更加精確的定位,因此采用GPS和攝像識別雙模塊可以將誤差更進(jìn)一步地縮小。
而無人機(jī)降落和攝像識別模塊對無人機(jī)高度的精準(zhǔn)性和大小有一定要求,采用超聲波傳感器來輔助氣壓傳感器獲取無人機(jī)高度。各個(gè)模塊協(xié)作工作,實(shí)現(xiàn)四軸無人機(jī)的自主精準(zhǔn)返航功能。具體框架圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
想要完成飛行器的自主返航,在這里分兩步來實(shí)現(xiàn):首先根據(jù)GPS獲取的位置信息——大致飛行至落點(diǎn)區(qū)域;其次再由攝像識別模塊去識別落點(diǎn)標(biāo)志物完成降落。這個(gè)過程需要各個(gè)傳感器的數(shù)據(jù)匯聚與主控模塊的處理,在這里,我們選用掛載在IIC總線上的氣壓計(jì),加速度計(jì)和MPU6050來獲取飛行器的體態(tài)數(shù)據(jù),通過PID算法進(jìn)行姿態(tài)調(diào)整[2];采用GPS定位模塊通過串口獲取精確的定位;最后通過飛行器上掛載的攝像識別模塊來對落點(diǎn)進(jìn)行圖像識別。具體框架如圖2所示。
圖2 系統(tǒng)功能模塊圖
與51單片機(jī)相比STM32外圍接口豐富,程序大多模塊化[3],采用哈弗結(jié)構(gòu),可以提供更高的運(yùn)算速度??紤]到性能需求、資金預(yù)算,在這里我們選用STM32F103C8T6作為主控芯片。STM32F103C8T6是ST在2007年發(fā)布的一款基于COREX-M3內(nèi)核的芯片,CPU頻率高達(dá)72 MHz,擁有128 k字節(jié)的內(nèi)置閃存存儲器,20 k字節(jié)的內(nèi)置SRAM[4]。與其他系列的芯片相比,STM32F103C8T6生產(chǎn)更早,學(xué)習(xí)成本比較低,網(wǎng)上有大量的資料供初學(xué)者學(xué)習(xí)使用。
要實(shí)現(xiàn)飛行器的自動返航,離不開高精度位置定位信息的支持,通過對不斷獲取的位置信息進(jìn)行處理來調(diào)節(jié)飛行器的飛行方向。這里我們選用野火生產(chǎn)的BH-ATGM332D定位模塊,BH-ATGM332D是野火設(shè)計(jì)的高性能、低功耗GPS、北斗雙模定位模塊。它采用中科微電子公司的ATGM332D-5N-31模組方案,可以通過串口向單片機(jī)系統(tǒng)和電腦輸出GPS及北斗定位信息[5],使用簡單方便,通過串口獲取定位數(shù)據(jù)。
本方案無人機(jī)返航的第二步是無人機(jī)下降,調(diào)整高度以便于攝像頭能夠在適當(dāng)?shù)木嚯x內(nèi)識別到放置在無人機(jī)降落點(diǎn)的特殊標(biāo)簽[6]。這里我們選擇采用HC-SR04超聲波傳感器模塊,雖然也有很多其他類似傳感器可以檢測物體的高度,但是超聲波傳感器檢測比較迅速、方便并且易于實(shí)時(shí)控制,在測量精度上能比肩工業(yè)實(shí)用要求的標(biāo)準(zhǔn),在無人機(jī)降落地面探測這一方面比其他比如氣壓計(jì)更加精準(zhǔn)和穩(wěn)定[7],方案更加可靠。
為了實(shí)現(xiàn)無人機(jī)的精準(zhǔn)降落,我們決定使用視覺定位的方案,采用AprilTag機(jī)器視覺來獲取無人機(jī)相對于降落點(diǎn)的精準(zhǔn)位置。而硬件方面,OpenMV是開源并且低成本的視覺模塊,以STM32F427為核心處理器,可以用C語言編寫視覺算法??赏ㄟ^UART,I2C,SPI和GPIO等來控制其他硬件設(shè)備,也可以被其他設(shè)備控制。用OpenMV視覺模塊來實(shí)現(xiàn)該算法具有可行性。
我們選擇HC-SR04來檢測無人機(jī)距離地面的距離,采用IO口TRIG觸發(fā)工作,該模塊自動發(fā)送8個(gè)40 kHz的方波并檢測返回信號,如果有返回信號,即從IO口的ECHO輸出一個(gè)高電平,而該高電平持續(xù)的時(shí)間正是超聲波從發(fā)出到返回的時(shí)間[8]如圖3所示。
圖3 HC-SR04距離檢測原理波形圖
聲波在這一過程中經(jīng)歷了發(fā)出和反射這兩步,兩次跨越了發(fā)射模塊于反射面之間。從ECHO引腳得到的時(shí)間為超聲波在實(shí)際間隔距離間經(jīng)歷的兩倍,則高電平持續(xù)的時(shí)間需要減半之后用于測試距離的計(jì)算。
T=Dis/v
.
Dis=T*v/2
.
其中:T為高電平持續(xù)時(shí)間,及ECHO輸出的數(shù)據(jù);Dis為傳感器與被測物距離;v為聲速。其中聲速為340 m/s,換做微秒級別則是0.034 cm/us。
則:Dis=T*0.034/2
.
通過改公式即可計(jì)算出傳感器與被測物之間的實(shí)際距離。
AprilTag是一個(gè)視覺基準(zhǔn)系統(tǒng),可用于相機(jī)校準(zhǔn)等二維定位相關(guān)操作。該系統(tǒng)主要步驟為自適應(yīng)的閾值分割,連通域?qū)ふ襱ag輪廓,進(jìn)行輪廓的直線擬合并查找四邊形,然后對四邊形進(jìn)行解碼識別,最后進(jìn)行坐標(biāo)變換,解析相機(jī)的姿態(tài)。
其中姿態(tài)解析是其最重要的步驟,是通過三維世界中的N個(gè)特征點(diǎn)與二維圖像中的N個(gè)點(diǎn),計(jì)算出映射關(guān)系的P-n-P問題。用到單應(yīng)性變換。在三維空間和二維圖像空間之間,圖像的坐標(biāo)可以通過單應(yīng)矩陣對應(yīng)。
如下轉(zhuǎn)換關(guān)系中,s代表深度信息;[uv1]T為圖像坐標(biāo)系;[XwYw1]T是當(dāng)Zw=0時(shí)的世界坐標(biāo)系。
經(jīng)過展開后可以得到:
由這三個(gè)等式變換消除s,得到如下:
到這一步,即可以根據(jù)二維圖像坐標(biāo)系上tag的四個(gè)角的坐標(biāo),求解該方程組,得到單應(yīng)矩陣。根據(jù)相機(jī)內(nèi)參和tag的尺寸可求得由世界坐標(biāo)系到相機(jī)坐標(biāo)系的旋轉(zhuǎn)矩陣R和平移矩陣T,進(jìn)而得到標(biāo)簽在相機(jī)坐標(biāo)下的位置。
TAG16H5的有效區(qū)域是4×4的方塊,TAG36H11由6×6的方塊組成,它的檢測距離比TAG16H5更遠(yuǎn),但是TAG16H5的錯(cuò)誤率比TAG36H11高很多,因?yàn)門AG36H11的校驗(yàn)信息多[9]。由于方塊數(shù)量更多,出錯(cuò)率更低,所以為了實(shí)現(xiàn)更加精準(zhǔn)的無人機(jī)返航降落,我們采用TAG36H11標(biāo)簽。根據(jù)AprilTag官網(wǎng)給出的tag生成方法,通過IDE生成如下tag圖片(截取id號為0、1、2、3的前四張)。如圖4所示。
圖4 TAG36H11標(biāo)記圖
將這些標(biāo)簽打印出來水平貼至無人機(jī)降落點(diǎn),即可供無人機(jī)的OpenMV識別。
要用OpenMV識別我們的tag,需要先對OpenMV模塊進(jìn)行算法編寫,將AprilTag算法寫入該模塊中。當(dāng)OpenMV視覺模塊識別到tag之后,會在串口中輸出6個(gè)變量,分別為:Tx、Ty、Tz三個(gè)在x、y、z軸上的空間位置變量和Rx、Ry、Rz三個(gè)旋轉(zhuǎn)量。這6個(gè)變量是tag相對于視覺模塊的三維空間相對位置信息。為了避免各個(gè)傳感器之間數(shù)據(jù)混亂,我們將該數(shù)據(jù)轉(zhuǎn)換為三維空間的絕對數(shù)據(jù)變量。在調(diào)試階段,實(shí)現(xiàn)測試好視覺模塊與tag之間的距離,再通過模塊串口輸出數(shù)據(jù)進(jìn)行計(jì)算:
轉(zhuǎn)換后:
Sw=Out*K
.
其中:K表示實(shí)際距離與傳感器相對距離的比值;Sw表示實(shí)際距離;Out代表傳感器輸出的數(shù)據(jù)(可以是x、y、z軸,也可以是通過三軸計(jì)算出來的直線方向距離),即實(shí)際距離就通過該公式計(jì)算出來了。
本文說明了一種基于圖像識別傳感器和GPS等多個(gè)傳感器融合實(shí)現(xiàn)四軸無人機(jī)精準(zhǔn)返航的方案。該方案采用STM32作為核心計(jì)算單元,具有高效的運(yùn)算能力和拓展性;使用OpenMV視覺模塊,將圖像識別應(yīng)用于無人機(jī),在無人機(jī)返航降落方面,彌補(bǔ)了衛(wèi)星定位具有一定誤差的缺點(diǎn),與GPS定位相結(jié)合,具有精準(zhǔn)性和穩(wěn)定性。四軸飛行器在飛行過程中,周圍的溫度、地形等環(huán)境都會對氣壓傳感器的數(shù)據(jù)獲取造成影響;而在低空降落時(shí),超聲波獲取高度數(shù)據(jù)更加精確,因此在對飛行器實(shí)現(xiàn)降落時(shí)采用了超聲波傳感器HC-SR04輔助降落而非采取氣壓計(jì),并且將無人機(jī)控制在適當(dāng)高度,解決了OpenMV硬件對圖像識別距離上的不足。綜上所述,該四軸無人機(jī)自動返航系統(tǒng)具有可行性。