劉 偉, 楊延西
(西安理工大學 自動化與信息工程學院, 陜西 西安 710048)
艦載直升機的研制和使用可以追溯到20世紀60年代,隨著信息、新材料、航空推進等高新技術的進一步發展,艦載直升機呈現加速發展的趨勢,功能將多樣化。在民用方面,無人直升機在大氣監測、交通監控、資源勘探、電力線路檢測、森林防火、物流運輸等方面具有廣泛的應用前景。
直升機著降過程是事故高發階段,尤其是當著降平臺是移動平臺的情況下。對于艦載機,由于海浪影響,船體有橫搖、縱搖、起伏和平移等運動,對于車載無人機,在汽車運行過程中降落會受到車體顛簸的影響,且都會受到橫風的影響,從而導致著降失敗。因此在著降的最后階段,需要對直升機與著降平面之間實時精確定位。
衛星引導尤其是差分GPS技術[1],具有成本低、精度高,使用簡單、全天候的優點,被用于著陸著艦。但由于GPS信號容易受到干擾,在軍事領域有安全隱患,且GPS直接給出的是絕對位置,而不是相對位姿。儀表著陸系統和雷達引導著陸系統發展較早,且已經比較成熟,主要針對固定翼飛機著陸。光電引導系統不受電磁干擾,可在無線電靜默時工作,光電引導方式有激光、紅外、電視和紫外引導方式[2]。目前視覺技術已經廣泛應用于生產生活的各個方面,視覺傳感器成本低、輕便、功耗低、測量精度高,且不受電磁干擾。國內外很多研究機構和學者采用視覺引導技術,并設計了各種不同形狀的著降標志[3]。早在1992年,Salt[4]提出ASIST系統,在直升機上安裝合作標志點,用相機從第三方位置觀測,從而計算直升機的位姿。該系統已經應用于軍事領域。這種方法需要第三方相機,因此占用空間較大。周城宇等[5]用四個紅外燈作為著降標志,并在機載攝像頭上加裝窄帶濾光鏡,能夠提高定位標識的識別可靠性。齊詠生,張偉和吳鵬飛等[6-8]采用機載攝像頭拍攝“H”標志來確定自身位姿。孫建新等[9]采用“F”形著陸定位標志來消除著降標志的對稱性。吳益超等[10]設計了圓形帶方向的著降標志圖案,用于直升機著艦定位。徐滔宏等[11]采用黑色塊作為著降標志,并采用OpenMV作為視覺計算平臺。張咪等[12]采用二維編碼嵌套的方式,能夠實現在較大尺度變化下的精確定位。其多泊位停機坪可以為無人機提供多個定位標識,使無人機在停機坪的多個位置都可以實現精確定位。
Vidal等[13]采用圓形著降標志引導四旋翼直升機著陸。Marut和Wang等[14-15]設計黑白格圖案作為著降標志。Grobler等[16]采用不同尺寸黑白圖嵌套作為定位標志來應對尺度變化。Nguyen等[17]在移動小車上放置多個黑白格圖案作為著降標志。當距離較遠圖像不清晰時,Truong等[18]采用深度學習算法進行定位標志識別。Kim等[19]設計了一種半稠密優化方法來優化位姿參數,來應對圖像模糊造成位姿估計誤差問題。
直升機著陸的最后階段,由于陸地是固定的,因此通常是垂直降落下來,而不需要實時精確定位。但對于移動平臺著降,或者在具有很強橫風影響的情況下,需要能實時精確獲取無人直升機的位置和姿態,而不能直接降落下來。上述定位方法中,采用合作標志,在距離較近時,容易看不全標志而導致定位失敗,從而不得不復飛。張咪和Nguyen等[12,17]的多停機坪圖案能夠提供多個著降點,可以在一塊區域放置多個互不相同的著降標志,從而實現偏離以后的定位,但在水平方向定位并不連續。在無人機上放置合作標志[4]的方法,用第三方相機進行定位,則可以連續獲取無人機的位姿,但用第三方相機需要占用較大空間。
為解決上述問題,本文設計了一種基于唯一性編碼的定位標識,并針對該標識提出一種快速識別和定位算法,能夠實時連續給出無人機位姿。與現有視覺定位系統相比,本文方法能夠在無人機著降的最后階段,在整個著降標志范圍內連續給出無人機的位姿,有效防止由于飛行高度過低及偏離著降中心,導致無法看到完整的著降標志,進而導致無法定位的情況,從而有效降低著降失敗復飛風險。
系統總體流程見圖1。首先通過機載攝像頭垂直向下拍攝圖像,并結合飛行高度檢測著降標志,即著降標志在圖像中的像素大小由飛行高度決定。如果檢測到完整的標志,則直接根據著降標志四個角點在著降平面上的位置來解算相機的位姿。如果無法檢測到完整的標志,并且飛行高度較低,則對圖像進行邊緣提取,直線提取等算法來提取編碼區域,并提取編碼區域對應的像素灰度值,然后根據像素灰度值提取該區域對應的編碼。將提取的編碼與著降標志設計的編碼進行對照,找出該編碼在整個著降圖案中的位置,就得到著降編碼的四個角點在整個著降平面上的位置。然后用PnP算法解算相機位置和姿態。該著降標志的整體和局部都能提供著降定位信息,并且其中的黑白方塊每移動一格,就組成一個全新編碼,因此能夠對無人機進行連續定位。

