2

当我尝试同时获取深度数据、图像数据和姿势数据时,Tango 似乎正在丢弃图像帧。

我正在尝试捕获深度和图像帧并将它们与姿势数据同步。使用 C point-cloud-jni-example 我添加了代码以将点云数据转储到内存缓冲区,然后转储到文件中。我为 onFrameAvailable() 添加了一个回调,并将图像数据复制到缓冲区,然后复制到文件。由于图像数据为 30 Hz,深度数据为 ~5 Hz,我天真地期望最新图像与最新的深度帧非常接近。时间戳不是很接近。在某些情况下,它们的差异超过 100 毫秒。所以我开始研究 onXYZijAvailable()、onFrameAvailable() 和 onPoseAvailable() 回调的时间以及相应的数据时间戳。

我将 logcat 转储添加到每个回调并打印出系统时间 (std::chrono::system_clock::now()) 和返回数据的 TangoSystem 时间戳,无论是深度、图像还是姿势。其中一些在我们如何计算时间戳差异中进行了描述?.

这是一些姿势时间。sys 时间是执行回调时的当前时钟时间。姿势时间戳来自实际的姿势结构。

             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 毫秒。随后是具有相同或几乎相同时间戳的两个帧。即使在两个连续图像上的时间戳相同的情况下,回调仍然会触发以指示新帧。结果是我错过了每五帧视频。这对于试图匹配深度和图像数据的应用程序来说很糟糕。

我已经从代码中删除了任何额外的处理。在回调中,唯一发生的事情是将数据复制到静态缓冲区。点云的渲染仍在正常渲染线程中完成。

那么,什么给了?Tango 设备不能处理同时运行的深度、图像和姿势回调吗?我是否需要使用 UpdateTexture() 而不是 onFrameAvailable()?

4

1 回答 1

0

在当前版本的 Project Tango 平板电脑中,RGB IR 相机用于深度和彩色图像,它只能为每一帧做一个或另一个。因此,在流中,我们得到 4 个 RGB 帧,然后是 1 个深度帧,从而形成您观察到的模式。这更多是硬件限制。

于 2015-04-21T17:25:57.097 回答