薛淵,王志勝,徐滔宏
(南京航空航天大學 自動化學院,江蘇 南京 211100)
四旋翼無人機憑借其垂直起降、機動性好、可懸停等優點,現已被用于許多行業中。四旋翼在飛行過程中利用慣性傳感器(inertial measurement unit, IMU)采集姿態信息,通過反饋調節姿態使其達到預期位置。但在實際飛行中僅依靠IMU無法精確估計無人機姿態,通常采用其他傳感器對IMU數據進行修正,使其估計值更接近真實值。在室外,可利用全球定位系統(global position system, GPS)進行輔助定位;在室內或者GPS受干擾的地方,則需要用其他傳感器進行輔助定位。相比于GPS,目前四旋翼室內定位還沒有一套成熟的解決方案[1]。
目前適用于四旋翼無人機室內定位的解決方案有UWB無線電通信、激光雷達、光學運動捕捉系統和視覺等。尤洪祥將光流與UWB技術結合,提高了定位精度[2]。美國麻省理工的ANDREW Gregory等人使用慣性傳感器、激光雷達、攝像頭和超聲波傳感器搭建了室內四旋翼自主導航平臺,并在2010年無人機大賽中,利用該平臺實現指定的自主飛行任務[3-4]。2010年,美國賓夕法尼亞大學的教授利用三維紅外運動捕捉系統實現四旋翼定位飛行[5],由于其精度高且穩定性好,受到國內外許多研究者的廣泛關注。光流法定位屬于視覺定位,可用于輔助四旋翼懸停。光流指的是空間運動目標在成像面上像素運動的瞬時速度,它表示圖像亮度變化與場景中目標運動的關系,根據像素亮度時域變化和相關性確定各個像素的運動信息[6],實現了光流位置估計,通過對光流值積分估計其位置信息。文獻[7-8]中D. Honegger等人利用光流法對速度實現實時估計,并在FPGA硬件平臺上進行實時光流計算。目前光流法被廣泛應用于四旋翼定位與避障中,其中LK光流法為常用算法。LK光流法是LUCAS和KANADE在1981年論文中提出的,屬于稀疏光流的經典算法[9]。雖然光流在四旋翼定位中被廣泛使用,但其精度并不高,而且隨著時間的積累,其誤差會越來越大。
本文針對傳統LK光流法在四旋翼定位中精度不高的缺點,采用了一種改進的LK光流法,利用該算法得出的速度信息來修正IMU的姿態數據,最后通過實際飛行實驗驗證了改進后算法的可行性和穩定性。
假設第t幀圖像存在點(x1,y1),且其周圍n×n領域內所有點的運動狀態相同,在t+1幀上存在與(x1,y1)亮度相同的點(x2,y2),根據光流約束條件和上述假設條件可建立方程組如下:
(1)
將式(1)簡化成如下形式,即:
Av=b
(2)
將式(2)兩邊同乘以AT,得到如下形式:
ATAv=ATb
(3)
利用最小二乘法求解上述方程,假設矩陣ATA可逆,將等式(3)兩邊同乘以(ATA)-1,可以得到v的解為:
v=(ATA)-1ATb
(4)
式(4)即為LK光流基本模型。在四旋翼定位實際應用中,因為其存在一定局限性,造成計算精度不高,所以需要對其進行改進和優化。
角點檢測(corner detection)是檢測圖像特征的一種方法,主要用于對圖像關鍵點的檢測,角點檢測主要利用圖像灰度信息,比如兩條線之間的交點等。Shi-Tomasi角點檢測是Harris方法的改進,其選取滿足條件的窗口提取圖像特征點,設點(x,y)的灰度值為I(x,y),以該點為中心點建立窗口W,將該窗口平移Δx和Δy,得到如下公式:
(5)
將式(5)中I(x+Δx,y+Δy)進行一階泰勒級數展開,然后將展開式轉化為矩陣的形式,表示為如下形式:
(6)
式中:Ix、Iy表示圖像在x,y方向上的偏導數;T表示一個2×2的海森矩陣;W表示窗口大小。Shi-Tomasi角點檢測算法需要求解T矩陣,將行列式特征值中最小值與預先設定閾值進行比較,如果大于設定閾值,則表明該點可做為特征點。
在利用LK光流法對特征點進行跟蹤時需滿足小位移約束條件。因為四旋翼在飛行時會產生位置偏差過大的問題,所以需建立高斯金字塔對LK光流法進行改進[9]。光流金字塔是對大位移運動縮放幾倍之后,使其近似轉化為小位移運動,從而滿足約束條件。光流金字塔在其最上層(低分辨率圖像)利用LK光流法求出圖像該層光流值,由金字塔自上而下對光流進行逐步細化,在細化過程中不斷對上層結果進行修正,得到更為精確的值,最后得到相應光流值。
光流金字塔通過計算圖像變換矩陣以及光流值,將該值作為初始量傳遞到下一層。下一層圖像計算得到新的變換矩陣和光流值,以此類推向下傳遞,直到傳到最后一層,即原始圖像層,最后計算得到最終的變換矩陣和光流值。具體流程如圖1所示。

