2016-11-16 110 views
2

我目前正在尋找一個立體攝像機的項目和Kinect的V2似乎是一個不錯的選擇。然而,由於這對我來說是一筆相當大的投資,我需要確保它符合我的要求,主要的是不同傳感器的同步。的Kinect V2 - 同步顏色的深淺和幀

顯然有傳感器的無硬件同步,和我得到的軟件部分很多版本:

  1. 一些帖子,人們抱怨的兩個傳感器之間的滯後,以及許多其他要求的方式同步傳感器。這兩種方法似乎都有奇怪的解決方法,沒有「官方」的解決辦法。

  2. MultiSourceFrame類,這是超高動力學SDK 2.0的一部分的一些文章。據我瞭解,這個類可以檢索所有傳感器的框架(或更少,你可以選擇你想從數據哪些傳感器)在給定時間。因此,您應該能夠在給定的瞬間t得到不同傳感器的輸出並確保這些輸出同步。

所以我的問題是,這是MultiSourceFrame類做正是我的意思嗎?如果是的話,爲什麼它從未被提議爲解決方案?看來第一類的帖子是從2013年開始的,所以在SDK 2.0發佈之前。然而,MultiSourceFrame類應該更換AllFramesReady事件SDK的以前版本,並AllFramesReady不建議作爲一個解決辦法。

不幸的是,文檔沒有提供很多關於它是如何工作的信息,所以我在這裏問,以防有人會使用它。如果我的問題看起來很愚蠢,我很抱歉,但我想在購買這樣的相機之前確定。

謝謝你的回答!而且如果需要的話:)隨意詢問更多細節

+0

...但Kinect v2的更大問題是硬件要求,尤其是USB 3.0控制器。除非你嘗試過,否則你永遠不會知道你的工作是否正常。 – HenningJ

+0

@HenningJ非常感謝您的回答!從來沒有發現過這個問題,所以這裏真的很有幫助。你能詳細介紹一下這個USB 3.0的問題嗎? –

+0

根據官方要求,您需要英特爾或瑞薩USB 3.0控制器。但即使如此,很難預測它的工作能力,也就是說它是否能夠工作,或者如果能夠工作,那麼您將獲得多少FPS。要知道的唯一方法就是嘗試一下。如果它不能與你內置的USB 3控制器一起工作,那麼應該有很多USB 3 PCIe擴展卡。 – HenningJ

回答

1

有在libfreenect2 issue,有關的討論,其中有人specifically mentioned使用MultiSourceFrameReader時RGB和深度框架之間的6.25毫秒延遲:

的在ColorFrame的RELATIVETIME似乎總是落後於DepthFrame,InfraredFrame,BodyFrame,BodyIndexFrame的RELATIVETIME 6.25或6.375毫秒。同時,RelativeTime總是匹配DepthFrame,InfraredFrame,BodyFrame和BodyIndexFrame。

在我自己的實驗中,我得到了相同的結果。但這只是基於幀的時間戳。這些時間戳直接來自Kinect v2設備,所以它不太可能,但仍然有可能它們不是100%正確的。

因此,即使在使用MultiSourceFrameReader時,深度和RGB幀之間存在滯後,但它很可能足夠小,因此您可以忽略它。

至於MultiSourceFrame/MultiSourceFrameReader的使用,這是很簡單的,一旦你習慣了Kinect的V2 SDK:

m_pKinectSensor->OpenMultiSourceFrameReader(
    FrameSourceTypes::FrameSourceTypes_Depth | FrameSourceTypes::FrameSourceTypes_Color, 
    &m_pMultiSourceFrameReader); 

// get "synced" frame 
IMultiSourceFrame* pMultiSourceFrame = NULL; 
m_pMultiSourceFrameReader->AcquireLatestFrame(&pMultiSourceFrame); 

// get depth frame 
IDepthFrameReference* pDepthFrameReference = NULL; 
pMultiSourceFrame->get_DepthFrameReference(&pDepthFrameReference); 
IDepthFrame* pDepthFrame = NULL; 
pDepthFrameReference->AcquireFrame(&pDepthFrame); 

// get RGB frame 
IColorFrameReference* pColorFrameReference = NULL; 
pMultiSourceFrame->get_ColorFrameReference(&pColorFrameReference); 
IColorFrame* pColorFrame = NULL; 
pColorFrameReference->AcquireFrame(&pColorFrame); 

// ... now use both frames 

您可以CoordinateMapping Basic樣品中發現更多的細節,一旦你安裝了Kinect的V2 SDK 。

+1

你好。我是該GitHub問題的作者。爲了澄清,我不認爲RelativeTime來自Kinect V2設備。 libfreenect2的作者已經對USB數據包進行了反向設計,並且這些數據包的時間戳具有錯誤的分辨率。 RelativeTime具有0.1微秒的分辨率,但USB數據包只有0.1毫秒分辨率的時間戳。所以我的猜測是RelativeTime是在PC上計算的,而不是在Kinect V2設備上計算的。 – Kal