?

無人機航攝拍照瞬間精確空間位置的確定

2016-07-15 05:08曹鳳海宋占武喬永杰黃興琪
測繪通報 2016年6期
關鍵詞:飛控數組原始數據

曹鳳海,宋占武,李 燕,劉 瀟,喬永杰,黃興琪

(東方地球物理公司,河北 涿州 072750)

?

無人機航攝拍照瞬間精確空間位置的確定

曹鳳海,宋占武,李燕,劉瀟,喬永杰,黃興琪

(東方地球物理公司,河北 涿州 072750)

近年來,隨著無人機與數碼相機技術的發展,無人機航測以其高效、精確、作業成本低、適用范圍廣等特點,在地表復雜地區高分辨率影像的獲取方面優勢明顯。無人機像片后續處理需要布設大量像控點,工作量大,耗時耗力,特別是在地表復雜地區。如果通過衛星定位的手段計算出拍照瞬間照片中心的精確位置和姿態,則可以節省大量施工投入,有效提高生產效率。本文即利用PPK作業方式進行航攝拍照瞬間空間位置的確定以進行研究。

一、硬件配置

利用ARM板配GNSSOEM板組成簡單的GNSS接收機。通過綜合測試并考慮體積方面的要求,建議GNSSOEM板采用Trimble公司的BD930板卡;為了適應控制過程中的多線程操作,ARM板配WinCE操作系統,要用兩個串口與GNSS差分板連接,其中一個記錄原始數據,另一個輸出NMEA數據。

二、整體設計

系統整體設計思路為:在地面控制點架設基站持續接收GNSS定位數據;空中(機載)ARM板持續記錄GNSS定位數據,接收飛控拍照指令,收到飛控指令后控制相機拍照并記錄拍照的精確時刻;施工完成后,地面基站和空中GNSS數據聯合處理,計算出每個歷元(根據設置參數記錄,如果設置成5Hz,則每200ms一個歷元)的精確坐標,根據記錄的拍照精確時間內插出每個拍照點的坐標。本文只討論空中數據記錄和控制部分的幾個關鍵問題的解決思路。

三、空中數據記錄和控制部分的幾個關鍵問題解決思路

1. 精確時刻的確定

GNSS差分板在鎖定衛星后會通過一個針腳發送PPS信號,將該針腳引到ARM板的“中斷”接口,通過監控該脈沖的到來確定每秒開始的精確時刻。

為了應用方便,在WinCE底層驅動中,將“PPS到達”寫成事件驅動,具體過程如下:

1) 將與GNSS的PPS連接的針腳配置成“中斷模式”。

2) 建立通知用戶事件,命名為“GPS1PPS”:

g_hUserEvent=CreateEvent(NULL,FALSE,FALSE,_T("GPS1PPS"));

其中,“g_hUserEvent”為用戶事件句柄。

3) 建立中斷事件:

g_hEINT3Event=CreateEvent(NULL,FALSE,FALSE,NULL);

4) 初始化中斷事件:

KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &g_IRQ,sizeof(UINT32), &g_SYSINTR,sizeof(UINT32),NULL);

其中,“g_IRQ”是采用的中斷號,在筆者的實際設計中,該針腳接到了“中斷3”,即“g_IRQ=IRQ_EINT3”。

5) 建立中斷服務線程:

hPPS=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadForEINT3,0,0,NULL);

6) 服務線程函數實現:

DWORDWINAPIThreadForEINT3(void){

DWORDdwResult;

while(TRUE)

{

dwResult=WaitForSingleObject(g_hEINT3Event,INFINITE);

SetEvent(g_hUserEvent);

InterruptDone(g_SYSINTR);

}

return0;

}

該線程函數一直接收PPS信號,當PPS信號到達“中斷3”,該函數從驅動層向應用層產生事件報告。

7) 應用層捕獲PPS到達事件。建立線程,接收驅動層發上來的“GPS1PPS”事件,該事件發生后,記錄該時刻:

DWORDWINAPIGPS1PPSThread(LPVOIDlpParameter){

HANDLEhGPS1PPSEvent=NULL;

hGPS1PPSEvent=OpenEvent(EVENT_ALL_ACCESS,FALSE,TEXT("GPS1PPS"));

while(1)

{

WaitForSingleObject(hGPS1PPSEvent,INFINITE);

m_dPPSTick=GetTickCount64();

}

return1;

}

