劉 偉, 楊延西
(西安理工大學(xué) 自動(dòng)化與信息工程學(xué)院, 陜西 西安 710048)
艦載直升機(jī)的研制和使用可以追溯到20世紀(jì)60年代,隨著信息、新材料、航空推進(jìn)等高新技術(shù)的進(jìn)一步發(fā)展,艦載直升機(jī)呈現(xiàn)加速發(fā)展的趨勢,功能將多樣化。在民用方面,無人直升機(jī)在大氣監(jiān)測、交通監(jiān)控、資源勘探、電力線路檢測、森林防火、物流運(yùn)輸?shù)确矫婢哂袕V泛的應(yīng)用前景。
直升機(jī)著降過程是事故高發(fā)階段,尤其是當(dāng)著降平臺(tái)是移動(dòng)平臺(tái)的情況下。對(duì)于艦載機(jī),由于海浪影響,船體有橫搖、縱搖、起伏和平移等運(yùn)動(dòng),對(duì)于車載無人機(jī),在汽車運(yùn)行過程中降落會(huì)受到車體顛簸的影響,且都會(huì)受到橫風(fēng)的影響,從而導(dǎo)致著降失敗。因此在著降的最后階段,需要對(duì)直升機(jī)與著降平面之間實(shí)時(shí)精確定位。
衛(wèi)星引導(dǎo)尤其是差分GPS技術(shù)[1],具有成本低、精度高,使用簡單、全天候的優(yōu)點(diǎn),被用于著陸著艦。但由于GPS信號(hào)容易受到干擾,在軍事領(lǐng)域有安全隱患,且GPS直接給出的是絕對(duì)位置,而不是相對(duì)位姿。儀表著陸系統(tǒng)和雷達(dá)引導(dǎo)著陸系統(tǒng)發(fā)展較早,且已經(jīng)比較成熟,主要針對(duì)固定翼飛機(jī)著陸。光電引導(dǎo)系統(tǒng)不受電磁干擾,可在無線電靜默時(shí)工作,光電引導(dǎo)方式有激光、紅外、電視和紫外引導(dǎo)方式[2]。目前視覺技術(shù)已經(jīng)廣泛應(yīng)用于生產(chǎn)生活的各個(gè)方面,視覺傳感器成本低、輕便、功耗低、測量精度高,且不受電磁干擾。國內(nèi)外很多研究機(jī)構(gòu)和學(xué)者采用視覺引導(dǎo)技術(shù),并設(shè)計(jì)了各種不同形狀的著降標(biāo)志[3]。早在1992年,Salt[4]提出ASIST系統(tǒng),在直升機(jī)上安裝合作標(biāo)志點(diǎn),用相機(jī)從第三方位置觀測,從而計(jì)算直升機(jī)的位姿。該系統(tǒng)已經(jīng)應(yīng)用于軍事領(lǐng)域。這種方法需要第三方相機(jī),因此占用空間較大。周城宇等[5]用四個(gè)紅外燈作為著降標(biāo)志,并在機(jī)載攝像頭上加裝窄帶濾光鏡,能夠提高定位標(biāo)識(shí)的識(shí)別可靠性。齊詠生,張偉和吳鵬飛等[6-8]采用機(jī)載攝像頭拍攝“H”標(biāo)志來確定自身位姿。孫建新等[9]采用“F”形著陸定位標(biāo)志來消除著降標(biāo)志的對(duì)稱性。吳益超等[10]設(shè)計(jì)了圓形帶方向的著降標(biāo)志圖案,用于直升機(jī)著艦定位。徐滔宏等[11]采用黑色塊作為著降標(biāo)志,并采用OpenMV作為視覺計(jì)算平臺(tái)。張咪等[12]采用二維編碼嵌套的方式,能夠?qū)崿F(xiàn)在較大尺度變化下的精確定位。其多泊位停機(jī)坪可以為無人機(jī)提供多個(gè)定位標(biāo)識(shí),使無人機(jī)在停機(jī)坪的多個(gè)位置都可以實(shí)現(xiàn)精確定位。
Vidal等[13]采用圓形著降標(biāo)志引導(dǎo)四旋翼直升機(jī)著陸。Marut和Wang等[14-15]設(shè)計(jì)黑白格圖案作為著降標(biāo)志。Grobler等[16]采用不同尺寸黑白圖嵌套作為定位標(biāo)志來應(yīng)對(duì)尺度變化。Nguyen等[17]在移動(dòng)小車上放置多個(gè)黑白格圖案作為著降標(biāo)志。當(dāng)距離較遠(yuǎn)圖像不清晰時(shí),Truong等[18]采用深度學(xué)習(xí)算法進(jìn)行定位標(biāo)志識(shí)別。Kim等[19]設(shè)計(jì)了一種半稠密優(yōu)化方法來優(yōu)化位姿參數(shù),來應(yīng)對(duì)圖像模糊造成位姿估計(jì)誤差問題。
直升機(jī)著陸的最后階段,由于陸地是固定的,因此通常是垂直降落下來,而不需要實(shí)時(shí)精確定位。但對(duì)于移動(dòng)平臺(tái)著降,或者在具有很強(qiáng)橫風(fēng)影響的情況下,需要能實(shí)時(shí)精確獲取無人直升機(jī)的位置和姿態(tài),而不能直接降落下來。上述定位方法中,采用合作標(biāo)志,在距離較近時(shí),容易看不全標(biāo)志而導(dǎo)致定位失敗,從而不得不復(fù)飛。張咪和Nguyen等[12,17]的多停機(jī)坪圖案能夠提供多個(gè)著降點(diǎn),可以在一塊區(qū)域放置多個(gè)互不相同的著降標(biāo)志,從而實(shí)現(xiàn)偏離以后的定位,但在水平方向定位并不連續(xù)。在無人機(jī)上放置合作標(biāo)志[4]的方法,用第三方相機(jī)進(jìn)行定位,則可以連續(xù)獲取無人機(jī)的位姿,但用第三方相機(jī)需要占用較大空間。
為解決上述問題,本文設(shè)計(jì)了一種基于唯一性編碼的定位標(biāo)識(shí),并針對(duì)該標(biāo)識(shí)提出一種快速識(shí)別和定位算法,能夠?qū)崟r(shí)連續(xù)給出無人機(jī)位姿。與現(xiàn)有視覺定位系統(tǒng)相比,本文方法能夠在無人機(jī)著降的最后階段,在整個(gè)著降標(biāo)志范圍內(nèi)連續(xù)給出無人機(jī)的位姿,有效防止由于飛行高度過低及偏離著降中心,導(dǎo)致無法看到完整的著降標(biāo)志,進(jìn)而導(dǎo)致無法定位的情況,從而有效降低著降失敗復(fù)飛風(fēng)險(xiǎn)。
系統(tǒng)總體流程見圖1。首先通過機(jī)載攝像頭垂直向下拍攝圖像,并結(jié)合飛行高度檢測著降標(biāo)志,即著降標(biāo)志在圖像中的像素大小由飛行高度決定。如果檢測到完整的標(biāo)志,則直接根據(jù)著降標(biāo)志四個(gè)角點(diǎn)在著降平面上的位置來解算相機(jī)的位姿。如果無法檢測到完整的標(biāo)志,并且飛行高度較低,則對(duì)圖像進(jìn)行邊緣提取,直線提取等算法來提取編碼區(qū)域,并提取編碼區(qū)域?qū)?yīng)的像素灰度值,然后根據(jù)像素灰度值提取該區(qū)域?qū)?yīng)的編碼。將提取的編碼與著降標(biāo)志設(shè)計(jì)的編碼進(jìn)行對(duì)照,找出該編碼在整個(gè)著降圖案中的位置,就得到著降編碼的四個(gè)角點(diǎn)在整個(gè)著降平面上的位置。然后用PnP算法解算相機(jī)位置和姿態(tài)。該著降標(biāo)志的整體和局部都能提供著降定位信息,并且其中的黑白方塊每移動(dòng)一格,就組成一個(gè)全新編碼,因此能夠?qū)o人機(jī)進(jìn)行連續(xù)定位。
圖1 系統(tǒng)工作流程圖Fig.1 System work flow chart
用于直升機(jī)著降的相機(jī),其視場角不能設(shè)計(jì)過大,否則有效作用距離太近。由于降落過程中,視場尺度變化很大,當(dāng)距離較近時(shí),視場范圍很小。對(duì)于移動(dòng)平臺(tái)著降系統(tǒng),由于受到運(yùn)動(dòng)擾動(dòng)、橫風(fēng)等因素的影響,著降的最后階段,很容易偏離預(yù)定著降軌跡,從而丟失定位,不得不復(fù)飛。要解決上述問題,就需要在著降的最后階段,在較大范圍內(nèi)實(shí)現(xiàn)無人機(jī)實(shí)時(shí)定位。如果不采用機(jī)載合作標(biāo)志第三方觀測的方式,就需要設(shè)計(jì)新的合作標(biāo)志。本文基于全局唯一性編碼[20]設(shè)計(jì)了新的著降標(biāo)志,唯一性編碼計(jì)算方法如下所述。
取正方形矩陣,尺寸為b2,矩陣中每個(gè)元素取值為y(0 (1) 則其對(duì)應(yīng)的Y進(jìn)制數(shù)的十進(jìn)制值為: (2) 全局唯一性編碼圖隨機(jī)生長步驟為如下。 1) 隨機(jī)生成b×b二維矩陣,元素取值[0,Y]。 2) 對(duì)前b行,向右生長一列,與前b-1列組成新的b2大小的二維矩陣,取值可能性有Yb個(gè),遍歷所有可能取值,隨機(jī)選擇一組數(shù)值,使其B值是未使用過的。從b+1行開始,向右下角生長一個(gè)元素,與前b-1行及前b-1列組成新的b2大小的二維矩陣,取值可能性有Y個(gè),遍歷所有可能取值,隨機(jī)選擇一個(gè)數(shù)值,使得B值是未使用過的。 3) 對(duì)前b列,向下生長一行,與前b-1行組成新的b2大小的二維矩陣,取值可能性有Yb個(gè),遍歷所有可能取值,隨機(jī)選擇一組數(shù)值,使其B值是未使用過的。從b+1列開始,向右下角生長一個(gè)元素,與前b-1行及前b-1列組成新的b2大小的二維矩陣,取值可能性有Y個(gè),遍歷所有可能取值,隨機(jī)選擇一個(gè)數(shù)值,使得B值是未使用過的。 4) 向中間生長一個(gè)元素,與前b-1行及前b-1列組成新的b2大小的二維矩陣,取值可能性有Y個(gè),遍歷所有可能取值,隨機(jī)選擇一個(gè)數(shù)值,使其B的值是未使用過的。 5) 回到第2步,循環(huán)執(zhí)行2-3-4步,直到無法找到未使用過的B值。 6) 重復(fù)執(zhí)行1~5步,直到生成所要求的矩陣。 取b=5,Y=2,所得二維編碼圖案見圖2。 圖2 40×40黑白二維碼,其中任意5×5的二維碼取值全局唯一,總共有1 296個(gè)不同的編碼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 首先根據(jù)飛機(jī)的GPS位置確定飛機(jī)是否到達(dá)指定著降區(qū)域,如果到達(dá)著降區(qū)域,就啟動(dòng)視覺相對(duì)定位算法。當(dāng)無人機(jī)飛行高度較高,能夠觀測到完整的著降標(biāo)志時(shí),只需檢測整個(gè)著降標(biāo)志即可完成定位,與本文前言中提到的視覺定位方法類似。而當(dāng)飛行高度較低,無法觀測到完整的著降標(biāo)志時(shí),就需要通過檢測本文設(shè)計(jì)的全局唯一性編碼圖案中的編碼來實(shí)現(xiàn)相對(duì)定位,具體過程如下所述。 首先采用Canny算子對(duì)圖像進(jìn)行邊緣檢測,然后對(duì)檢出的邊緣進(jìn)行膨脹處理,對(duì)膨脹后的邊緣進(jìn)行Hough變換,獲取直線段。對(duì)于間距和夾角小于一定閾值的直線進(jìn)行合并,用其坐標(biāo)均值作為新的合并后的直線。對(duì)于合并后的直線,根據(jù)其斜率將其劃分為縱向和橫向兩組直線。如果同組直線相交,則將相交直線中與旁邊直線斜率差異較大的直線去掉。如果同組直線不相交,但相鄰直線間距遠(yuǎn)小于其他直線間距時(shí),去掉與其他直線間距差異較大的直線。如果相鄰直線間距是其他直線間距的倍數(shù),則在該相鄰直線間等間距加入新的直線。 如果一組直線有奇數(shù)條,則選取中間直線,如果有偶數(shù)條,則選取中間兩條直線。提取橫向和縱向直線中間的一條或兩條直線的交點(diǎn),計(jì)算這些交點(diǎn)的幾何中心點(diǎn),并以該點(diǎn)為中心,上下左右各取三根直線作為編碼選擇區(qū)域。如果該中心點(diǎn)在線上,則在其一側(cè)少取一根直線。計(jì)算最外層四條直線四個(gè)交點(diǎn)的圖像坐標(biāo)pt4,并計(jì)算這六條線內(nèi)5×5個(gè)格子的中心點(diǎn)坐標(biāo),及其對(duì)應(yīng)圖像的灰度值。根據(jù)這5×5個(gè)格子的圖像灰度值,計(jì)算其編碼B值。 根據(jù)編碼B值及圖2所示的編碼圖確定pt4在著降標(biāo)志上的坐標(biāo),并根據(jù)著降標(biāo)志的世界坐標(biāo)得到該編碼四個(gè)交點(diǎn)的世界坐標(biāo)pt4w。 利用四個(gè)交點(diǎn)在圖像中的坐標(biāo)pt4及其在世界坐標(biāo)系下的坐標(biāo)pt4w,計(jì)算相機(jī)在世界坐標(biāo)系下的位姿,見圖3。該問題是PnP問題,在世界坐標(biāo)系下平面四點(diǎn)位置已知,在圖像坐標(biāo)系下對(duì)應(yīng)的四點(diǎn)位置也已知,就可以解算出相機(jī)的位姿[21]。由于相機(jī)和無人機(jī)固連,即可得出無人機(jī)在世界坐標(biāo)系下的位姿。 圖3 PnP算法位姿計(jì)算示意圖Fig.3 PnP algorithm pose calculation diagram 試驗(yàn)所采用的無人機(jī)為普通四旋翼,見圖4(a),圖4(b)為無人機(jī)著降過程中懸停于著降標(biāo)志上方。圖5為四旋翼著降過程中拍攝的圖像采樣,圖像分辨率為1 080 P。 圖4 無人機(jī)及著降過程Fig.4 UAV and the landing process. 圖5 無人機(jī)著降過程中拍攝的圖像采樣Fig.5 Image sampling during UAV landing 著降標(biāo)志為圖2所示的二維碼,將該編碼打印成80 cm×80 cm的圖案,其中每個(gè)黑白塊大小為2 cm×2 cm。將其平放在地上,并建立世界坐標(biāo)系,無人機(jī)以該二維碼為著陸標(biāo)志,垂直向下拍攝圖像,通過視覺算法進(jìn)行相對(duì)定位,從而引導(dǎo)無人機(jī)著陸。 實(shí)驗(yàn)所用相機(jī)在180 cm高度可以恰好看見整個(gè)二維碼,22 cm時(shí)恰好可以看見一個(gè)5×5的方塊。因此,當(dāng)飛行高度高于180 cm且可以看到完整圖案時(shí),就可以采用整幅圖作為著降定位圖案。而當(dāng)飛行高度低于22 cm時(shí),由于無法看到最小編碼圖案,將無法定位。而當(dāng)飛行高度在22~180 cm之間時(shí),在80 cm×80 cm范圍內(nèi),就可以依賴局部編碼實(shí)現(xiàn)精確定位。當(dāng)飛行高度高于180 cm時(shí),如果由于偏離中心而無法看全整個(gè)圖案,也可以通過觀察到的著降標(biāo)志的局部進(jìn)行定位。 編碼提取過程見圖6,首先采用Canny對(duì)無人機(jī)觀測到的圖像進(jìn)行邊緣提取,見圖6(a)。然后對(duì)邊緣進(jìn)行膨脹處理,并進(jìn)行Hough變換,得到由邊緣組成的直線段,見圖6(b)。再對(duì)Hough變換生成的線段進(jìn)行合并,并提取中間直線圍成的5×5的黑白格,提取這些黑白格中心的灰度值作為編碼,見圖6(c),圖中紅線是該編碼塊外圍直線,小圈是各黑白格的中心點(diǎn)。根據(jù)該編碼值就可以確定該編碼在世界坐標(biāo)系下的位置。最后采用PnP算法,根據(jù)編碼區(qū)四個(gè)角點(diǎn)的圖像位置和在世界坐標(biāo)系下的位置,解算出相機(jī)在世界坐標(biāo)系下的位姿。 圖6 編碼提取過程Fig.6 Code extraction process 圖7為著降過程中位置編碼檢測識(shí)別的圖像采樣,隨著距離的靠近,黑白格逐漸變大,當(dāng)距離小于22 cm時(shí),將無法獲取5×5個(gè)黑白格,定位結(jié)束。無人直升機(jī)著降過程位姿采樣見圖8和圖9。該圖為無人機(jī)從120 cm降落到22 cm過程的位姿采樣。在X-Y平面上的彩色圓點(diǎn)表示選取的編碼塊的四個(gè)角點(diǎn)。上面標(biāo)有數(shù)字的椎體符號(hào)表示無人機(jī)在著降過程中的位置和姿態(tài)。數(shù)字表示相機(jī)的位姿順序,數(shù)字不連續(xù)表示該幀圖像未能計(jì)算出相機(jī)位姿。主要原因是實(shí)驗(yàn)用的無人機(jī)拍攝效果較差,拍攝圖像因?yàn)闊o人機(jī)大幅抖動(dòng)或快速移動(dòng),圖像發(fā)生嚴(yán)重模糊。 圖7 位置編碼檢測與識(shí)別Fig.7 Location coding detection and recognition 圖8 無人機(jī)著降過程位姿采樣Fig.8 Pose sampling of UAV landing process 圖9 無人機(jī)著降過程位置變化曲線Fig.9 Position change curve of UAV during landing 本實(shí)驗(yàn)中由于實(shí)驗(yàn)條件受限,無法實(shí)時(shí)獲取無人機(jī)的真實(shí)位姿,但最終著降位置的計(jì)算值和實(shí)際值誤差在5 mm以下。在整個(gè)著降過程中,引起定位誤差的因素包括如下三點(diǎn)。 1) 圖像模糊造成邊緣不精確,從而導(dǎo)致直線交點(diǎn)位置偏差。應(yīng)對(duì)該問題可以采用全局快門攝像頭,并增加減震。 2) 相機(jī)分辨率及畸變引起的誤差,該誤差通常較小。 3) 相機(jī)坐標(biāo)系與無人直升機(jī)機(jī)體坐標(biāo)系之間的轉(zhuǎn)換誤差,坐標(biāo)轉(zhuǎn)換通過安裝標(biāo)定計(jì)算得到。 本文針對(duì)當(dāng)著降平臺(tái)發(fā)生移動(dòng)或無人直升機(jī)受橫風(fēng)干擾,導(dǎo)致直升機(jī)著降定位失敗的問題,設(shè)計(jì)了一種基于唯一性編碼技術(shù)生成的二維碼圖案作為著降標(biāo)志,該標(biāo)志既可以整體作為著降標(biāo)志,同時(shí)其內(nèi)部任意相鄰的5×5的黑白方塊組成的圖案也可以單獨(dú)作為著降標(biāo)志。 基于該標(biāo)志給出了快速識(shí)別和定位算法,從而實(shí)現(xiàn)在著降標(biāo)志范圍內(nèi)對(duì)無人機(jī)進(jìn)行連續(xù)定位,降低因距離太近或太偏而無法觀測到著降標(biāo)志,從而定位失敗,進(jìn)而導(dǎo)致著降失敗的風(fēng)險(xiǎn)。 試驗(yàn)結(jié)果表明,相機(jī)只要能夠觀測到著降圖案的任意5×5個(gè)小方格,就能夠精確定位,并使最終著降位置誤差小于1 cm。3 無人機(jī)著降定位算法
3.1 邊緣直線檢測
3.2 提取圖像編碼
3.3 獲取坐標(biāo)
3.4 位姿解算
4 實(shí)驗(yàn)測試
5 結(jié) 論