蘇 暢,王 立,鄭 然,周建濤,武延鵬
(北京控制工程研究所空間光電測量與感知實驗室,北京 100190)
星敏感器作為一種高精度姿態(tài)測量敏感器被廣泛應(yīng)用于各類航天器中[1]。根據(jù)星敏感器的工作流程可知,獲取星像坐標(biāo)占了絕大部分時間,因此為了提高星敏感器的數(shù)據(jù)更新率,必須減少星像坐標(biāo)的提取時間[2]。
目前,星敏感器采用的星像坐標(biāo)提取方法主要有以下兩種方式:一種是采用串行模式提取星像坐標(biāo);另外一種是采用現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)提取星像坐標(biāo)[3]。采用串行模式提取星像坐標(biāo)首先把星圖保存在存儲器中(SRAM或者DDR),然后處理器從存儲器中逐個讀取星圖中的像素灰度值,利用重心法提取星像坐標(biāo),采用這種方式提取坐標(biāo)需要對同一幅星圖進(jìn)行2次操作,即保存星圖到存儲器中和從存儲器中讀取星圖,因此增加了提取時間;而且隨著星敏感器的圖像傳感器面陣越大,保存和讀取圖像的時間也隨之增加,提取星像坐標(biāo)的時間也就越長,然而大面陣圖像傳感器是星敏感器發(fā)展的必然趨勢,因此基于串行模式提取星像坐標(biāo)難以提高星敏感器的數(shù)據(jù)更新率。為此,文獻(xiàn)[3]提出了一種采用FPGA實現(xiàn)星像坐標(biāo)提取的方法,這種方法不需要把星圖保存到存儲器中,而是在FPGA獲取星圖的一個像素后,立刻對該像素進(jìn)行聚類并實時完成星像坐標(biāo)提取,提取過程需要對相鄰上、左、左上的像素點(diǎn)進(jìn)行判斷、灰度乘法和加法計算,一共需要5個周期才能完成1個像素的處理,即FPGA獲取星像坐標(biāo)的工作頻率也至少要設(shè)定為探測器像素輸出速率的5倍;而隨著探測器像素時鐘的提高,此時FPGA獲取星像坐標(biāo)的工作頻率也需要相應(yīng)地提高5倍;而FPGA性能有限,且極高頻率工作時,穩(wěn)定性也隨之降低,因此采用該方法提取星像坐標(biāo)也受到了FPGA器件的限制。
基于以上問題,本文提出了一種采用行列聚類并行的星像坐標(biāo)提取方法,將逐個像素聚類的方式優(yōu)化成像素隊列聚類的方式,在實現(xiàn)對恒星星像坐標(biāo)實時提取的同時,可以解決文獻(xiàn)[3]提出的實時提取星像坐標(biāo)過程中坐標(biāo)提取頻率是像素輸出頻率5倍的問題,保證提取坐標(biāo)過程中每個像素在1個時鐘周期處理完,從而使像素輸出時鐘與星像坐標(biāo)提取時鐘完全匹配。因此,該方法可在探測器高像素輸出速率條件下實現(xiàn)對恒星星像坐標(biāo)的實時提取,不但提高了數(shù)據(jù)更新率,而且隨著FPGA工作頻率的降低,星敏感器的穩(wěn)定性得到大幅提升且功耗也隨之減少[4-7],對提高星敏感器工作可靠性具有重要意義。
采用行列聚類并行的星像坐標(biāo)提取方法的主要原理為將星象坐標(biāo)提取過程分為3個進(jìn)程,分別為行聚類進(jìn)程、列聚類進(jìn)程和質(zhì)心計算進(jìn)程,3個進(jìn)程并行工作,當(dāng)星圖數(shù)據(jù)讀出完畢時,完成對該幀星圖中星像坐標(biāo)的提取工作,實時輸出星像質(zhì)心坐標(biāo)至處理器,供后續(xù)模塊進(jìn)行星圖識別和姿態(tài)解算工作。
行聚類進(jìn)程工作流程如下:
1)從探測器讀取像素點(diǎn)的灰度值,并將該值與濾波后的背景閾值進(jìn)行比較,若小于背景閾值,則該像素點(diǎn)視為背景,不作處理,等待讀取下一個像素點(diǎn)的灰度值;若大于背景閾值,表明其是星像點(diǎn),記錄該像素的灰度I、灰度與列位置的乘積xI等相關(guān)信息,轉(zhuǎn)到步驟2)。
2)繼續(xù)判斷下一像素點(diǎn)灰度值是否大于背景閾值,若大于背景閾值,表明該像素點(diǎn)與前一像素點(diǎn)屬于同一星像,將灰度I、灰度與列位置的乘積xI累加到步驟1)中的相應(yīng)寄存器中,并將行塊長度等信息進(jìn)行更新,保持在步驟2);若小于背景閾值,表明該像素點(diǎn)不在其前一像素所屬的星像中,表明上一行塊行聚類結(jié)束,轉(zhuǎn)到步驟3)。
3)將行聚類結(jié)束的行塊信息灰度和ΣI、灰度與列位置的乘積和ΣxI、灰度與行位置的乘積和ΣyI、行塊起始列位置、行塊長度以及行塊所在行位置等傳遞給列聚類進(jìn)程,并觸發(fā)列聚類進(jìn)程工作;同時回到步驟1),繼續(xù)對后面滿足要求的像素點(diǎn)進(jìn)行行聚類。
列聚類進(jìn)程工作流程如下:
在列聚類進(jìn)程中,主要對行聚類進(jìn)程傳遞的行塊信息進(jìn)行列聚類,并輸出完整的星像信息至質(zhì)心計算進(jìn)程。具體方法為由于已知行塊的灰度和ΣI、灰度與列位置的乘積和ΣxI、灰度與行位置的乘積和ΣyI、行塊起始列位置、行塊長度以及行塊所在行位置,可據(jù)此作為判斷2個行塊是否關(guān)聯(lián)和列聚類是否結(jié)束的標(biāo)志。設(shè)行塊1的行位置為ROW1,列起始位置為COL_START1,行塊長度為ROW_LENGTH1;行塊2的行位置為ROW2,列起始位置為COL_START2,行塊長度為ROW_LENGTH2,且行塊1優(yōu)先于行塊2被探測到??煞譃橐韵虑闆r:
1)若ROW1=ROW2,則表明2個行塊位于同一行,且無交集,是2個獨(dú)立的行塊,此時將行塊信息按照先后順序存入先入先出(First In First Out, FIFO)中,等待與其他行塊進(jìn)行列聚類;
2)若ROW1=ROW2-1 AND COL_START2+ROW_LENGTH2 3)若ROW1=ROW2-1 AND COL_START2+ROW_LENGTH2>COL_START1 AND COL_START2 4)若ROW1=ROW2-1且COL_START2>COL_START1+ROW_LENGTH1,則表明行塊2在行塊1的下一行,位于行塊1的右側(cè)且與之無交集,是2個獨(dú)立的行塊,同時說明行塊1所在的星像列聚類已完成,已構(gòu)成完整的星像,并向質(zhì)心計算進(jìn)程輸出完整的星像信息,此時將行塊2存入FIFO中,等待與其他行塊進(jìn)行列聚類; 5)若ROW1 質(zhì)心計算進(jìn)程工作流程如下: 在質(zhì)心計算進(jìn)程中,主要對列聚類進(jìn)程傳遞過來的星像信息進(jìn)行質(zhì)心計算,由于已知灰度和ΣΣI、灰度與列位置的乘積和ΣΣxI、灰度與行位置的乘積和ΣΣyI,根據(jù)重心法公式即可得到該星像的質(zhì)心位置。 按照上述流程,在一幀圖像讀出完畢時,可以依次得到該幀星圖中所有星像的質(zhì)心坐標(biāo),將得到的全部星點(diǎn)坐標(biāo)傳遞給星圖識別與姿態(tài)解算模塊,進(jìn)而輸出星敏感器光軸在慣性空間的指向。 選用某型號星敏感器進(jìn)行實驗,實驗示意圖如圖1所示,該星敏感器的處理器采用Microsemi公司某系列的SOC FPGA。FPGA側(cè)主要完成對探測器的驅(qū)動、星圖數(shù)據(jù)接收、星像坐標(biāo)提取等操作,ARM主要完成星圖識別和姿態(tài)解算。探測器面陣為2048×2448,像素輸出速率為120MHz,F(xiàn)PGA內(nèi)部處理時鐘頻率為120MHz。下面對FPGA提取結(jié)果以及數(shù)據(jù)更新率進(jìn)行驗證。 圖1 實驗示意圖Fig.1 Schematic diagram of experimental equipment 測試方法為將兩種方法集成到一個硬件平臺上,固定星敏感器與星模擬器相對位置不動,采集1000幀星圖,分別采用文獻(xiàn)[3]提出的傳統(tǒng)星像坐標(biāo)實時提取方法和本文敘述的星像坐標(biāo)實時提取方法對這1000幀星圖進(jìn)行坐標(biāo)提取,并將各自的坐標(biāo)提取結(jié)果輸出至上位機(jī)。對兩種方法的提取結(jié)果進(jìn)行比較,星圖中某一恒星星像坐標(biāo)曲線分別如圖2和圖3所示。 (a) x方向星點(diǎn)位置 (b) y方向星點(diǎn)位置圖2 文獻(xiàn)[3]方法坐標(biāo)計算結(jié)果Fig.2 Coordinate calculation results with method presented in Ref[3] (a) x方向星點(diǎn)位置 (b) y方向星點(diǎn)位置圖3 本文敘述方法坐標(biāo)計算結(jié)果Fig.3 Coordinate calculation results with the method presented in this paper 從圖2和圖3可知,二者對同一恒星星像坐標(biāo)的計算結(jié)果完全相同,這是由于二者均采用重心法[12]進(jìn)行坐標(biāo)計算;而不同之處在于,文獻(xiàn)[3]提取坐標(biāo)時處理1個像素需要5個時鐘周期,而本文敘述方法由于優(yōu)化了處理流程,將逐個像素聚類的方式優(yōu)化成像素隊列聚類的方式,處理1個像素僅需要1個時鐘周期。所以二者提取的星像坐標(biāo)標(biāo)準(zhǔn)差均為0.0223像素,即采用本文方法提取的星像坐標(biāo)精度與文獻(xiàn)[3]提取的星像坐標(biāo)精度一樣。 測試方法為在FPGA中設(shè)計一個計數(shù)器,每1μs增加1個計數(shù)值,當(dāng)坐標(biāo)提取結(jié)束后讀取該計數(shù)器的值連同當(dāng)前幀的坐標(biāo)值一同輸出。應(yīng)用同一硬件平臺分別采用文獻(xiàn)[3]提出的傳統(tǒng)星像坐標(biāo)實時提取方法和本文敘述的星像坐標(biāo)實時提取方法,得到的結(jié)果如表1和表2所示。 表1 文獻(xiàn)[3]方法數(shù)據(jù)更新率測試結(jié)果 表2 本文敘述方法數(shù)據(jù)更新率測試結(jié)果 根據(jù)表1可知,采用文獻(xiàn)[3]方法提取星像坐標(biāo)的提取周期穩(wěn)定在218ms,數(shù)據(jù)更新率約為4.5Hz,這是因為文獻(xiàn)[3]提出的傳統(tǒng)實時提取方法處理1個像素需要5個時鐘周期,所以在FPGA處理頻率設(shè)為120MHz的條件下,僅能將探測器的數(shù)據(jù)讀出速率限制為24MHz。而本文敘述方法處理1個像素只需要1個時鐘周期,同樣在FPGA處理頻率設(shè)為120MHz的條件下,探測器的數(shù)據(jù)讀出速率能夠達(dá)到120MHz。從表2可知,星敏感器輸出星像坐標(biāo)的周期穩(wěn)定在46ms,所以星敏感器的數(shù)據(jù)更新率能夠達(dá)到21.7Hz。因此采用本文方法提取星像坐標(biāo)時,星敏感器的數(shù)據(jù)更新率明顯提高。 從實驗結(jié)果可以得出,采用行列聚類并行的星像坐標(biāo)方法提取坐標(biāo)時,在相同工作頻率且不降低星像坐標(biāo)精度的前提下,提取星像坐標(biāo)的時間僅為文獻(xiàn)[3]敘述方法的21.1%,大大減少了提取星像坐標(biāo)的時間,為進(jìn)一步提高星敏感器的數(shù)據(jù)更新率奠定了基礎(chǔ)。 采用大面陣圖像傳感器是星敏感器提高精度的重要手段,也是發(fā)展的必然趨勢[13-14]。而隨著傳感器面陣的增加,數(shù)據(jù)讀出時間也必然增加,傳統(tǒng)方法難以提高星敏感器的數(shù)據(jù)更新率。本文敘述方法可在探測器高數(shù)據(jù)輸出速率的條件下,實現(xiàn)對恒星星像坐標(biāo)的實時提取,并達(dá)到1個時鐘周期處理完1個像素的目的,與現(xiàn)有的實時提取方法相比,可使星敏感器的數(shù)據(jù)更新率提高近5倍,因此該方法不但具有實時性,而且具有較好的魯棒性。2 實驗結(jié)果
2.1 坐標(biāo)提取精度測試
2.2 數(shù)據(jù)更新率測試
3 結(jié)論