由于PPS只提供每秒開始的精確時刻,要得到任意一時刻的精確時間,需要以PPS時刻為基礎加上到需要確定時刻的偏移值,該偏移值的確定需要用其他方式定時。為了應用方便,筆者利用CPU距開機以來的時間進行相對定時,即需要確定時刻的時間=PPS時刻+(需要確定時刻的CPU定時-PPS時刻的CPU定時)。

為了得到精確的CPU開機以來的時間,重寫“GetTickCount64()”函數:

doubleGetTickCount64(){

staticLARGE_INTEGERTicksPerSecond= {0};

LARGE_INTEGERTick;

if(!TicksPerSecond.QuadPart)

{

QueryPerformanceFrequency(&TicksPerSecond);

}

QueryPerformanceCounter(&Tick);

doubleRet= (double)Tick.QuadPart*1000.0/TicksPerSecond.QuadPart;

returnRet;

}

該方法的實現思路為:首先獲得CPU時鐘到該時刻的震動次數,然后獲取CPU時鐘每秒鐘的震動次數(震動頻率),其比值即為開機以來的秒數,該方法定時精度很高。

2. 捕獲飛控拍照指令信號

飛控發送的拍照指令是一個閉合信號(短路信號),如果要捕捉到該信號并產生中斷事件,需要通過邏輯電路將閉合信號轉換成電平信號,邏輯實現思路如下:

如圖1所示,一般情況下DI_A與DI_B不閉合,Q1截止,XEINT2為高電平;當DI_A與DI_B閉合時Q1導通,XEINT2由高電平變成低電平,即產生下降沿,發生中斷。當DI_A與DI_B由閉合到斷開后,Q1則從導通變為截止狀態,XEINT2由低電平變成高電平,即上升沿,不產生中斷。

閉合信號轉換為電平信號后,實現中斷的驅動和應用層事件的捕獲思路與處理PPS事件的道理相同,在筆者的實際設計中,該針腳接到了“中斷2”, 中斷觸發方式為下降沿觸發。應用層接收到拍照信號后,由ARM板產生觸發相機拍照指令,并記錄拍照瞬間的精確時刻。

圖1 實現原理

3. GNSS原始數據記錄

本文采用“雙緩沖”的方式接收和記錄GNSS原始數據,具體實現思路如下:

1) 定義兩個byte類數組,根據實現情況定義大小,可以是64KB或更大。

2) 用一個變量記錄當前工作于哪個數組,另外用兩個變量記錄兩個byte數組存儲數據長度。

3) 當接收到GNSS原始數據,將其存儲到當前工作byte數組,如果當前數組已保存部分數據,則將新數據連接到原有數據后面,為了提高數據轉存效率,用“memcpy”內存拷貝的方法。

4) 當當前工作byte數組存儲數據達到指定的長度,則將當前工作byte數組指定為另一個byte數組,同時啟動一個新的線程將達到指定長度的數據寫到Flash。

5) 兩個數組交替進行存儲數據,配合多線程寫Flash方式,接收GNSS原始數據和記錄兩不耽誤,達到“雙緩沖”的效果。

4. 各線程的優先級

根據實際工作要求,對各線程優先級作以下設計:

1)PPS線程優先線設為“高”。

2) 捕獲飛控拍照指令信號線程優先級設為“一般”。

3)GNSS原始數據記錄線程優先級設置為“一般”。

四、結束語

在無人機低空航拍技術迅速發展的今天,如何提高作業效率、精度和質量是行業內一直追求的目標,本文從實用的角度闡述了利用PPK技術解決確定相機在空中拍照瞬間空間位置的思路。

本文只對該方法實現思路的幾個關鍵問題進行了描述,且只涉及了原始數據采集部分,如果要實現產品化的應用,還需要諸多的輔助技術、空中姿態數據的獲取及后處理應用相關的開發。

(本專欄由天寶測量部和本刊編輯部共同主辦)

天寶測繪解決方案專欄

猜你喜歡
飛控數組原始數據
JAVA稀疏矩陣算法
受特定變化趨勢限制的傳感器數據處理方法研究
JAVA玩轉數學之二維數組排序
民用飛機飛控通電自檢測安全性研究
更高效用好 Excel的數組公式
02 飛控技術與機場安保引關注
全新Mentor DRS360 平臺借助集中式原始數據融合及直接實時傳感技術實現5 級自動駕駛
尋找勾股數組的歷程
世界經濟趨勢
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合