掌桥专利:专业的专利平台
掌桥专利
首页

补偿系统时钟和传感器时钟之间的偏斜的合成时间戳

文献发布时间:2024-04-18 19:58:30


补偿系统时钟和传感器时钟之间的偏斜的合成时间戳

背景技术

计算设备或其他系统可以通信连接到多个不同的传感器。计算设备可以具有其自己的系统时钟,并且传感器可以具有其自己的传感器时钟,或者传感器组可以共享相应的传感器时钟。在将传感器读数发送到计算设备之前,传感器可以将它们的传感器时钟的时间戳应用于传感器读数,所述时间戳指示传感器读数何时发生或被获取。计算设备可以继而将系统时间戳应用于传感器读数,从而指示何时接收到传感器读数。

附图说明

图1是通信连接到多个示例传感器的示例系统的图。

图2是图1的系统的示例缓冲器的图。

图3是图1的系统的示例存储装置的图。

图4是用于生成和应用补偿系统时钟和传感器时钟之间的偏斜的合成时间戳的示例方法的流程图。

图5是用于调整初始系统时间戳以补偿合成时间戳和初始系统时间戳之间的漂移的示例方法的流程图。

图6是用于使用合成时间戳已经应用于的传感器读数的示例方法的流程图。

图7是示例性非暂时性计算机可读数据存储介质的图。

图8是示例方法的流程图。

具体实施方式

如在背景技术中所提到的,计算设备或其他系统可以具有其自己的系统时钟,并且通信地连接到具有其自己的传感器(或设备)时钟或者共享组中的这种时钟的传感器或其他设备。系统和传感器时钟可能彼此不同步。例如,一个时钟的下午4:15:00的时间戳可能与另一个时钟的下午4:15:00的时间戳不对应于相同的时间。此外,不同的时钟可以以不同的速率跟踪时间。例如,一个时钟可能运行得快,在一段时间内获得一秒,而另一个时钟可能运行得慢,在相同或不同的时间段内丢失一秒。因此,具有不同传感器时钟的不同传感器的传感器读数可能具有不同的时间戳,即使它们同时发生。

此外,计算设备或系统可能不会同时从不同的传感器接收传感器读数,即使传感器读数是同时发生的(即,被获取的)。例如,每个传感器和计算设备之间可能有不同的通信等待时间。作为示例,当系统时间时钟读取下午4:15:01时,计算设备可以接收第一传感器读数,并且对应地将下午4:15:01的系统时间戳应用于该传感器读数。然而,来自不同传感器的第二传感器读数可能与第一传感器读数同时发生,但是计算设备可能不会接收第二传感器读数,直到系统时钟读取下午4:15:03,因此对应地将下午4:15:03的系统时间戳应用于该传感器读数。

此外,除非计算设备或系统运行保证在实际接收到传感器读数时应用系统时间戳的实时操作系统,否则指示它们何时被接收的应用于读数的系统时间戳可能是不准确的。例如,传感器读数实际上可能在下午4:15:05被接收,但是可能没有应用到它的系统时间戳,直到系统时钟读取下午4:15:07。在这种情况下,传感器读数具有指示计算设备在下午4:15:07接收到读数的系统时间戳,在实际上该设备在两秒之前接收到传感器读数时。

这种问题会妨碍在不同传感器处发生的计算设备或系统在接收到的传感器读数之间的正确同步。计算设备不能利用传感器应用于读数的传感器时间戳,因为传感器时钟可能彼此不同步。也就是说,计算设备不能假设具有相同传感器时间戳的两个传感器读数在阈值内实际上同时发生。由于系统时间戳应用中的不同通信等待时间和可变延迟,计算设备也不能利用应用于传感器读数的系统时间戳。也就是说,计算设备不能假设具有相同系统时间戳的两个传感器读数在阈值内实际上同时发生。

本文描述的技术改善了这些和其他问题。该技术补偿系统时钟和每个传感器时钟之间的偏斜,并且同样同步系统时钟和传感器时钟。具体地,补偿这种偏斜的合成时间戳被应用于计算设备或其他系统接收的每个传感器读数。因此,同时发生的传感器读数将在阈值内具有相同的合成时间戳。该技术进一步补偿合成时间戳和初始系统时间戳之间的漂移,所述漂移否则会随时间增加。

