2016-11-16 27 views
2

現在、私はプロジェクト用の立体視カメラを探しています.Kinect v2は良い選択です。しかし、それは私にとって大きな投資だから、私はそれが私の要求を満たしていることを確認する必要があります。主なものは、さまざまなセンサーの良い同期です。Kinect v2 - 奥行きとカラーフレームの同期

はどうやらセンサーのないハードウェアの同期が存在しない、と私は、ソフトウェアの一部についての多くのバージョンを取得:

  1. 一部の人々は2つのセンサ間の遅れに文句を言うの記事、および多くの他の方法を尋ねるとセンサーを同期させる。両方とも、奇妙な回避策があり、「公式」な答えがないという共通の解決策はありません。

  2. Kinect SDK 2.0の一部であるMultiSourceFrameクラスについての投稿です。私が理解していることから、このクラスでは、特定の時間に、すべてのセンサーのフレームを取得できます(または、取得するセンサーを選択できます)。したがって、特定の時刻tにおいて、異なるセンサの出力を取得し、これらの出力が同期していることを確認することができます。

私の質問は、このMultiSourceFrameクラスは正確に何を意味しているのですか?それが解決策として提案されないのはなぜですか?第1カテゴリの投稿は2013年以降の投稿であるように見えるので、SDK 2.0がリリースされる前です。ただし、MultiSourceFrameクラスは、以前のバージョンのSDKのAllFramesReadyイベントを置き換えるものとし、AllFramesReadyも解決策として提案されていませんでした。

残念ながら、ドキュメンテーションはそれがどのように機能するかに関する多くの情報を提供していないので、誰かがすでにそれを使用していた場合に私はここで尋ねています。私の質問がばかげていると申し訳ありませんが、そのようなカメラを購入する前に確認したいと思います。

ありがとうございました!そして、必要に応じて、詳細についてはお気軽に:)

+0

...Kinect v2の大きな問題は、ハードウェア要件、特にUSB 3.0コントローラです。試していない限り、あなたの作品が確実かどうかは分かりません。 – HenningJ

+0

@HenningJありがとうございました!前にこの問題は見つかりませんでしたので、ここで本当の助けとなります。このUSB 3.0の問題についてもう少し詳細を教えてください。 –

+0

公式要件によると、IntelまたはRenesas USB 3.0コントローラが必要です。しかし、たとえそれがうまくいくか、それがまったくうまくいくか、そうであれば、どれくらいのFPSが得られるかを予測することは難しいです。確かに知る唯一の方法は、それを試すことです。内蔵のUSB 3コントローラで動作しない場合は、動作するはずのUSB 3 PCIe拡張カードがたくさんあります。 – HenningJ

答えて

1

を誰かspecifically mentioned RGBと深さのフレームとの間の6.25ミリ秒の遅れMultiSourceFrameReaderを使用してlibfreenect2 issueでそれについて議論がありました:

ColorFrameのRelativeTimeは、DepthFrame、InfraredFrame、BodyFrame、BodyIndexFrameのRelativeTimeよりも常に6.25または6.375ms遅れているようです。一方、RelativeTimeは、常にDepthFrame、InfraredFrame、BodyFrame、およびBodyIndexFrameの間で一致します。

私自身の実験でも同じ結果が得られました。しかし、それはフレームのタイムスタンプだけに基づいています。これらのタイムスタンプはKinect v2デバイスから直接取得されるため、100%正確ではない可能性があります。

したがって、深さとRGBフレームの間には遅れがありますが、MultiSourceFrameReaderを使用しても、無視できるほど小さい可能性が最も高いです。あなたは、KinectのV2がSDKに慣れたらMultiSourceFrame/MultiSourceFrameReaderの使用方法については、それは非常に単純です

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 

あなたはKinectのv2のSDKをインストールしたら、あなたは、CoordinateMapping Basicサンプルで詳細を見つけることができます。

+1

こんにちは。私はそのGitHub問題の著者です。明確にするために、私はRelativeTimeがKinect V2デバイスから来ているとは思わない。 libfreenect2の作成者は、USBパケットをリバースエンジニアリングし、そのパケットからのタイムスタンプが間違った解像度を持っています。 RelativeTimeは0.1マイクロ秒の分解能を有するが、USBパケットは0.1ミリ秒の分解能のタイムスタンプのみを有する。だから私の推測では、RelativeTimeはKinect V2デバイスではなく、PC上で計算されるということです。 – Kal

関連する問題