发明内容
本发明提供一种消息同步方法和装置、无人驾驶系统以及可移动平台。
具体地,本发明是通过如下技术方案实现的:
根据本发明的第一方面,提供一种消息同步方法,用于自动化系统中的消息同步模块,所述自动化系统具有多个传感器,多个所述传感器的类型不同和/或安装位置不同,所述方法包括:
确定至少一组待同步的消息,所述待同步的消息包括类型不同的至少两个传感器输出的消息和/或安装位置不同的至少两个传感器输出的消息;
将相同时间戳的每组所述待同步的消息缓存在同一存储队列中。
根据本发明的第二方面,提供一种消息同步装置,所述消息同步装置应用在自动化系统中,所述自动化系统具有多个传感器,多个所述传感器的类型不同和/或安装位置不同,所述消息同步装置包括:
存储装置,用于存储程序指令;
一个或多个处理器,调用所述存储装置中存储的程序指令,当所述程序指令被执行时,所述一个或多个处理器单独地或共同地被配置用于:
确定至少一组待同步的消息,所述待同步的消息包括类型不同的至少两个传感器输出的消息和/或安装位置不同的至少两个传感器输出的消息;
将相同时间戳的每组所述待同步的消息缓存在同一存储队列中。
根据本发明的第三方面,提供一种无人驾驶系统,包括:
多个传感器,多个所述传感器的类型不同和/或安装位置不同;
存储装置,用于存储程序指令;
一个或多个处理器,调用所述存储装置中存储的程序指令,当所述程序指令被执行时,所述一个或多个处理器单独地或共同地被配置用于:
确定至少一组待同步的消息,所述待同步的消息包括类型不同的至少两个传感器输出的消息和/或安装位置不同的至少两个传感器输出的消息;
将相同时间戳的每组所述待同步的消息缓存在同一存储队列中。
根据本发明的第四方面,提供一种可移动平台,包括:
机身;
动力系统,安装在所述机身,用于为所述可移动平台提供动力;
多个传感器,设于所述机身内,多个所述传感器的类型不同和/或安装位置不同;
存储装置,用于存储程序指令;以及
一个或多个处理器,调用所述存储装置中存储的程序指令,当所述程序指令被执行时,所述一个或多个处理器单独地或共同地被配置用于:
确定至少一组待同步的消息,所述待同步的消息包括类型不同的至少两个传感器输出的消息和/或安装位置不同的至少两个传感器输出的消息;
将相同时间戳的每组所述待同步的消息缓存在同一存储队列中。
根据本发明的第五方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时用于:
确定至少一组待同步的消息,所述待同步的消息包括类型不同的至少两个传感器输出的消息和/或安装位置不同的至少两个传感器输出的消息;
将相同时间戳的每组所述待同步的消息缓存在同一存储队列中。
由以上本发明实施例提供的技术方案可见,本发明将相同时间戳的每组待同步的消息缓存在同一存储队列中,降低了系统内存空间的消耗速度,同时能够更快地获取同一时刻的消息。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在不冲突的情况下,下述的实施例及实施方式中的特征可以相互组合。
本发明实施例提供一种消息同步方法,该方法用于自动化系统中的消息同步模块,其中,自动化系统具有多个传感器,多个所述传感器的类型不同和/或安装位置不同。该自动化系统可以为但不限于无人驾驶系统、汽车、无人飞行器、遥控车、无人船或机器人等可移动平台,也可以为为固定平台。以自动化系统为无人驾驶系统为例,无人驾驶系统可以包括IMU、摄像头和雷达,可以通过IMU、摄像头和雷达中的任一个或至少两个的组合来测量该无人驾驶系统的运动信息,在一些情况下,对IMU、摄像头和雷达中至少两个在同一时刻输出的消息进行融合,以获得更加精确的运动信息。无人驾驶系统可以包括多个雷达,多个雷达安装位置不同,如可以安装在车身左侧和右侧,可以对车身左侧和右侧的雷达在同一时刻输出的消息进行融合,检测车身周围障碍物情况。在一个具体的场景下,还可以是不同种类的多个雷达安装在车身的不同位置,例如在车身前侧安装两个激光雷达,在车身顶部安装一个毫米波雷达,此时上述三个雷达可以同时采集信号,并将同一时刻输出的消息进行融合。
如图2所示,所述消息同步方法包括可以包括如下步骤:
S201:确定至少一组待同步的消息,待同步的消息包括类型不同的至少两个传感器输出的消息和/或安装位置不同的至少两个传感器输出的消息;
如在无人驾驶系统中,待同步的消息为一组,可选地,该组待同步的消息包括IMU、摄像头和雷达输出的消息中的至少两个;可选地,该组待同步的消息包括车身左侧和右侧的雷达输出的消息。可以理解,在无人驾驶系统中,待同步的消息可以为两组,如上述两组待同步的消息的组合;当然,待同步的消息还可以为两组以上。
不同的传感器在采集数据时存在不同程度的延迟和丢帧,随着传感器数量的增加,导致每一个时刻同步上所有传感器的消息是非常困难的,又因为不同的传感器所采集的消息存在冗余,请求设备有时需要个别传感器的消息就能输出稳定的结果。
待同步的消息可以为请求设备根据自身需要同步的消息向消息同步模块请求确定,请求设备与消息同步模块能够进行通信。其中,请求设备可以为自动化系统中的一个模块,也可以为外部设备。
在某些实施例中,请求设备在消息同步模块上注册待同步的消息,消息同步模块确定至少一组待同步的消息的过程包括如下两个步骤:
(1)接收请求待同步的消息的请求设备的发送的注册消息;
注册消息携带有至少一组待同步的消息的消息类型,如请求设备需要同步消息A、消息C以及消息D,则请求设备会将消息A、消息C以及消息D的消息类型携带在发送至消息同步模块的注册消息中。可以理解,注册消息不仅可以携带至少一组待同步的消息的消息类型,还可以携带其他信息。
(2)对注册消息进行解析,获得至少一组待同步的消息中每一消息的消息类型。
本实施例的自动化系统初次启动时,请求设备在消息同步模块上进行注册。本实施例中,请求设备在消息同步模块上进行注册时,告知消息同步模块其所需要同步的消息,后续自动化系统工作过程中,无需请求设备触发,消息同步模块会自动将相同时间戳的每组待同步的消息缓存在同一存储队列中,基于该方式,消息同步更加及时,同时减少了请求设备与消息同步模块之间的数据传输量。可选的,时间戳以消息同步模块的时钟系统为时间基准。
在某些实施例中,请求设备在需要消息同步模块进行待同步的消息的同步时,发送触发信号至消息同步模块,该触发信号携带有待同步的消息中每一消息的消息类型;消息同步模块在接收到请求设备发送的触发信号后,获取触发信号中的每组待同步的消息中每一消息的消息类型,再进行待同步的消息的同步过程,即将相同时间戳的每组待同步的消息缓存在同一存储队列中。
S202:将相同时间戳的每组待同步的消息缓存在同一存储队列中。
在一具体实施例中,待同步的消息包括以下几组:(1)消息A、消息B、消息C、消息D和消息E;(2)消息A、消息B、消息C和消息D;(3)消息A、消息C和消息D;(4)消息C和消息D。
如图3所示,消息同步模块在50ms采集到消息A、消息B、消息C、消息D和消息E,并将50ms采集到的消息A、消息B、消息C、消息D和消息E缓存在存储队列3中;消息同步模块在100ms采集到消息A、消息B、消息C和消息D,并将100ms采集到的消息A、消息B、消息C和消息D缓存在存储队列2中;消息同步模块在150ms采集到消息A、消息C和消息D,并将150ms采集到的消息A、消息C和消息D缓存在存储队列1中;消息同步模块在200ms采集到消息C和消息D,并将200ms采集到的消息C和消息D缓存在存储队列0中。
本实施例中,时间戳的数值越大,该时间戳对应的采集时刻越晚,如时间戳为50ms对应的采集时刻早于时间戳为100ms对应的采集时刻,时间戳为100ms对应的采集时刻早于时间戳为150ms对应的采集时刻,以此类推。
进一步的,参见图4,消息同步模块在执行步骤S201之后,执行步骤S202之前,还包括如下步骤:
S401:获取待同步的消息对应的传感器中,每一传感器输出消息的频率;
不同类型的传感器由于性能不同,输出消息的频率也会不同,例如,在无人驾驶系统中,IMU输出消息的频率通常高于摄像头输出的消息的频率,可选的,IMU输出消息的频率为100Hz,摄像头输出消息的频率为20Hz。
S402:根据待同步的消息中频率最小的消息,确定存储队列个数。
根据待同步的消息中频率最小的消息,确定存储队列个数的实现方式可包括但不限于如下两种:
(1)当获得待同步的消息中频率最小的消息时,建立新的存储队列。
(2)当获得待同步的消息中频率最小的消息时,从预先建立的存储队列中获得未存储消息的存储队列。
本实施例中,预先建立的存储队列能够循环使用,在对存储队列中的消息进行处理后或当存储队列中的消息的时间戳早于预设时间戳时,可将该存储队列中的消息进行清除,从而确保该存储队列循环使用。
在无人驾驶系统中,需要将IMU输出消息和摄像头输出的消息进行同步。每次同步时,消息同步模块在获得摄像头输出的消息时,建立新的存储队列或从预先建立的存储队列中获得未存储消息的存储队列,再将当前获得的摄像头的消息以及同一时刻(即获得摄像头的消息的时刻)获得的IMU的消息存储在上述存储队列中。
图5为本发明实施例提供的一种将相同时间戳的每组待同步的消息缓存在同一存储队列中的实现方式流程图,如图5所示,在S202时,可以包括如下步骤:
S501:当获得待同步的消息中频率最小的消息时,获取同一时刻待同步的消息中的其他消息;
该步骤中,同一时刻即为消息同步模块获得待同步的消息中频率最小的消息的时刻。
S502:将同一时刻获得的待同步的消息缓存在当前确定的存储队列中。
至此,消息同步模块完成了待同步的消息的同步过程。本发明实施例的消息同步方法,将相同时间戳的每组待同步的消息缓存在同一存储队列中,降低了系统内存空间的消耗速度,同时能够更快地获取同一时刻的消息,本发明实施例的消息同步方法更加灵活且节省内存空间。
现有自动化系统提供的同步机制,仅允许用户在初始化时指定需要同步的消息,然后消息同步模块收集齐相同时间戳的消息后调用用户注册的回调函数,在这种方案下,每次执行回调函数都是相同的几路消息,如果传感器的消息丢失或者延迟、会造成用户回调函数的频率下降和处理延迟,传感器硬件的冗余设计不能很好的发挥互补的作用,消息同步模块的实时性不能得到保证。
针对链路中数量众多的传感器消息,本发明实施例在将相同时间戳的每组待同步的消息缓存在同一存储队列中之后,还为请求设备提供查询回调(query_callback),用于查询当前缓存有待同步的消息的存储队列的情况;再由请求设备将满足需求的存储队列的相关信息返回给消息同步模块;然后,消息同步模块将请求设备选择的存储队列中的相应消息进行处理,调用预设的处理回调(process_callback)。基于上述实现方式,请求设备可以自由选择消息同步模块中的消息进行处理,并且,采用两次回调的方式,降低了存储队列维护成本,同时能够充分发挥传感器冗余设计的可靠性,图6为上述实现方式的具体实现过程。
如图6所示,在将相同时间戳的每组待同步的消息缓存在同一存储队列中之后,所述消息同步方法还可以包括如下步骤:
S601:若检测到消息同步模块满足预设的触发策略,则发送当前缓存有待同步的消息的存储队列的第一队列信息至请求待同步的消息的请求设备;
该步骤即为消息同步模块为请求设备提供的查询回调的实现过程,通过该步骤,将当前缓存有待同步的消息的存储队列的第一队列信息返回给请求设备,为请求设备提供了查询当前某一个存储队列中是否有某种类型消息的接口。其中,第一队列信息即为用于表征当前缓存有待同步的消息的存储队列的相关信息。
在某些实施例中,第一队列信息至少包括:当前缓存有待同步的消息的存储队列的身份标识,即身份ID。如图3所示,当前缓存有待同步的消息的存储队列包括存储队列0、存储队列1、存储队列2和存储队列3,消息同步模块在检测到消息同步模块满足预设的触发策略时,将存储队列0、存储队列1、存储队列2和存储队列3的身份ID发送至请求设备。
进一步可选的,第一队列信息还可以包括如下至少一个:当前缓存有待同步的消息的存储队列的总数;每个缓存有待同步的消息的存储队列中缓存的消息的个数;每个缓存有待同步的消息的存储队列的延迟情况。请求设备可以根据第一队列信息,选择待处理的存储队列,消息处理策略更加灵活。可以理解,第一队列信息所包含的内容不限于上述实施例列举的内容,还可以包含其他用于表征当前缓存有待同步的消息的存储队列的信息。
可以按照消息类型或者定时器方式触发消息同步模块执行query_callback,也即,按照消息类型或者定时器方式来判断消息同步模块是否满足预设的触发策略。可选的,在某些实施例中,消息同步模块在确定该消息同步模块获取到特定类型的消息时,确定该消息同步模块满足预设的触发策略,比如,当消息同步模块在同一时刻获取到消息C和消息D,则触发消息同步模块执行query_callback。
在某些实施例中,请求设备指定消息同步模块按照预设时间间隔执行query_callback,具体的,消息同步模块在确定当前至上一次检测到该消息同步模块满足预设的触发策略的时刻的时间间隔为预设时间间隔时,确定该消息同步模块满足预设的触发策略。预设时间间隔可根据请求设备的实际需求设定,如10ms、20ms等等。
另外,在某些实施例中,在将相同时间戳的每组待同步的消息缓存在同一存储队列中之后,发送当前缓存有待同步的消息的存储队列的第一队列信息至请求待同步的消息的请求设备之前,所述消息同步方法还可以包括:按照当前缓存有待同步的消息的存储队列各自缓存消息的时间戳的先后顺序,对当前缓存有待同步的消息的存储队列进行排序,从而方便根据存储队列存储消息的时间先后顺序执行process_callback。在图3所示实施例中,当前缓存有待同步的消息的存储队列各自缓存消息的时间戳的先后顺序为:存储队列3缓存消息的时间戳->存储队列2缓存消息的时间戳->存储队列1缓存消息的时间戳->存储队列0缓存消息的时间戳,在排序后,存储队列的顺序为:存储队列0->存储队列1->存储队列2->存储队列3,即存储队列0位于最上方,存储队列3位于最下方。
S602:接收请求设备返回的当前缓存有待同步的消息的存储队列中待处理的存储队列的第二队列信息;
该步骤即为请求设备将满足需求的存储队列的相关信息返回给消息同步模块的实现过程。其中,第二队列信息即为用于表征待处理的存储队列的相关信息。第二队列信息与第一队列信息的内容可以相同,也可以不相同。
可选的,第二队列信息包括:待处理的存储队列的身份标识。进一步的,在某些实施例中,第二队列信息还可以包括:处理策略,该处理策略可以包括:存储队列中待处理的消息的消息类型和对应的处理方式。
S603:根据第二队列信息以及预设的处理策略,对对应的存储队列进行处理。
该步骤即为消息同步模块为请求设备提供的处理回调的实现过程。
在步骤S603中,对应的存储队列可以包括一个或多个。
当对应的存储队列为一个时,步骤S603的实现过程可以包括:根据预设的处理策略,对该对应的存储队列进行处理。
当对应的存储队列包括多个时,可以根据对应的存储队列的延时情况进一步选择步骤S603的实现方式,若对应的存储队列延时较为严重,则对多个存储队列的消息的时间戳中距离当前较早的时间戳的存储队列进行处理的意义可能不大且及时性较差,故可以选择对多个存储队列的消息的时间戳中距离当前最近的时间戳的存储队列进行处理;若对应的存储队列不存在延时或者延时较小,则可按照多个存储队列的消息的时间戳的先后顺序依次对对应的存储队列进行处理。具体的,在某些实施例中,当对应的存储队列包括多个时,若对应的存储队列的延迟时长大于预设时长,则对多个存储队列的消息的时间戳中距离当前最近的时间戳的存储队列进行处理;在某些实施例中,当对应的存储队列包括多个时,若对应的存储队列的延迟时长小于或等于预设时长,则按照多个存储队列的消息的时间戳的先后顺序依次对对应的存储队列进行处理,即由多个存储队列的消息的时间戳由远及近的顺序依次对对应的存储队列进行处理。
本实施例中,处理策略包括:对应的存储队列中待处理的消息的消息类型和对应的处理方式。可以理解,处理策略还可以包括其他内容。其中,处理方式可以包括对消息进行复制和/或删除,例如,在某些实施例中,根据对应的存储队列中待处理的消息的消息类型,对对应的消息进行复制;在某些实施例中,根据对应的存储队列中待处理的消息的消息类型,对对应的消息进行删除;在某些实施例中,根据对应的存储队列中待处理的消息的消息类型,对该对应的存储队列中的部分消息进行复制、另一部分消息进行删除。当然,处理方式可以包括其他方式,不限于消息复制和删除。
可选的,触发策略和/或处理策略也由请求设备在消息同步模块上注册,具体的,在检测到消息同步模块满足预设的触发策略之前,所述消息同步方法还可以包括:
(1)接收请求设备的发送的注册消息;
(2)对注册消息进行解析,获得触发策略和/或处理策略。
本实施例中,请求设备在消息同步模块上进行注册时,告知消息同步模块执行query_callback的触发策略和/或process_callback采用的处理策略,后续自动化系统工作过程中,消息同步模块在确定该消息同步模块满足注册时设定的触发策略时,即执行query_callback,并采用注册时设定的处理策略对请求设备根据query_callback返回的内容选择的待处理的存储队列中的对应消息类型的消息进行处理。
当然,请求设备还可以选择其他时刻告知消息同步模块执行query_callback的触发策略和/或process_callback采用的处理策略,不限于在注册时告知消息同步模块执行query_callback的触发策略和/或process_callback采用的处理策略。
在某些实施例中,为确保预先建立的存储队列循环可用,在根据第二队列信息以及预设的处理策略,对对应的存储队列进行处理之后,所述消息同步方法还可以包括:对当前缓存有待同步的消息的存储队列中,缓存消息的时间戳在当前处理的存储队列缓存消息的时间戳之前的存储队列所缓存的消息进行删除处理。
对于上述实施例的方法,本发明实施例还提供一种消息同步装置,该消息同步装置应用在自动化系统中,该消息同步装置实现消息同步的方式与上述实施例的消息同步模块实现消息同步的方式相类似。如图7所示,本发明实施例的消息同步装置包括第一存储装置和第一处理器。
其中,第一存储装置,用于存储程序指令;一个或多个第一处理器,调用第一存储装置中存储的程序指令,当程序指令被执行时,一个或多个第一处理器单独地或共同地被配置用于:确定至少一组待同步的消息,待同步的消息包括类型不同的至少两个传感器输出的消息和/或安装位置不同的至少两个传感器输出的消息;将相同时间戳的每组待同步的消息缓存在同一存储队列中。
第一处理器可以实现如本发明图2、图4-图6所示实施例的消息同步方法,可参见上述实施例的消息同步方法对本实施例的消息同步装置进行说明。
本发明实施例还提供一种无人驾驶系统,参见图8,所述无人驾驶系统可以包括传感器、第二存储装置和第二处理器。其中,传感器包括多个,多个传感器的类型不同和/或安装位置不同,例如,传感器可以包括多种类型不同但均可以用于实现同一功能的传感器,如IMU、摄像头和雷达;传感器还可以包括类型相同但安装位置不同的传感器,如安装在无人驾驶系统的机身左侧和右侧的雷达。
第二存储装置,用于存储程序指令;一个或多个第二处理器,调用存第二储装置中存储的程序指令,当程序指令被执行时,一个或多个第二处理器单独地或共同地被配置用于:确定至少一组待同步的消息,待同步的消息包括类型不同的至少两个传感器输出的消息和/或安装位置不同的至少两个传感器输出的消息;将相同时间戳的每组待同步的消息缓存在同一存储队列中。
第二处理器可以实现如本发明图2、图4-图6所示实施例的消息同步方法,可参见上述实施例的消息同步方法对本实施例的无人驾驶系统进行说明。
上述实施例的消息同步模块或消息同步装置可以为无人驾驶系统中的一个模块。
本发明还提供一种可移动平台,参见图9,该可移动平台可以包括机身、动力系统、传感器、第三存储装置和第三处理器。其中,动力系统安装在机身,用于为可移动平台提供动力。传感器包括多个,多个传感器的类型不同和/或安装位置不同,传感器可以包括多种类型不同但均可以用于实现同一功能的传感器,传感器还可以包括类型相同但安装位置不同的传感器;可选的,多个传感器设于机身内;可选的,多个传感器中的一部分设于机身内,另一部分设于机身上。
第三存储装置,用于存储程序指令;一个或多个第三处理器,调用第三存储装置中存储的程序指令,当程序指令被执行时,一个或多个第三处理器单独地或共同地被配置用于:确定至少一组待同步的消息,待同步的消息包括类型不同的至少两个传感器输出的消息和/或安装位置不同的至少两个传感器输出的消息;将相同时间戳的每组待同步的消息缓存在同一存储队列中。
第三处理器可以实现如本发明图2、图4-图6所示实施例的消息同步方法,可参见上述实施例的消息同步方法对本实施例的可移动平台进行说明。
上述实施例的消息同步模块或消息同步装置可以为可移动平台中的一个模块。
所述可移动平台可以为汽车、无人飞行器、遥控车、无人船或机器人中的至少一种,当然,可移动平台并不限于上述列举的几种类型的可移动平台,也可为其他类型的可移动平台。
上述存储装置可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储装置也可以包括非易失性存储器(non-volatilememory),例如快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);存储装置110还可以包括上述种类的存储器的组合。
应当理解,本发明实施例中,处理器可以是中央处理器(central processingunit,CPU)。该处理器还可以是其它通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(application-specific integrated circuit,ASIC)、现场可编程逻辑门阵列(field-programmable gate array,FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器7也可以是任何常规的处理器等。
此外,本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述实施例的消息同步方法的步骤。具体的,该程序被处理器执行时实现如下步骤:确定至少一组待同步的消息,待同步的消息包括类型不同的至少两个传感器输出的消息和/或安装位置不同的至少两个传感器输出的消息;将相同时间戳的每组待同步的消息缓存在同一存储队列中。
所述计算机可读存储介质可以是前述任一实施例所述的云台的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是云台的外部存储设备,例如所述设备上配备的插接式硬盘、智能存储卡(Smart Media Card,SMC)、SD卡、闪存卡(Flash Card)等。进一步的,所述计算机可读存储介质还可以既包括云台的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述云台所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本发明部分实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。