图1示出了示例系统100。系统100可以是计算设备的形式,诸如台式、膝上型或笔记本计算机,或者智能电话、平板计算设备,或者其他类型的计算设备。系统100通信连接到传感器102A、102B和102C,其统称为传感器102。在该示例中,有三个传感器102,但是可以有多于或少于三个传感器102。传感器102可以均以无线或有线方式通信连接到系统100。作为一个示例,每个传感器102可以经由通用串行总线(USB)连接被连接到系统100。

传感器102可以是不同类型的。例如,传感器可以包括音频捕获和图像捕获传感器。在诸如虚拟现实(VR)、增强现实(AR)和混合现实(MR)技术的扩展现实(XR)技术的背景下,这种图像捕获传感器特别可以包括眼睛跟踪传感器。传感器也可以包括其他类型的传感器,诸如生理传感器。在XR技术的背景下,这种生理传感器可以包括光电容积描记图(PPG)或脉搏跟踪传感器,以及肌电图(EMG)或肌肉反应传感器。

在图1的示例中,传感器102A具有其自己的传感器时钟104A,而传感器102B和102C共享相同的传感器时钟104B。传感器时钟104A和104B统称为传感器时钟104。在其他实施方式中,每个传感器102可以具有其自己的传感器时钟104,和/或传感器102的不同组可以各自共享相同的相应传感器时钟104。传感器时钟104可能彼此不同步。也就是说,读取下午4:15:00的时间的传感器时钟104A可能与传感器时钟104B读取下午4:15:00的时间时不对应于相同的时间。

当传感器102A生成传感器读数106A时,传感器102A应用指示读数106A何时发生的传感器时钟104A的传感器时间戳108A,并将带有时间戳108A的传感器读数106A发送给系统100。类似地,当传感器102B生成传感器读数106B时,传感器102B应用指示读数106B何时发生的传感器时钟104B的传感器时间戳108B,并将它们发送给系统100。当传感器102C生成传感器读数106C时,传感器102C应用指示读数106C何时发生的传感器时钟104B的传感器时间戳108C,并将它们发送给系统100。传感器读数106A、106B和106C统称为传感器读数106,并且传感器时间戳108A、108B和108C统称为传感器时间戳108。

系统100包括系统时钟110,其可以不与任何传感器时钟104同步。系统100包括分别对应于传感器102A、102B和102C的缓冲器112A、112B和112C,并且统称为缓冲器112。也就是说,对于系统100从其接收并存储传感器读数106和传感器时间戳108的每个传感器102都有缓冲器112。例如,缓冲器112可以是易失性半导体存储器。然而,在另一实施方式中,缓冲器112可以使用非易失性存储装置来实现,诸如硬盘驱动器、固态驱动器等。

当系统100接收到传感器读数106A和传感器时间戳108A时,系统100将系统时钟110的相应系统时间戳114A应用于读数106A,并将读数106A、它们的传感器时间戳108A和应用的系统时间戳114A存储在缓冲器112A中。系统时间戳114A至少名义上指示系统100何时从传感器102A接收到传感器读数106A。在系统100运行不是实时操作系统的操作系统的情况下,诸如MICROSOFT WINDOWS操作系统的版本和LINUX操作系统的大部分版本,系统时间戳114A在关于何时接收到传感器读数106A的其指示方面可能是不准确的。

类似地,当系统100接收到传感器读数106B和传感器时间戳108B时,系统100将系统时钟110的相应系统时间戳114B应用于读数106B,并将读数106B、它们的传感器时间戳108B和应用的系统时间戳114B存储在缓冲器112B中。当系统100接收到传感器读数106C和传感器时间戳108C时,系统100将系统时钟110的相应系统时间戳114C应用于读数106C,并将读数106C、它们的传感器时间戳108C和应用的系统时间戳114C存储在缓冲器112C中。系统时间戳114A、114B和114C统称为系统时间戳114,并且如上所述,至少名义上指示系统100何时从传感器102接收到对应的传感器读数106。

系统100还包括存储装置116,其可以是诸如硬盘驱动器、固态驱动器等非易失性存储设备。在该示例中,缓冲器112被描绘为与存储装置116分离,但是代替地可以是存储装置116的一部分。当系统100接收到传感器读数106和传感器时间戳108并将其连同系统时间戳114一起存储在缓冲器112中时,系统100生成合成时间戳118并将其应用于传感器读数106,并将它们存储在存储装置116中。合成时间戳118补偿系统时钟110和传感器时钟104之间和之中的偏斜。因此,在阈值内,具有比另一个传感器读数106的合成时间戳118在时间上更早的合成时间戳118的传感器读数106被保证已经在所述另一个传感器读数106之前发生。