圖1 金字塔光流計算過程
1) FB誤差分析
引入FB誤差有利于提高特征點跟蹤的精確度。如圖2所示,利用LK算法對圖像t時刻特征點points_prev進行跟蹤,可得t+1幀該點位置points_tracked,同樣也可通過t+1幀中點point_tracked反過來跟蹤t幀的位置points_prev_eva。理論來說,points_prev和points_prev_eva兩個位置應該重合,但是由于光流計算存在誤差,得到結果會存在一定的偏差,這個偏差即為FB誤差。圖2中doffset_prev和doffset_back分別表示前向和反向估計的偏移量。

圖2 FB誤差示意圖
2) FB誤差補償方法


圖3 偏移量構造

(7)
(8)
本文采用四旋翼硬件平臺進行飛行實驗,圖4為實驗平臺。該平臺為自主設計的四旋翼無人機,其具有足夠的保護措施,而且結構強度高并易于維修。

圖4 無人機實驗平臺
表1為實驗平臺具體性能參數。

表1 無人機實驗平臺重要參數
圖5為光流傳感器,實驗時將其安裝在四旋翼底部且平行于地面。傳感器通過攝像頭和超聲波模塊采集數據,然后將采集的數據傳入STM32F407處理器中進行光流計算。

圖5 光流傳感器
本小節根據實際飛行效果驗證算法可行性和穩定性。實驗對兩組數據進行了分析,第一組為光流傳感器采集的x、y方向上的光流值,第二組為運動捕捉系統采集四旋翼懸停過程中姿態和位置信息。
圖6為四旋翼利用傳統LK光流法進行室內定點飛行時x、y方向的光流數據,圖7為改進后LK光流法進行室內飛行時x、y方向光流數據。從圖中可以看出,改進的LK光流法相比于傳統LK光流法,其光流值較密集,而傳統LK光流法輸出光流值稀疏,反映了改進的LK算法在精度上要優于傳統LK光流法。

圖6 傳統光流法懸停光流效果圖

圖7 改進后算法的光流效果圖

圖8 無人機懸停時俯仰角信息
圖8表示采用改進的LK光流法定點飛行時俯仰角變化情況,從圖中可以看出飛機俯仰角誤差在3°~4°之間,其定點懸停效果良好。
圖9反映四旋翼懸停時位置變化。根據圖9(a)中三維運動軌跡可以看出四旋翼在飛行高度達到1m時,可以穩定懸停。圖9(b)反映了xy和xz的位置變化,可以看出懸停時xy方向的誤差在±0.5m范圍之內,高度z的誤差在±0.1m之間,其懸停精度大約為半徑40cm的圓形。

圖9 無人機懸停時位置信息
本文針對傳統LK光流法在四旋翼懸停時存在精度不高的缺點,采用了一種改進的LK光流法。該方法采用了Shi-Tomasi角點檢測算法和雙線性差值法提高特征點檢測的精確度。在進行光流計算時,通過建立光流金字塔解決四旋翼運動產生的大位移問題,而后對圖像FB誤差分析和補償,提高光流計算的精確度。最后通過實際飛行驗證了改進后的LK算法相較于傳統的LK光流法精確度更高且可以實現穩定飛行。