蘭一達(dá),宋躍進(jìn),張振華
(1.北方自動(dòng)控制技術(shù)研究所,太原 030006;2.中國兵器科學(xué)研究院,北京 100089)
傳統(tǒng)全封閉裝甲車輛在執(zhí)行車外觀測命令時(shí),需要乘員直接觀察潛望鏡或周視鏡采集光學(xué)圖像,通過操作手柄驅(qū)動(dòng)視景轉(zhuǎn)動(dòng),實(shí)現(xiàn)觀察視場周視切換。在這種模式下車輛周圍態(tài)勢感知會存在視景缺失,實(shí)時(shí)性不足,操作強(qiáng)度高,無法兼顧其他任務(wù)等問題。針對此類問題,不同的研究團(tuán)隊(duì)提出了不同的解決方案,其中較可行的一種為艙內(nèi)透視技術(shù),即接收乘員實(shí)時(shí)目視方向與頭部姿態(tài),經(jīng)由對車外多攝像頭系統(tǒng)拼接組成全景視頻流的實(shí)時(shí)裁剪輸出相應(yīng)方向的視頻圖像,最終反饋至乘員終端(乘員終端可以是以屏幕顯示或頭盔顯示器為代表的顯示裝置)。根據(jù)艙內(nèi)透視技術(shù)的技術(shù)實(shí)現(xiàn)流程,需要克服以下難點(diǎn):車體與頭盔之間相對位置姿態(tài)的計(jì)算(重點(diǎn)為相對方位角計(jì)算)以及根據(jù)目視方向?qū)θ耙曨l流進(jìn)行裁剪。
為解決上述難點(diǎn),本文提出了一種基于全封閉裝甲車輛雙剛體多自由度環(huán)境下針對全景視頻流的視場顯示模型和一種基于OpenCV 的視角切換控制方法,旨在為全封閉裝甲車輛艙內(nèi)透視技術(shù)提供針對全景視頻流實(shí)時(shí)輸出的解決方案,進(jìn)行初步論證與試驗(yàn),并為其進(jìn)一步完善打下基礎(chǔ)。
20 世紀(jì)50 年代,現(xiàn)代頭盔顯示器的雛形初現(xiàn)于英國,但尚未大規(guī)模應(yīng)用。20 世紀(jì)70 年代,頭盔顯示器第一次被應(yīng)用于美國“眼鏡蛇”武裝直升機(jī)。發(fā)展到90 年代,更先進(jìn)的主動(dòng)液晶頭盔顯示器、全息顯示器等出現(xiàn),頭盔顯示技術(shù)進(jìn)入高速發(fā)展階段。民用領(lǐng)域,以VR 眼鏡為代表的產(chǎn)品將頭盔顯示與虛擬現(xiàn)實(shí)技術(shù)結(jié)合起來,廣泛應(yīng)用于生活;基于全封閉座艙的頭盔式觀察系統(tǒng)也開始廣泛應(yīng)用于特種車輛與交通工具中。
軍用領(lǐng)域與此相對應(yīng),將頭盔顯示器與全景視頻結(jié)合進(jìn)行艙外觀察的“透明裝甲”構(gòu)想開始出現(xiàn),并在其后20 余年中得到大規(guī)模應(yīng)用。其中,最典型的代表為以色列“鐵視”系統(tǒng)。國外全景觀察技術(shù)與頭盔顯示的結(jié)合,已經(jīng)成為車載透視技術(shù)的主流方案,國外已有相對成熟的技術(shù)和產(chǎn)品。在單兵等其他領(lǐng)域,國外亦已開啟相關(guān)產(chǎn)品開發(fā)。在國內(nèi),航空領(lǐng)域頭盔顯示技術(shù)研究如火如荼,但其應(yīng)用場景是在外部自然背景下的瞄準(zhǔn)和導(dǎo)航信息的疊加,其應(yīng)用需求與車載全景觀察尚有所不同。在車載領(lǐng)域尚無規(guī)模化的艙內(nèi)透視技術(shù)相關(guān)產(chǎn)品,存在技術(shù)空白。
針對全封閉裝甲車輛的頭盔式艙內(nèi)透視技術(shù)將聚焦于以下問題:1)以空間轉(zhuǎn)換為核心的視場顯示模型;2)基于視場顯示模型的視角切換控制方法。
從傳感器采集到的姿態(tài)數(shù)據(jù),經(jīng)過視場顯示模型進(jìn)行空間轉(zhuǎn)換與計(jì)算,得到目標(biāo)視向;經(jīng)視角切換控制方法基于此視向的裁剪,最終得到能夠輸入至頭盔的相應(yīng)角度跟隨成像,圖1 所示艙內(nèi)透視技術(shù)邏輯框架。
圖1 艙內(nèi)透視技術(shù)邏輯框架
根據(jù)國內(nèi)對特種車輛艙外觀察系統(tǒng)的相關(guān)研究,視場顯示模型所面臨的核心問題為:經(jīng)大地參考坐標(biāo)系在互不相關(guān)頭盔坐標(biāo)系與車體坐標(biāo)系之間建立多剛體間的位置姿態(tài)關(guān)系,其必然涉及到空間轉(zhuǎn)換問題;模型的最終輸出為頭盔與車體坐標(biāo)系間的相對位姿數(shù)據(jù),并由視角切換控制方法進(jìn)行處理。圖2 所示空間轉(zhuǎn)換涉及到的坐標(biāo)系間的轉(zhuǎn)換關(guān)系。
圖2 空間轉(zhuǎn)換坐標(biāo)系邏輯關(guān)系
目前常用的剛體位姿描述與空間轉(zhuǎn)換方法有以下3 種:歐拉角(RPY 角)法、旋轉(zhuǎn)矩陣(方向余弦矩陣)法和四元數(shù)(軸角)法。
歐拉角法是最常見的位姿表示方法,由一組3個(gè)角度分別表示剛體在空間中的俯仰、橫滾和偏航方向。若剛體坐標(biāo)系按照右手定則給出,則俯仰角描述物體繞X 軸轉(zhuǎn)動(dòng),橫滾角描述物體繞Y 軸轉(zhuǎn)動(dòng),偏航角描述物體繞Z 軸轉(zhuǎn)動(dòng)。因此,物體位姿可以由連續(xù)3 次圍繞坐標(biāo)軸的旋轉(zhuǎn)得到。歐拉角法被廣泛用于各種涉及位姿描述的人機(jī)交互界面及作為位姿傳感器輸出數(shù)據(jù)。
旋轉(zhuǎn)矩陣法以一個(gè)正交矩陣描述了剛體在空間中的一種轉(zhuǎn)動(dòng)行為,其優(yōu)勢是可以由歐拉角計(jì)算得出,并能夠進(jìn)行連續(xù)多次旋轉(zhuǎn)的合成效果描述。然而,旋轉(zhuǎn)矩陣法需要對數(shù)量龐大的矩陣參數(shù)進(jìn)行運(yùn)算,雖然便于以矩陣形式表達(dá)旋轉(zhuǎn)過程,但是運(yùn)算速度較慢,不利于計(jì)算機(jī)處理旋轉(zhuǎn)過程。因此,在四元數(shù)法普及之后,旋轉(zhuǎn)矩陣法一般用于對旋轉(zhuǎn)過程進(jìn)行理解和表示,不再大批量用于程序計(jì)算。
四元數(shù)法是在程序中計(jì)算剛體旋轉(zhuǎn)最常用的方法。物體在空間中圍繞某一軸轉(zhuǎn)動(dòng)一定角度可以看作一次旋轉(zhuǎn),而此類空間中的一次旋轉(zhuǎn)由一個(gè)四元數(shù)(四維向量)表示:
或
其中,W一維表示旋轉(zhuǎn)角度;三維Wi+Wj+Wk 表示旋轉(zhuǎn)軸在單位坐標(biāo)系(i,j,k)下的坐標(biāo)值。
對于由一組歐拉角3 次旋轉(zhuǎn)所確定的復(fù)合旋轉(zhuǎn),可以等效為繞空間中某向量經(jīng)一次旋轉(zhuǎn)特定角度得到,如圖3 所示。
圖3 四元數(shù)(軸角)旋轉(zhuǎn)
OA 向量圍繞OO'軸旋轉(zhuǎn)θ 角度得到新向量。利用軸角特殊性質(zhì),將旋轉(zhuǎn)矩陣或歐拉角表示法轉(zhuǎn)換為相應(yīng)四元數(shù),則可大幅簡化運(yùn)算過程,提高運(yùn)算速度。因此,四元數(shù)法在電腦運(yùn)算中最為快捷。
由圖2 可以看出,在進(jìn)行空間轉(zhuǎn)換之前,需要采集相應(yīng)傳感器的數(shù)據(jù)。本文使用的姿態(tài)傳感器為基于MEMS(微機(jī)電系統(tǒng))的慣性傳感器,成本較低,電路結(jié)構(gòu)簡單,并可模塊化安裝于載體。九軸姿態(tài)傳感器集成對物體姿態(tài)角度、角速度、角加速度的測量輸出,并能夠輸出當(dāng)?shù)卮艌霏h(huán)境參數(shù)。
頭盔加裝的姿態(tài)傳感器三軸方向遵循右手定則,即向右為X 軸,向前為Y 軸,向上為Z 軸,因此,可以用作代表頭盔在三維空間內(nèi)的位姿態(tài),其安裝狀態(tài)如圖4 所示。車體姿態(tài)傳感器方向規(guī)定同理。
圖4 頭盔傳感器安裝示意
基于全封閉裝甲車輛的視場顯示模型的主要任務(wù)是建立在空間中自由運(yùn)動(dòng)的全景攝像機(jī)與頭盔顯示器的位置姿態(tài)關(guān)系。此過程涉及到3 個(gè)坐標(biāo)系之間的轉(zhuǎn)換:參考坐標(biāo)系D(大地)、頭盔坐標(biāo)系T(頭盔姿態(tài)傳感器)、車體坐標(biāo)系S(車體姿態(tài)傳感器,等效于攝像頭坐標(biāo)系)。
由于頭盔與車體(即攝像頭平臺)均可在三維空間內(nèi)不受約束地自由轉(zhuǎn)動(dòng),模型的建立需要最終尋找頭盔與車體間的位置關(guān)系并尋找二者之間的偏航角度差值。因此,規(guī)定頭盔零位為頭盔正前方,車體零位(目視零位/攝像頭零位)為車體正前方,并假設(shè)乘員頭戴頭盔在車內(nèi)轉(zhuǎn)動(dòng)不受座位約束。
由于姿態(tài)傳感器輸入為RPY 角形式,頭盔坐標(biāo)系與車體坐標(biāo)系相對于大地坐標(biāo)系的姿態(tài)均為3次相互正交的歐拉角旋轉(zhuǎn)得到,規(guī)定頭盔與車體繞大地北、東、上3 軸旋轉(zhuǎn)角分別為橫滾角α,俯仰角β,偏航角(方位角)γ。
空間轉(zhuǎn)換的最終目標(biāo)為輸出頭盔相對于車體(攝像頭)的位姿所對應(yīng)的歐拉(RPY)角。
本文選用RPY 角作為傳感器輸入與最終輸出,但過程計(jì)算選用更加簡潔的四元數(shù)法。連續(xù)3 次RPY 角旋轉(zhuǎn)可等效為一次軸角旋轉(zhuǎn),并以式(1)或式(2)所示類型的四元數(shù)表示。
空間內(nèi)一點(diǎn)P 到另一坐標(biāo)系點(diǎn)Q 的以四元數(shù)所表示的旋轉(zhuǎn)公式如下:
其中,W'為W 的復(fù)共軛:
由RPY 角轉(zhuǎn)換至四元數(shù)的公式如下:
四元數(shù)有以下性質(zhì):
1)特殊逆序四元數(shù)W如下所示:
實(shí)部為相反數(shù)的四元數(shù)可以表示原四元數(shù)所代表旋轉(zhuǎn)的逆旋轉(zhuǎn),亦可表示參考坐標(biāo)系相對于物體坐標(biāo)系的位姿。
2)四元數(shù)乘法與矩陣乘法類似,不遵循交換律。以下為四元數(shù)乘法公式:
3)現(xiàn)不加證明地給出依次進(jìn)行兩次軸角旋轉(zhuǎn)a和b 所得出的組合旋轉(zhuǎn)對應(yīng)的四元數(shù)公式:
圖5 頭盔與車體方位角關(guān)系
若求得方位角γ 的準(zhǔn)確值,則可以依據(jù)該值對全景視頻流相應(yīng)方位的視頻選段截取處理,并最終輸出到頭盔顯示器。值得注意的是,在現(xiàn)場應(yīng)用中,視場顯示模型需以一定頻率實(shí)時(shí)監(jiān)控頭盔與車體的位置姿態(tài)。因此,需要開發(fā)額外的實(shí)時(shí)監(jiān)控與設(shè)備間通信模塊程序,以保證輸出角度對位姿的監(jiān)控與跟蹤的實(shí)時(shí)性和有效性。
視角切換控制方法的目標(biāo)是將視場顯示模型所輸出的方位角度值作為輸入,并依據(jù)此角度值對全景視頻流相應(yīng)方向的圖像進(jìn)行裁剪輸出。本文選用PC 端OpenCV 庫進(jìn)行視角切換輸出。
在全景視頻流生成和裁剪輸出的過程中,Open CV 及其庫函數(shù)將會發(fā)揮極大作用。
OpenCV(open source computer vision library)是由英特爾研究中心開發(fā)的開源計(jì)算機(jī)視覺庫,采用C/C++ 語言編寫,能夠運(yùn)行在主流的Windows 與Linux 平臺,并提供多種開發(fā)語言接口。
利用OpenCV 圖像處理分以下3 個(gè)步驟:
1)預(yù)處理圖像。OpenCV 將從多種輸入途徑(內(nèi)部存儲、攝像頭或外部圖像輸入)讀取圖像或視頻,將其放入內(nèi)存進(jìn)行圖像格式預(yù)處理并備用。
2)精細(xì)化處理。一般來說,OpenCV 將創(chuàng)建Mat對象,并將待處理圖像導(dǎo)入其中。運(yùn)用庫像處理函數(shù),結(jié)合開發(fā)者所需要完成的圖像處理目標(biāo)以及相應(yīng)算法,對圖像的特征進(jìn)行精細(xì)化處理。
3)輸出圖像。OpenCV 將處理完成的圖像或視頻進(jìn)行打包封裝與編碼,并根據(jù)需要進(jìn)行實(shí)時(shí)輸出或轉(zhuǎn)儲。
對于全景視頻的視角切換,可以在原理上簡化為對其每一幀圖像(即全景圖片)做視角切換。全景圖片的視角切換大致分為以下步驟:
1)全景圖片的預(yù)處理
在預(yù)處理過程中,導(dǎo)入對應(yīng)的全景圖片,并建立對話框輸出原圖。
2)OpenCV 對全景圖片精細(xì)化處理
以正弦波函數(shù)模擬輸入頭盔與車體位姿數(shù)據(jù),根據(jù)輸入的歐拉角組合,通過上節(jié)所示空間轉(zhuǎn)換模型計(jì)算輸出歐拉角,以此作為下一幀圖像轉(zhuǎn)動(dòng)的目標(biāo)位置;根據(jù)目標(biāo)位置選定裁剪區(qū)間,并利用OpenCV 函數(shù)進(jìn)行裁剪。在此過程中,隨著目標(biāo)位置的不斷變化,各幀的裁剪區(qū)間跟隨輸入歐拉角變化。
3)視角切換輸出圖像的顯示。
裁剪完畢后,輸出圖像經(jīng)新建對話框輸出,同時(shí)監(jiān)控輸入歐拉角模擬不同的目標(biāo)方向,并開啟下一次裁剪循環(huán)。
圖6 為圖片裁剪的基本流程。
圖6 圖片裁剪基本流程
全景視頻可以視為一種特殊畫幅的視頻流,本文所針對的裁剪對象為攝像頭輸入的視頻流。
對視頻流進(jìn)行自然視角切換時(shí),由于視頻流本身具有的高實(shí)時(shí)性等復(fù)雜情況,需要在視角切換的同時(shí)兼顧到對視頻流每一幀圖像的同等處理。因此,在裁剪之前需要對攝像頭等設(shè)備進(jìn)行一系列預(yù)處理,而其裁剪過程也較全景圖片裁剪更加復(fù)雜。大致分為以下步驟:
1)攝像頭視頻流預(yù)處理
在預(yù)處理過程中,需要對攝像頭進(jìn)行常規(guī)開啟操作,并設(shè)置攝像頭格式與視頻格式、存儲路徑等參數(shù),最終導(dǎo)入視頻流,并建立對話框輸出。
2)OpenCV 對視頻流的精細(xì)化處理
裁剪循環(huán)外,設(shè)置必要的監(jiān)測線程,負(fù)責(zé)監(jiān)測用戶與控制臺輸入的裁剪角度。
裁剪循環(huán)中,首先設(shè)立監(jiān)測線程入口,負(fù)責(zé)隨時(shí)向主循環(huán)提供監(jiān)測中斷。主循環(huán)將根據(jù)輸入的歐拉角組合,通過上節(jié)所示空間轉(zhuǎn)換模型計(jì)算輸出歐拉角,以此作為下一幀圖像轉(zhuǎn)動(dòng)的目標(biāo)位置,并根據(jù)目標(biāo)位置選定裁剪區(qū)間。
選定裁剪區(qū)間后,選取視頻流中的每一幀,并對其做相同的裁剪操作,通過輸出對話框進(jìn)行輸出。若輸出圖像跨越攝像頭零位,則需要在零位左右各進(jìn)行一次裁剪,之后進(jìn)行二次拼接。通過裁剪循環(huán)維持當(dāng)前輸出直到用戶在控制臺決定停止或退出。
3)視角切換輸出圖像的顯示
圖7 為視頻流裁剪的基本流程。
圖7 視頻流裁剪基本流程
因暫無適用的裝甲車輛全景攝像設(shè)備,故選用全景圖片與筆記本電腦內(nèi)置攝像頭視頻流,進(jìn)行兩次實(shí)驗(yàn)以模擬全景視頻流單次實(shí)驗(yàn)。輸出端基于計(jì)算機(jī)平臺,以代替頭盔顯示器顯示屏。因艙內(nèi)透視技術(shù)要求的主要影響因素為頭盔與車體航向角以及二者相對航向角,因此,實(shí)驗(yàn)輸入角度選用方位角周期變化、其他歐拉角呈小角度干擾的方式。針對全景圖片與攝像頭視頻流的算法功能驗(yàn)證如下。
輸入兩組RPY 歐拉角方位角以正弦規(guī)律變化、滾轉(zhuǎn)角與俯仰角呈小角度定值,分別模擬頭盔與全景相機(jī)相對于大地參考坐標(biāo)系位姿數(shù)據(jù),經(jīng)視場顯示模型輸出頭盔相對于全景相機(jī)坐標(biāo)系的位姿數(shù)據(jù)。
分別進(jìn)行全景圖片在初始方向、隨動(dòng)跟隨時(shí)的演示驗(yàn)證(設(shè)定0 度為圖片中央角度)。其中,全景圖片裁剪輸出圖在效果圖右邊側(cè)顯示(原始全景圖片為4 952*837 像素,本文圖片經(jīng)過寬度比例壓縮調(diào)整)。
圖8 全景圖片演示驗(yàn)證(初始)
圖9 全景圖片演示驗(yàn)證(跟隨)
設(shè)置兩組RPY 歐拉角方位角以正弦規(guī)律變化、滾轉(zhuǎn)角與俯仰角呈小角度定值,分別模擬一般情況下頭盔與全景相機(jī)相對于大地參考坐標(biāo)系位姿數(shù)據(jù)的變化規(guī)律,經(jīng)視場顯示模型輸出頭盔相對于全景相機(jī)坐標(biāo)系的位姿數(shù)據(jù)。其中,輸入方位角以弧度制呈現(xiàn),便于代碼計(jì)算;輸出方位角以角度制呈現(xiàn),便于確定目視方位
進(jìn)行裁剪視頻流以方位角γ,由初始0 度以正弦規(guī)律進(jìn)行跟隨裁剪的演示驗(yàn)證,并提供控制臺界面輔助視頻流視角跟隨。其中,視頻流裁剪輸出圖在效果圖右邊側(cè)顯示。
圖10 視頻流演示驗(yàn)證(初始)
圖11 視頻流演示驗(yàn)證(跟隨)
由于缺少真正的智能頭盔與裝甲車輛傳感器輸入,本文采用正弦波規(guī)律模擬二者測得歐拉角的輸入進(jìn)行演示驗(yàn)證。
從演示驗(yàn)證結(jié)果來看,程序基本能達(dá)到跟隨歐拉角輸入對全景圖片進(jìn)行不同角度的跟隨、裁剪與輸出。程序基本達(dá)到跟隨特定規(guī)律變化的歐拉角組合對視頻流進(jìn)行裁剪方向?qū)崟r(shí)跟隨與切換。然而,輸入與輸出圖像偶爾存在卡頓與丟幀現(xiàn)象,需要進(jìn)行進(jìn)一步改進(jìn)。另外,在視場顯示模型實(shí)現(xiàn)空間轉(zhuǎn)換的過程中,發(fā)現(xiàn)俯仰角與橫滾角的組合旋轉(zhuǎn)對方位角產(chǎn)生一定影響,導(dǎo)致方位角輸出值與正確值產(chǎn)生數(shù)度偏差,需要額外開發(fā)矯正算法對俯仰角與橫滾角的影響進(jìn)行抵消。
通過對全景圖片以及視頻流分別進(jìn)行算法驗(yàn)證,驗(yàn)證了視場顯示模型與視角切換控制算法的有效性,實(shí)現(xiàn)針對全景圖片、視頻流跟隨頭盔與車體姿態(tài)差距造成的不同視場方向下的視角切換與控制。算法可進(jìn)行視頻分辨率更改,并應(yīng)用于對車載多攝像頭輸入的360°全景視頻的裁剪和基于頭盔顯示器的輸出,并參考針對全景視頻流系統(tǒng)的電子穩(wěn)像方法對輸出圖像進(jìn)行電子穩(wěn)像處理,對頭盔移動(dòng)與視頻視角切換之間的舒適性與連續(xù)性進(jìn)行調(diào)整。與能夠輸出位姿的頭盔式顯示器相結(jié)合,開發(fā)出一套適用于車內(nèi)對外態(tài)勢感知的解決方案,并最終實(shí)現(xiàn)車內(nèi)人機(jī)共融的艙內(nèi)透視觀察。
圖12 視頻流功能控制臺