图2详细示出了示例缓冲器200,其可以实现图1的每个缓冲器112。缓冲器200对应于(即,用于)特定传感器,并且包括多个条目202A、202B和202M,其统称为缓冲器条目202。例如,可能有512个这样的条目202。缓冲器200可以是先进先出(FIFO)缓冲器,诸如环形缓冲器。因此,一旦所有条目202都已被填充,最旧的条目202就被新的条目202覆盖。对于每秒多次生成传感器读数的传感器,缓冲器条目202因此可以每秒被重写一次或多次。

每个缓冲器条目202包括传感器读数204、传感器时间戳206、系统时间戳208和瞬时偏斜210。当从传感器接收到传感器读数204连同指示传感器读数204何时发生的其传感器时间戳206时,传感器读数204因此被存储在空的或最旧的缓冲器条目202中。指示何时接收到传感器读数204的系统时间戳208也存储在该缓冲器条目202中。在一个实施方式中,传感器读数204的瞬时偏斜210也被计算并存储在所讨论的缓冲器条目202中。

基于传感器读数204和先前传感器读数204的传感器和系统时间戳206和208来计算传感器读数204的瞬时偏斜210。具体地,传感器读数204的瞬时偏斜210可以被计算为传感器读数204和先前传感器读数204的系统时间戳208之间的差除以传感器读数204和先前传感器读数204的传感器时间戳206之间的差。然而,在从所讨论的传感器接收第一传感器读数204的情况下,瞬时偏斜210可以被设置为1,对应于没有偏斜。

图3详细示出了示例存储装置300,其可以实现图1的存储装置116。存储装置300包括多个条目302A,302B,...,302N,其统称为传感器读数条目302。可以有比缓冲器条目202多得多的传感器读数条目302,并且尽管缓冲器条目202的数量被预先限制到指定的数量,但是条目302的数量实际上是无限的,只要存储装置300具有足够的容量。实际上,随着传感器读数条目302老化,它们可能被周期性地(例如,每天、每月、每年等等)丢弃,或者被移动到不同的存储装置。

每个传感器读数条目302包括传感器读数304和对应的合成时间戳306。当传感器读数204连同它们的传感器时间戳206、系统时间戳208和瞬时偏斜210一起存储在缓冲器200中时,从图2的缓冲器200中读取传感器读数204。针对每个传感器读数204生成并应用合成时间戳306,并且添加传感器读数条目302,用于存储传感器读数204(作为传感器读数304)及其分别应用的合成时间戳306。

存储装置300还包括传感器条目308A、308B和308C,其均对应于不同的传感器,并且被统称为传感器条目308。在该示例中,有三个条目308,对应于图1的三个传感器102。此外,在该示例中,条目308存储在与存储条目302相同的存储装置300中。然而,在另一实施方式中,条目308可以存储在与存储条目302不同的存储装置中,诸如易失性存储装置,如易失性半导体存储器。

每个传感器条目308包括初始传感器时间戳310和初始系统时间戳312,并且还可以包括先前偏斜314。初始传感器时间戳310是从与传感器条目308对应的传感器接收的第一或初始传感器读数304的传感器时间戳310。初始系统时间戳312同样是应用于从所讨论的传感器接收的第一或初始传感器读数304的系统时间戳310。可以调整初始系统时间戳312,以补偿在其生成时的每个合成时间戳306与初始系统时间戳312之间的漂移。先前偏斜314是针对来自传感器条目308对应的传感器的最近接收的传感器读数304计算的偏斜,并且可以用于计算从该传感器接收的下一个传感器读数304的偏斜。

图4示出了用于生成和应用补偿系统时钟和传感器的传感器时钟之间的偏斜的合成时间戳的示例方法400。方法400在每个传感器的基础上执行。也就是说,方法400对于系统(诸如图1的系统100)通信连接的每个传感器独立执行。换句话说,方法400对每个这样的传感器分别重复。方法400可以被实现为程序代码,所述程序代码存储在非暂时性计算机可读数据存储介质上,并且由可以是计算设备的系统的处理器执行。

方法400包括将传感器的先前偏斜设置为对应于系统时钟和传感器时钟之间的同步的初始值(402),诸如一。在第一次从传感器接收到包括传感器时间戳的传感器读数时(404),方法400包括存储该传感器时间戳,连同指示何时接收到传感器读数的系统时钟的系统时间戳(406)。该传感器时间戳和系统时间戳分别是传感器的初始传感器时间戳和初始系统时间戳。