圖1 系統工作流程圖Fig.1 System work flow chart
用于直升機著降的相機,其視場角不能設計過大,否則有效作用距離太近。由于降落過程中,視場尺度變化很大,當距離較近時,視場范圍很小。對于移動平臺著降系統,由于受到運動擾動、橫風等因素的影響,著降的最后階段,很容易偏離預定著降軌跡,從而丟失定位,不得不復飛。要解決上述問題,就需要在著降的最后階段,在較大范圍內實現無人機實時定位。如果不采用機載合作標志第三方觀測的方式,就需要設計新的合作標志。本文基于全局唯一性編碼[20]設計了新的著降標志,唯一性編碼計算方法如下所述。
取正方形矩陣,尺寸為b2,矩陣中每個元素取值為y(0 (1) 則其對應的Y進制數的十進制值為: (2) 全局唯一性編碼圖隨機生長步驟為如下。 1) 隨機生成b×b二維矩陣,元素取值[0,Y]。 2) 對前b行,向右生長一列,與前b-1列組成新的b2大小的二維矩陣,取值可能性有Yb個,遍歷所有可能取值,隨機選擇一組數值,使其B值是未使用過的。從b+1行開始,向右下角生長一個元素,與前b-1行及前b-1列組成新的b2大小的二維矩陣,取值可能性有Y個,遍歷所有可能取值,隨機選擇一個數值,使得B值是未使用過的。 3) 對前b列,向下生長一行,與前b-1行組成新的b2大小的二維矩陣,取值可能性有Yb個,遍歷所有可能取值,隨機選擇一組數值,使其B值是未使用過的。從b+1列開始,向右下角生長一個元素,與前b-1行及前b-1列組成新的b2大小的二維矩陣,取值可能性有Y個,遍歷所有可能取值,隨機選擇一個數值,使得B值是未使用過的。 4) 向中間生長一個元素,與前b-1行及前b-1列組成新的b2大小的二維矩陣,取值可能性有Y個,遍歷所有可能取值,隨機選擇一個數值,使其B的值是未使用過的。 5) 回到第2步,循環執行2-3-4步,直到無法找到未使用過的B值。 6) 重復執行1~5步,直到生成所要求的矩陣。 取b=5,Y=2,所得二維編碼圖案見圖2。 圖2 40×40黑白二維碼,其中任意5×5的二維碼取值全局唯一,總共有1 296個不同的編碼Fig.2 Of the 40 × 40 black and white two-dimensional codes, any 5 × 5 two-dimensional codes are globally unique, and there are 1 296 different codes in total 首先根據飛機的GPS位置確定飛機是否到達指定著降區域,如果到達著降區域,就啟動視覺相對定位算法。當無人機飛行高度較高,能夠觀測到完整的著降標志時,只需檢測整個著降標志即可完成定位,與本文前言中提到的視覺定位方法類似。而當飛行高度較低,無法觀測到完整的著降標志時,就需要通過檢測本文設計的全局唯一性編碼圖案中的編碼來實現相對定位,具體過程如下所述。 首先采用Canny算子對圖像進行邊緣檢測,然后對檢出的邊緣進行膨脹處理,對膨脹后的邊緣進行Hough變換,獲取直線段。對于間距和夾角小于一定閾值的直線進行合并,用其坐標均值作為新的合并后的直線。對于合并后的直線,根據其斜率將其劃分為縱向和橫向兩組直線。如果同組直線相交,則將相交直線中與旁邊直線斜率差異較大的直線去掉。如果同組直線不相交,但相鄰直線間距遠小于其他直線間距時,去掉與其他直線間距差異較大的直線。如果相鄰直線間距是其他直線間距的倍數,則在該相鄰直線間等間距加入新的直線。 如果一組直線有奇數條,則選取中間直線,如果有偶數條,則選取中間兩條直線。提取橫向和縱向直線中間的一條或兩條直線的交點,計算這些交點的幾何中心點,并以該點為中心,上下左右各取三根直線作為編碼選擇區域。如果該中心點在線上,則在其一側少取一根直線。計算最外層四條直線四個交點的圖像坐標pt4,并計算這六條線內5×5個格子的中心點坐標,及其對應圖像的灰度值。根據這5×5個格子的圖像灰度值,計算其編碼B值。 根據編碼B值及圖2所示的編碼圖確定pt4在著降標志上的坐標,并根據著降標志的世界坐標得到該編碼四個交點的世界坐標pt4w。 利用四個交點在圖像中的坐標pt4及其在世界坐標系下的坐標pt4w,計算相機在世界坐標系下的位姿,見圖3。該問題是PnP問題,在世界坐標系下平面四點位置已知,在圖像坐標系下對應的四點位置也已知,就可以解算出相機的位姿[21]。由于相機和無人機固連,即可得出無人機在世界坐標系下的位姿。 圖3 PnP算法位姿計算示意圖Fig.3 PnP algorithm pose calculation diagram 試驗所采用的無人機為普通四旋翼,見圖4(a),圖4(b)為無人機著降過程中懸停于著降標志上方。圖5為四旋翼著降過程中拍攝的圖像采樣,圖像分辨率為1 080 P。 圖4 無人機及著降過程Fig.4 UAV and the landing process. 圖5 無人機著降過程中拍攝的圖像采樣Fig.5 Image sampling during UAV landing 著降標志為圖2所示的二維碼,將該編碼打印成80 cm×80 cm的圖案,其中每個黑白塊大小為2 cm×2 cm。將其平放在地上,并建立世界坐標系,無人機以該二維碼為著陸標志,垂直向下拍攝圖像,通過視覺算法進行相對定位,從而引導無人機著陸。 實驗所用相機在180 cm高度可以恰好看見整個二維碼,22 cm時恰好可以看見一個5×5的方塊。因此,當飛行高度高于180 cm且可以看到完整圖案時,就可以采用整幅圖作為著降定位圖案。而當飛行高度低于22 cm時,由于無法看到最小編碼圖案,將無法定位。而當飛行高度在22~180 cm之間時,在80 cm×80 cm范圍內,就可以依賴局部編碼實現精確定位。當飛行高度高于180 cm時,如果由于偏離中心而無法看全整個圖案,也可以通過觀察到的著降標志的局部進行定位。 編碼提取過程見圖6,首先采用Canny對無人機觀測到的圖像進行邊緣提取,見圖6(a)。然后對邊緣進行膨脹處理,并進行Hough變換,得到由邊緣組成的直線段,見圖6(b)。再對Hough變換生成的線段進行合并,并提取中間直線圍成的5×5的黑白格,提取這些黑白格中心的灰度值作為編碼,見圖6(c),圖中紅線是該編碼塊外圍直線,小圈是各黑白格的中心點。根據該編碼值就可以確定該編碼在世界坐標系下的位置。最后采用PnP算法,根據編碼區四個角點的圖像位置和在世界坐標系下的位置,解算出相機在世界坐標系下的位姿。 圖6 編碼提取過程Fig.6 Code extraction process 圖7為著降過程中位置編碼檢測識別的圖像采樣,隨著距離的靠近,黑白格逐漸變大,當距離小于22 cm時,將無法獲取5×5個黑白格,定位結束。無人直升機著降過程位姿采樣見圖8和圖9。該圖為無人機從120 cm降落到22 cm過程的位姿采樣。在X-Y平面上的彩色圓點表示選取的編碼塊的四個角點。上面標有數字的椎體符號表示無人機在著降過程中的位置和姿態。數字表示相機的位姿順序,數字不連續表示該幀圖像未能計算出相機位姿。主要原因是實驗用的無人機拍攝效果較差,拍攝圖像因為無人機大幅抖動或快速移動,圖像發生嚴重模糊。 圖7 位置編碼檢測與識別Fig.7 Location coding detection and recognition 圖8 無人機著降過程位姿采樣Fig.8 Pose sampling of UAV landing process 圖9 無人機著降過程位置變化曲線Fig.9 Position change curve of UAV during landing 本實驗中由于實驗條件受限,無法實時獲取無人機的真實位姿,但最終著降位置的計算值和實際值誤差在5 mm以下。在整個著降過程中,引起定位誤差的因素包括如下三點。 1) 圖像模糊造成邊緣不精確,從而導致直線交點位置偏差。應對該問題可以采用全局快門攝像頭,并增加減震。 2) 相機分辨率及畸變引起的誤差,該誤差通常較小。 3) 相機坐標系與無人直升機機體坐標系之間的轉換誤差,坐標轉換通過安裝標定計算得到。 本文針對當著降平臺發生移動或無人直升機受橫風干擾,導致直升機著降定位失敗的問題,設計了一種基于唯一性編碼技術生成的二維碼圖案作為著降標志,該標志既可以整體作為著降標志,同時其內部任意相鄰的5×5的黑白方塊組成的圖案也可以單獨作為著降標志。 基于該標志給出了快速識別和定位算法,從而實現在著降標志范圍內對無人機進行連續定位,降低因距離太近或太偏而無法觀測到著降標志,從而定位失敗,進而導致著降失敗的風險。 試驗結果表明,相機只要能夠觀測到著降圖案的任意5×5個小方格,就能夠精確定位,并使最終著降位置誤差小于1 cm。
3 無人機著降定位算法
3.1 邊緣直線檢測
3.2 提取圖像編碼
3.3 獲取坐標
3.4 位姿解算

4 實驗測試






5 結 論