2

深度データ、画像データ、およびポーズ データを同時に取得しようとすると、Tango が画像フレームをドロップしているように見えます。

深度と画像フレームをキャプチャして、ポーズ データと同期しようとしています。C point-cloud-jni-example を使用して、ポイント クラウド データをメモリ バッファーにダンプしてからファイルにダンプするコードを追加しました。onFrameAvailable() のコールバックを追加し、画像データをバッファにコピーしてからファイルにコピーしました。画像データは 30 Hz で深度データは ~5 Hz であるため、最新の画像が最新の深度フレームとかなり密接に一致することを素朴に期待していました。タイムスタンプはあまり近くありませんでした。場合によっては、100 ミリ秒以上異なっていました。そこで、onXYZijAvailable()、onFrameAvailable()、および onPoseAvailable() コールバックと対応するデータ タイムスタンプのタイミングを調査し始めました。

各コールバックに logcat ダンプを追加し、システム時間 (std::chrono::system_clock::now()) と返されたデータ (深度、画像、ポーズ) の TangoSystem タイムスタンプを出力しました。これの一部は、タイムスタンプの差分を正確に計算する方法で説明されていますか? .

ここでポーズのタイミングです。sys time は、コールバックが実行されたときの現在のクロック時間です。ポーズのタイムスタンプは、実際のポーズ構造体からのものです。

             sys time   pose timestamp
TM CLK Pose  10.008419  245.976464
TM CLK Pose  10.025983  246.009791
TM CLK Pose  10.124470  246.043119
TM CLK Pose  10.133542  246.076447
TM CLK Pose  10.147136  246.109774
TM CLK Pose  10.192470  246.143102
TM CLK Pose  10.200370  246.176430
TM CLK Pose  10.225367  246.209757
TM CLK Pose  10.300509  246.243085
TM CLK Pose  10.311827  246.276413
TM CLK Pose  10.335946  246.309740
TM CLK Pose  10.399209  246.343068
TM CLK Pose  10.407704  246.376396
TM CLK Pose  10.426889  246.409723
TM CLK Pose  10.504403  246.443051

ポーズごとの対応する違いをここに示します。ポーズのタイミングは、記録されたタイムスタンプに基づいて 33 ミリ秒と安定しています。おそらくアプリケーションの負荷が原因で、コールバック時間はかなり異なります。

time:  0.017564   pose:  0.033327
time:  0.098487   pose:  0.033328
time:  0.009072   pose:  0.033328
time:  0.013594   pose:  0.033327
time:  0.045334   pose:  0.033328
time:  0.007900   pose:  0.033328
time:  0.024997   pose:  0.033327
time:  0.075142   pose:  0.033328
time:  0.011318   pose:  0.033328
time:  0.024119   pose:  0.033327
time:  0.063263   pose:  0.033328
time:  0.008495   pose:  0.033328
time:  0.019185   pose:  0.033327
time:  0.077514   pose:  0.033328
time:  0.011892   pose:  0.033328

ここでは、いくつかの深度タイミングと対応する違いを示します。タイムスタンプは約 0.2 秒で非常に安定しています。

             sys time : xyz timestamp
TM CLK XYZ   10.161695  246.017013
TM CLK XYZ   10.363448  246.216639
TM CLK XYZ   10.595306  246.438693
TM CLK XYZ   10.828368  246.668223
TM CLK XYZ   11.025787  246.890277
TM CLK XYZ   11.233364  247.097379
TM CLK XYZ   11.433941  247.297005
TM CLK XYZ   11.633176  247.496631
TM CLK XYZ   11.830650  247.696257

time:  0.201753   depth:  0.199626
time:  0.231858   depth:  0.222054
time:  0.233062   depth:  0.229530
time:  0.197419   depth:  0.222054
time:  0.207577   depth:  0.207102
time:  0.200577   depth:  0.199626
time:  0.199235   depth:  0.199626
time:  0.197474   depth:  0.199626
time:  0.196935   depth:  0.199626

ここにいくつかの画像のタイミングがあります。「---」と記された行は問題のあるフレームです。

             sys time : img timestamp
TM CLK Img   10.041056  246.005896
TM CLK Img   10.074105  246.105709   -----
TM CLK Img   10.106492  246.105709
TM CLK Img   10.142581  246.138980
TM CLK Img   10.176176  246.172251
TM CLK Img   10.241146  246.205522
TM CLK Img   10.274909  246.305335   -----
TM CLK Img   10.317819  246.305335
TM CLK Img   10.361682  246.345225
TM CLK Img   10.397533  246.390139
TM CLK Img   10.472859  246.430886
TM CLK Img   10.514923  246.538175   -----
TM CLK Img   10.551663  246.545651
TM CLK Img   10.585960  246.586398
TM CLK Img   10.626671  246.620526
TM CLK Img   10.705709  246.656249
TM CLK Img   10.734324  246.767705   -----
TM CLK Img   10.774233  246.768562
TM CLK Img   10.808848  246.804285
TM CLK Img   10.847230  246.842580
TM CLK Img   10.927872  246.878303
TM CLK Img   10.957309  246.989759   -----
TM CLK Img   10.991136  246.990616

上記のリストに対応する時差は次のとおりです。

time:  0.033049   image:  0.099813
time:  0.032387   image:  0.000000
time:  0.036089   image:  0.033271
time:  0.033595   image:  0.033271
time:  0.064970   image:  0.033271
time:  0.033763   image:  0.099813
time:  0.042910   image:  0.000000
time:  0.043863   image:  0.039890
time:  0.035851   image:  0.044914
time:  0.075326   image:  0.040747
time:  0.042064   image:  0.107289
time:  0.036740   image:  0.007476
time:  0.034297   image:  0.040747
time:  0.040711   image:  0.034128
time:  0.079038   image:  0.035723
time:  0.028615   image:  0.111456
time:  0.039909   image:  0.000857
time:  0.034615   image:  0.035723
time:  0.038382   image:  0.038295
time:  0.080642   image:  0.035723
time:  0.029437   image:  0.111456
time:  0.033827   image:  0.000857

4 フレームごとに、イメージ時間に大きな遅延 (約 100 ミリ秒) があることに注意してください。これに、同じまたはほぼ同じタイムスタンプを持つ 2 つのフレームが続きます。連続する 2 つの画像のタイムスタンプが同じ場合でも、新しいフレームを示すためにコールバックが発生します。その結果、ビデオの 5 フレームごとに欠落しています。これは、深度と画像データを一致させようとするアプリケーションにとって悪臭を放ちます。

コードから余分な処理を取り除きました。コールバックで発生する唯一のことは、データが静的バッファーにコピーされることです。ポイント クラウドのレンダリングは、通常のレンダリング スレッドで引き続き実行されます。

それで、何が得られますか?Tango デバイスは、同時に実行されている深度、画像、およびポーズのコールバックをすべて処理できませんか? onFrameAvailable() の代わりに UpdateTexture() を使用する必要がありますか?

4

1 に答える 1