我们将时间戳作为姿势、图片和点数据的双精度值 - 它们并不总是对齐 - 我如何计算两个时间戳之间的时间距离?是的,我知道如何减去两个双精度数,但我完全不确定增量与时间的对应关系。
2 回答
我有一些有趣的时间戳数据可以阐明您的问题,但没有准确回答。我一直在尝试将深度帧与图像帧相匹配——就像很多人在这个 Tango 标签下发帖一样。我的数据不完全匹配,我认为我的投影矩阵和点重投影存在问题。然后我检查了深度帧和图像帧上的时间戳,发现它们相差了 130 毫秒。很多!即使只要有深度帧可用,我都会获得最新的图像。所以我回去只测试时间戳数据。
我正在使用基于 point-cloud-jni-example 的代码在 Native 中工作。对于 onXYZijAvailable()、onFrameAvailable() 和 onPoseAvailable() 中的每一个,我都在倾倒时间信息。在 XYZ 和 Frame 情况下,我将返回的数据复制到静态缓冲区以供以后使用。对于这个测试,我忽略了缓冲的图像帧,并且 XYZ 深度数据显示在示例代码的正常 OpenGL 显示循环中。捕获的数据如下所示:
callback type : systime : timestamp : last pose
I/tango_jni_example( 3247): TM CLK Img 5.420798 110.914437 110.845522
I/tango_jni_example( 3247): TM CLK XYZ 5.448181 110.792470 110.845522
I/tango_jni_example( 3247): TM CLK Pose 5.454577 110.878850
I/tango_jni_example( 3247): TM CLK Img 5.458924 110.947708 110.878850
I/tango_jni_example( 3247): TM CLK Pose 5.468766 110.912178
系统时间来自每个回调内部运行的 std::chrono::system_clock::now() 。(应用程序启动时的开始时间偏移。)时间戳是来自 XYZij、图像或姿势结构的实际时间戳数据。对于深度和图像,我还列出了最近的姿势时间戳(从服务开始到设备,给定时间为 0.0)。快速分析大约 2 分钟的样本数据得出以下初步结论:
Pose data is captured at VERY regular intervals of 0.033328 seconds.
Depth data is captured at pretty regular intervals of 0.2 seconds.
Image data is captured at odd intervals
with 3 or 4 frames at 0.033 seconds
then 1 frame at about 0.100 seconds
often followed by a second frame with the same timestamp
(even though it is not reported until the next onFrameAvailable()?)
这是返回结构中的实际时间戳数据。“真实的?” 回调之间的经过时间变化更大。姿势回调会在 0.010 到 0.079 秒之间触发,即使姿势时间戳在 0.033 处坚如磐石。图像(帧)回调在 0.025 和 0.040 之间触发 4 次,然后在 0.065 左右给出一个长时间的停顿。这就是在连续调用中返回具有相同时间戳的两个图像的地方。相机似乎在跳帧?
因此,要匹配深度、图像和姿势,您确实需要缓冲多个返回及其相应的时间戳(环形缓冲区?),然后将它们匹配为您想要作为主控的任何值。姿势时间是最稳定的。
注意:我没有尝试获取特定“中间”时间的姿势,以查看返回的姿势是否在 onPoseAvailable() 给出的值之间进行插值。
我有 logcat 文件和各种可用的 awk 提取。我不知道如何发布那些(1000 行)。
我认为基本问题是如何将姿势、深度和彩色图像数据同步到一个帧中。所以要回答这个问题,实际上有两个步骤
- 将姿势同步到彩色图像或深度:要做到这一点,最简单的方法是使用TangoService_getPoseAtTime函数,它基本上使您能够查询具有特定时间戳的姿势。即,您有一个可用的深度点云,它为您提供了该深度帧的时间戳,然后您可以使用深度点云时间戳来查询相应的姿势。
- 同步彩色图像和深度图像:目前,您必须在应用程序级别缓冲深度点云或彩色图像,并根据其中一个的时间戳,在缓冲区中查询另一个的数据。TangoXYZij数据结构中有一个名为color_image的字段,评论说它是为将来使用而保留的,因此内置的同步功能可能会在未来的版本中出现。