方法400包括将传感器读数、传感器时间戳和系统时间戳存储在传感器的缓冲器中(408),以及计算传感器读数的瞬时偏斜并也将其存储在缓冲器中(410)。方法400包括然后生成针对传感器读数的合成时间戳(412)。例如,可以计算当前存储在缓冲器中的所有传感器读数的平均瞬时偏斜(414)。然后,传感器读数的偏斜可以至少基于传感器读数的平均瞬时偏斜来设置,并且也可以基于先前的偏斜来设置(416)。

例如,传感器读数的偏斜可以最简单地设置为传感器读数的平均瞬时偏斜。代替地,可以基于平均瞬时偏斜和先前偏斜来启发式地设置偏斜。作为一个示例,可以使用常数参数,诸如10

方法400包括将生成的合成时间戳应用于传感器读数(420)。例如,传感器读数连同合成时间戳可以存储在存储装置中。方法400包括然后将先前的偏斜设置为刚刚已经计算的偏斜(422),这可以用于在从传感器接收到下一个传感器读数时设置偏斜。方法400可以包括调整初始系统时间戳以补偿已经生成的合成时间戳和初始系统时间戳之间的漂移(424)。在从传感器接收到包括传感器时间戳的另一传感器读数时(426),方法400在部分408重复。

图5示出了用于补偿生成的合成时间戳和初始系统时间戳之间的漂移的示例方法500。例如,方法500可以作为图4的方法400的部分422来执行。与方法400一样,方法500可以被实现为程序代码,所述程序代码存储在非暂时性计算机可读数据存储介质上,并且由诸如计算设备的执行方法400的系统的处理器来执行。因为方法400是在每个传感器的基础上实现的,并且方法500可以作为该方法400的部分422来执行,所以方法500实际上也是针对每个传感器单独独立执行的。

在不调整初始系统时间戳的情况下,在生成合成时间戳时,最近生成的时间戳和初始系统时间戳之间的漂移将随时间增加,导致合成时间戳与实际系统时钟不相关。也就是说,尽管所有传感器的合成时间戳将相对于彼此在时间上正确排序(在阈值内),但是随着时间的推移,它们将与它们对应的传感器读数发生的实际时间(根据系统时钟)几乎没有关系。因此,方法500通过调整初始系统时间戳来补偿合成时间戳和初始系统时间戳之间的这种漂移。

如果应用于从传感器接收的传感器读数的合成时间戳和应用于该读数的系统时间戳之间的绝对差不大于漂移阈值(502),则方法500结束(504),使得不对传感器的初始系统时间戳进行调整来补偿漂移。然而,在一个实施方式中,阈值可以被设置为零。这实际上意味着,每次生成合成时间戳时,将可能发生初始系统时间戳调整,因为针对传感器读数生成的合成时间戳将与应用于传感器读数的系统时间戳相同的可能性非常低。

相比之下,如果合成时间戳与系统时间戳偏离大于漂移阈值(502),则方法500包括将所讨论的传感器的经校正的初始系统时间戳设置为传感器的初始系统时间戳加上针对传感器读数生成的合成时间戳和应用于该读数的系统时间戳之间的差(506)。方法500包括传感器的新的初始系统时间戳至少基于经校正的初始系统时间戳设置,并且也可以基于初始系统时间戳来设置(508)。例如,新的初始系统时间戳可以最简单地被设置为经校正的初始系统时间戳。

新的初始系统时间戳可以代替地基于经校正的初始系统时间戳和初始系统时间戳启发式地设置。作为一个示例,新的初始系统时间戳可以使用诸如0.005的常数参数作为从初始系统时间戳到经校正的初始系统时间戳的线性插值来计算。方法500包括诸如随时间的推移将传感器的初始系统时间戳改变为新的初始系统时间戳(510)。例如,初始系统时间戳可以被线性调整,使得它在一秒内等于新的初始系统时间戳。

图6示出了使用从一个或多个传感器接收并且合成时间戳已经应用于的传感器读数的示例方法600。方法600可以由执行图4和5的方法400和500的相同系统来执行。方法600同样可以被实现为程序代码,所述程序代码存储在非暂时性计算机可读数据存储介质上并可由可以是计算设备的系统的处理器执行的。

一旦合成时间戳已经被生成并被应用于相应的传感器读数,传感器读数就在阈值内相对于彼此被适当地在时间上排序。因此,保证具有相同合成时间戳的传感器读数已经在阈值内同时发生。具有对应于比另一个传感器读数的合成时间戳更早或更晚时间的合成时间戳的传感器读数同样被保证在阈值内分别发生在所述另一个传感器读数之前或之后。

至于已经描述的用于生成合成时间戳的技术,合成时间戳的正确性或准确性中的阈值已经被证明在几毫秒内。因此,该技术可以比其他同步技术更精确地同步传感器和系统时钟。例如,依赖于网络时间协议(NTP)的同步技术通常在数百毫秒内是准确的,因此比上述技术的准确性低两个数量级。因此,所描述的技术允许在需要更高同步精度的情况下使用。

方法600包括检索传感器读数及其合成时间戳(602),诸如在生成合成时间戳并将合成时间戳应用于传感器读数之后,从已经存储读数的存储装置中检索。方法600包括然后基于传感器读数和合成时间戳执行动作(604)。由于如在合成时间戳内有效编码的系统时钟和(多个)传感器时钟之间的偏斜的补偿,提高了动作的正确性。

例如,在XR技术的背景下,大约同时(例如,在几毫秒的跨度内)发生的传感器读数可以用作做出关于用户的推断的基础。例如,一种类型的生物测定推断处理是认知负荷的估计或测定,其可以非限制性地定义为表示执行特定任务对用户的认知系统施加的负荷的多维构造。为了正确地执行这种生物测定推断处理,传感器读数必须正确地在时间上排序,正如它们所应用的合成时间戳的情况一样。

基于生物测定推断,可以调整系统在显示设备上显示给用户的信息。例如,如果用户的认知负荷低,则系统可以在给定时间向用户显示更多信息,或者可以加快要求用户执行给定任务的速度。类似地,如果用户的认知负荷高,则系统可以向用户显示较少的信息,以便不使他或她不知所措,或者减慢要求用户执行给定任务的速度。

然后,在这种情况下,从传感器读数(按照它们的合成时间戳正确地时间排序)进行生物测定推断,以及对显示给系统的信息的所得到的调整,构成了所执行的动作。也就是说,基于传感器读数及其应用的合成时间戳来调整或修改系统的操作。如果代替地基于应用于传感器读数的系统时间戳或它们的传感器时间戳来执行动作,则生物测定推断和随后的操作调整将更可能是不正确的,因为来自不同传感器(以及来自同一传感器)的传感器读数的时间排序将更可能是不准确的。

图7示出了存储程序代码702的示例计算机可读数据存储介质700,程序代码702可由处理器执行以执行处理。该处理包括从硬件传感器接收当前传感器读数(704)。该当前传感器读数包括传感器时钟的当前传感器时间戳,其指示当前传感器读数何时发生在硬件传感器处。该处理包括将当前传感器读数连同指示何时接收到当前传感器读数的系统时钟的当前系统时间戳一起存储在传感器读数的缓冲器中(706)。该处理包括基于缓冲器内的传感器读数的平均瞬时偏斜和指示何时接收到第一传感器读数的初始系统时间戳,生成补偿系统时钟和传感器时钟之间的偏斜的当前传感器读数的当前合成时间戳(708)。该处理包括然后将当前合成时间戳应用于当前传感器读数(710)。

图8示出了示例方法800。方法800可以由诸如计算设备之类的系统来执行。方法800包括,当从硬件传感器接收到传感器读数时,将每个传感器读数连同指示何时接收到传感器读数的系统时钟的系统时间戳一起存储在缓冲器内(802)。每个传感器读数包括传感器时钟的传感器时间戳,其指示传感器读数何时发生在硬件传感器处。方法800包括,响应于每个传感器读数的接收,生成补偿系统时钟和传感器时钟之间的偏斜的合成时间戳,并将合成时间戳应用于传感器读数(804)。所述合成时间戳是基于缓冲器内的传感器读数的平均偏斜和指示何时接收到第一传感器读数的初始系统时间戳生成的。

已经描述了用于补偿系统时钟和传感器时钟之间的偏斜,以及用于补偿生成的合成时间戳和初始系统时间戳之间的漂移的技术,该初始系统时间戳指示何时第一次从传感器接收到传感器读数。通过在接收到传感器读数时生成并应用合成时间戳,传感器读数在阈值(诸如几毫秒)内被正确地在时间上排序。因此,基于已经应用了合成时间戳的传感器读数,可以更正确地执行动作。所述技术可以与采用传感器的XR技术以及其他场景结合使用。

技术分类

06120116500986