具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,换句话说,描述的实施例根据除了这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,还可以包含其他内容,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于只清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者多个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
请结合参看图1和图6,其为本发明实施例提供的自动驾驶的仿真方法的流程图和自动驾驶仿真系统的内部结构示意图。自动驾驶的仿真方法用于控制自动驾驶仿真系统10中各仿真模块的运行顺序。具体地,仿真系统包括但不限于定位模块、感知模块、预测模块、决策模块、规划模块、以及控制模块等。自动驾驶的仿真方法包括如下步骤。
步骤S102,接收场景数据,场景数据包括各数据的处理频率。具体地,场景数据包括但不限于虚拟数据、自动驾驶车辆路测时采集的真实数据、以及虚拟数据和真实数据的结合等。其中,虚拟数据为仿真系统中虚拟场景生成的数据。各数据的处理频率可以为虚拟场景中虚拟车辆上的虚拟传感器向各模块发送虚拟数据的频率,也可以为路测采集时自动驾驶车辆上的传感器向各模块发送真实数据的频率。
步骤S104,获取各数据的处理频率。具体地,通过接收场景数据来获取各数据的处理频率。
步骤S106,获取各仿真模块的拓扑依赖关系。具体地,仿真系统10中各仿真模块之间具有拓扑依赖关系,请结合参看图7,其为本发明实施例提供的各仿真模块的拓扑依赖关系示意图。下文中,均以此拓扑依赖关系为例进行详细描述。其中,仿真模块3依赖于仿真模块1和仿真模块2,仿真模块4依赖于仿真模块3,仿真模块5依赖于仿真模块4。换句话说,一个仿真模块依赖另一仿真模块表示一个仿真模块的输入数据依赖于另一仿真模块的输出数据,更具体地说,一个仿真模块的输入数据为另一仿真模块的全部输出数据或者部分输出数据。例如,仿真模块4依赖于仿真模块3,当仿真模块3的输出数据为A、B、C时,仿真模块3将输出数据A、B、C或者输出数据A、B、C中的部分发送给仿真模块4作为仿真模块4的输入数据。在仿真系统中,预测模块依赖于定位模块和感知模块,规划模块依赖于预测模块,控制模块依赖于规划模块。在一些可行的实施例中,仿真模块的数量不限于此,各仿真模块的拓扑依赖关系可以由用户自定义,各仿真模块的拓扑依赖关系亦不限于此,在此不做限定。
步骤S108,根据各仿真模块所处理的数据的处理频率以及各仿真模块的拓扑依赖关系确定各仿真模块的运行顺序。其中,运行顺序为各仿真模块的上下游关系。在本实施中,各仿真模块的运行顺序先基于各仿真模块的拓扑依赖关系再根据各仿真模块所处理的数据的处理频率确定各仿真模块的运行顺序。具体将在下文详细描述。
步骤S110,获取仿真指令。其中,仿真指令来自于用户。用户可以通过触发用户终端设备的用户界面上的相关操作模块向仿真系统10发出相应的仿真指令。在本实施例中,仿真指令包括但不限于初始化指令、重置指令、单步指令、运行指令、以及停止指令等。
步骤S112,根据仿真指令控制对应的仿真模块按照运行顺序进行运行。具体将在下文详细描述。
请结合参看图2,其为本发明实施例提供的确定仿真模块的运行顺序的流程图。步骤S112,根据仿真指令控制对应的仿真模块按照运行顺序进行运行具体包括如下步骤。
步骤S202,对仿真指令进行解析,得到若干操作指令。对仿真系统来说,用户发出的仿真指令需要仿真系统中多个仿真模块进行协调仿真才能实现相应的仿真目的,即一条仿真指令需要被拆分为多条操作指令来分别执行,并且执行每一操作指令所调用的仿真模块可能不同。例如,当用户通过用户终端设备向仿真系统发送直行的运行指令时,可能需要仿真系统中的感知模块、定位模块、规划模块、以及控制模块相互协调配合才能实现使自动驾驶车辆直行的目的。此时,需要将直行的运行指令拆分为获取自动驾驶车辆当前的定位信息,获取自动驾驶车辆周围环境的感知数据,根据定位信息和感知数据规划直行路线,根据直行路线控制自动驾驶车辆行驶等操作指令。当执行获取自动驾驶车辆当前的定位信息这一操作指令时,需要同时调用定位模块和感知模块才能实现。因此,在本实施例中,当接收到来自用户的仿真指令时,可以将仿真指令按执行步骤拆分为多个操作指令,并按顺序依次执行每个操作指令。在一些可行的实施例中,对仿真指令的解析方法不限于此,在此不做限定。
步骤S204,根据操作指令确定待仿真模块。具体地,每一操作指令包括用于发送给相对应仿真模块的调用参数,当仿真模块接收到相应的调用参数后被确定为待仿真模块。即是说,按顺序依次将操作指令发送给仿真系统中的所有仿真模块,每一仿真模块接收到操作指令后判断该操作指令中是否包含相应的调用参数。若包含,则该仿真模块确定为执行该操作指令所要运行的仿真模块,即待仿真模块。
步骤S206,获取待仿真模块之间的拓扑依赖关系。请再次参看图7,当确定的待仿真模块包括仿真模块1、仿真模块2、仿真模块4、以及仿真模块5时,由仿真模块的拓扑依赖关系可知,仿真模块4依赖于仿真模块1和仿真模块2,仿真模块5依赖于仿真模块4。也就是说,仿真模块4的输入数据为仿真模块1和仿真模块2的全部输出数据或者部分输出数据,仿真模块5的输入数据为仿真模块4的全部输出数据或者部分输出数据。
步骤S208,根据拓扑依赖关系确定待仿真模块的运行顺序。请再次参看图7,根据当前的仿真模块的拓扑依赖关系,只能确定仿真模块1或者仿真模块2和仿真模块4和仿真模块5之间的运行顺序,即无法确定仿真模块1和仿真模块2之间哪一个先运行哪一个后运行,但能够确定当仿真模块1和仿真模块2运行之后,先运行仿真模块4,再运行仿真模块5。
步骤S210,对拓扑依赖关系无法确定运行顺序的待仿真模块,获取待仿真模块的调度频率。其中,调度频率根据待仿真模块需要处理的数据的最高处理频率确定。具体地,由于无法确定仿真模块1和仿真模块2之间哪一个先运行哪一个后运行,需要借助其他的方法来确定仿真模块1和仿真模块2之间的运行顺序。在本实施例中,通过获取仿真模块1和仿真模块2的调度频率来确定仿真模块1和仿真模块2之间的运行顺序。
步骤S212,根据待仿真模块的调度频率确定运行顺序。具体地,根据待仿真模块的调度频率从高到低的顺序运行对应的待仿真模块处理对应的数据。若仿真模块1的调度频率高于仿真模块2的调度频率,则先运行仿真模块1,再运行仿真模块2,从而得到确定的运行顺序,可参见图8。在一些可行的实施例中,根据待仿真模块的调度频率确定运行顺序的方法不限于此,在此不做限定。
若存在两个或者两个以上利用拓扑依赖关系无法确定运行顺序且调度频率相同的待仿真模块,根据预设的第一调度关系进行调度。具体地,在仿真开始之前,根据预设的规则对各仿真模块进行编号。预设的第一调度关系为根据各待仿真模块的编号从大到小的顺序运行对应的待仿真模块。其中,预设的规则为根据各仿真模块自身算法的时间复杂度进行排序,时间复杂度最低的编号最大,时间复杂度最高的编号最小。其中,各仿真模块自身算法的时间复杂度与实际自动驾驶车辆中各模块算法的时间复杂度一一对应。在一些可行的实施例中,预设的第一调度关系不限于此,在此不做限定。
请结合参看图7和图8,以此仿真模块的拓扑依赖关系为例,确定4个待仿真模块的运行顺序具体如下:
根据拓扑依赖关系对4个待仿真模块进行一次排序;
若有N个待仿真模块处于同一顺序,则依据N个待仿真模块的调度频率对N个待仿真模块进行二次排序,其中,N为小于等于4的自然数;
若有M个待仿真模块处于同一顺序且调度频率相同,则根据第一调度关系对M个待仿真模块进行三次排序,其中,M为大于等于2的自然数;
通过一次排序或者通过一次排序和二次排序或者通过一次排序、二次排序和三次排序,得到4个待仿真模块的运行顺序。
请再次参看图8,其为本发明实施例提供的待仿真模块的运行顺序示意图。当确定4个待仿真模块的运行顺序为仿真模块1、仿真模块2、仿真模块4、仿真模块5时,自动驾驶的仿真方法具体如下:
运行仿真模块1接收场景数据,仿真模块1对场景数据进行仿真并生成第一输出数据;
运行仿真模块2接收第一输出数据,仿真模块2对第一输出数据进行仿真并生成第二输出数据;
运行仿真模块4接收第二输出数据,仿真模块4对第二输出数据进行仿真并生成第三输出数据;
运行仿真模块5接收第三输出数据,仿真模块5对第三输出数据进行仿真并生成第四输出数据。
请结合参看图3和图6,其为本发明实施例提供的确定仿真单元的运行顺序的流程图和自动驾驶仿真系统的内部结构示意图。仿真模块包括多个仿真单元,在仿真系统中,感知模块包括但不限于激光雷达感知单元、摄像装置感知单元、毫米波雷达感知单元等,则自动驾驶的仿真方法还包括如下步骤。
步骤S302,获取各仿真单元的调度频率。其中,各仿真单元的调度频率根据仿真单元需要处理的数据的最高处理频率确定。
步骤S304,当根据运行顺序运行待仿真模块时,根据各仿真单元的调度频率调用仿真单元。具体地,根据同一仿真模块的各仿真单元的调度频率从高到低的顺序运行对应的仿真单元处理对应的数据。在一些可行的实施例中,根据各仿真单元的调度频率调用仿真单元的方法不限于此,在此不做限定。
若存在两个或者两个以上在一个待仿真模块中调度频率相同的仿真单元,根据预设的第二调度关系进行调度。具体地,在仿真开始之前,根据预设的规则对同一仿真模块的各仿真单元进行编号。预设的第二调度关系为根据各仿真单元的编号从大到小的顺序运行对应的仿真单元。其中,预设的规则为根据仿真单元自身算法的时间复杂度进行排序,时间复杂度最低的编号最大,时间复杂度最高的编号最小。其中,各仿真单元自身算法的时间复杂度与实际自动驾驶车辆中各单元算法的时间复杂度一一对应。在一些可行的实施例中,预设的第二调度关系不限于此,在此不做限定。
请结合参看图9,其为本发明实施例提供的仿真单元的运行顺序示意图。若确定的4个待仿真模块均分别包括5个仿真单元,确定待仿真模块及其仿真单元的运行顺序具体如下:
根据拓扑依赖关系对4个待仿真模块进行一次排序;
根据各仿真单元的调度频率对同一待仿真模块中的5个仿真单元进行二次排序;
若有X个待仿真模块处于同一顺序,则依据X个待仿真模块的调度频率对X个待仿真模块进行三次排序,其中,X为小于等于4的自然数;
若同一待仿真模块中有Y个仿真单元的调度频率相同,则根据预设的第二调度关系对Y个仿真单元进行四次排序,其中,Y为大于等于2的自然数;
若有Z个待仿真模块处于同一顺序且调度频率相同,则根据第一调度关系对Z个待仿真模块进行五次排序,其中,Z为大于等于2的自然数;
通过一次排序和二次排序或者通过一次排序、二次排序和三次排序或者通过一次排序、二次排序和四次排序或者通过一次排序、二次排序、三次排序和五次排序或者通过一次排序、二次排序、三次排序和四次排序或者通过一次排序、二次排序、三次排序、四次排序和五次排序,得到4个待仿真模块及其仿真单元的运行顺序。
步骤S306,当前调用的待仿真模块的仿真单元处理完所需数据并输出相应的数据后,判断相应的数据是否正确。具体地,仿真系统10在运行时,可能会出现某一仿真单元接收数据后对数据的处理出现错误,导致该仿真单元输出错误的数据的情况。因此,每一仿真单元处理完所需数据后需要对各仿真单元输出的数据进行判断。
步骤S308,若相应的数据正确,则根据运行顺序运行另一待仿真模块。具体地,对每一待仿真模块中的每一仿真单元的输出数据都进行判断,当同一待仿真模块的所有仿真单元的输出数据均判断正确后,再运行下一待仿真模块。
若相应的数据不正确,则中止仿真并根据不正确的数据对相应的仿真单元进行调整。直至该仿真单元输出的数据正确,再继续进行仿真。
请再次参看图8,当确定待仿真模块的运行顺序为仿真模块1、仿真模块2、仿真模块4、仿真模块5时,自动驾驶的仿真方法具体如下:
运行仿真模块1接收场景数据,仿真模块1中的各仿真单元根据相对应的运行顺序对场景数据进行仿真并生成相应的第一仿真单元输出数据;
分别判断第一仿真单元输出数据是否正确;
若第一仿真单元输出数据正确,运行仿真模块2接收第一仿真单元输出数据,仿真模块2中的各仿真单元根据相对应的运行顺序对第一仿真单元输出数据进行仿真并生成相应的第二仿真单元输出数据;
分别判断第二仿真单元输出数据是否正确;
若第二仿真单元输出数据正确,运行仿真模块4接收第二仿真单元输出数据,仿真模块4中的各仿真单元根据相对应的运行顺序对第二仿真单元输出数据进行仿真并生成相应的第三仿真单元输出数据;
分别判断第三仿真单元输出数据是否正确;
若第三仿真单元输出数据正确,运行仿真模块5接收第三仿真单元输出数据,仿真模块5中的各仿真单元根据相对应的运行顺序对第三仿真单元输出数据进行仿真并生成相应的第四仿真单元输出数据;
分别判断第四仿真单元输出数据是否正确。
上述实施例中,仿真系统中各仿真模块的运行顺序先基于各仿真模块的拓扑依赖关系,再根据各仿真模块的调度频率,后根据预设的第一调度关系对各仿真模块进行排序确定。同时,同一仿真模块中的各仿真单元的运行顺序先基于各仿真单元的调度频率,再根据预设的第二调度关系对各仿真单元进行排序确定。最终得到仿真系统中所有仿真单元的运行顺序,以使得仿真结果能够完全确定,且仿真结果具有可重复性,实现了仿真结果的可精确复现性,使仿真更加有意义。此外,运用这种仿真方法只需运行一次甚至不需要缓存各仿真模块的输出数据就能得到确切的仿真结果,极大减少了仿真系统的运行次数,极大降低了仿真的成本。
同时,即使更换仿真系统所适应的不同的硬件、不同的编译配置文件等,都能确保针对同一仿真指令产生的结果相同,方便工程师之间交流彼此对仿真系统的理解。且仿真系统支持资源隔离,具备良好的并行性,可以在同一台计算机上同时并行多个不同的仿真实例且多个仿真实例互不影响。工程师甚至可以在同一个计算机上同时进行程序的调试和回归测试。
此外,仿真系统中各仿真模块的运行顺序易于修改,确保各仿真模块运行顺序的完全确定性的同时降低了仿真系统对计算平台硬件的要求。以使得仿真系统的计算平台硬件不需要采纳跟自动驾驶车辆车载计算平台一样或具有类似计算能力的计算平台,而可以采用成本更低、配置更廉价的计算平台,以此达到节约成本的效果。
由于实时仿真的计算量非常大,如生成可视化的仿真场景,需要仿真系统渲染大量图片和视频才能生成仿真场景,很难实现实时运行。通过外部设备可以让无法达到实时的仿真系统跟自动驾驶系统一起联合调试,为非实时仿真打下扎实的基础。
请参看图4,其为本发明实施例提供的自动驾驶的仿真方法的子流程图。由于场景数据包括自动驾驶车辆路测时采集的真实数据,则接收场景数据之前仿真方法还包括如下步骤。
步骤S402,记录各模块的运行顺序形成场景数据的运行日志。具体地,自动驾驶车辆进行路测时,设置于自动驾驶车辆的各模块根据路测时的真实场景形成真实的运行顺序。将该真实的运行顺序记录下来形成运行日志。例如,在停车场景中,自动驾驶车辆上各模块的运行顺序为:模块2、模块1、模块3、模块4、模块5。下文将以此运行顺序为例进行详细描述。
步骤S404,将运行日志加载于场景数据中。
则接收场景数据之后仿真方法还包括:
步骤S406,判断场景数据是否存在运行日志。
步骤S408,若存在运行日志,根据运行日志运行各仿真模块处理相应的数据。具体地,根据运行日志中各模块的运行顺序一一对应地运行各仿真模块。即是说,仿真系统中的各仿真模块是根据自动驾驶车辆上的各模块来设定的。当自动驾驶车辆包括模块1、模块2、模块3、模块4、以及模块5这5个模块时,仿真系统中也相对应包括仿真模块1、仿真模块2、仿真模块3、仿真模块4、以及仿真模块5。则在仿真系统中,按仿真模块2、仿真模块1、仿真模块3、仿真模块4、仿真模块5的顺序运行各仿真模块。其中,可选择记录运行日志时任意模块的输出数据或任意仿真模块的输出数据输入至下一仿真模块。例如,当仿真模块1对仿真模块2输出的第一输出数据进行仿真并生成第二输出数据后,可以选择将第二输出数据或者模块1运行生成的第二真实输出数据输入至仿真模块3。在一些可行的实施例中,还可以在记录运行日志时任意模块的输出数据和任意仿真模块的输出数据之间不断选择其中之一输入至下一仿真模块。例如,选择模块1运行生成的第二真实数据输入至仿真模块3后,运行仿真模块3对第二真实数据进行仿真并生成第三输出数据;选择第三输出数据输入至仿真模块4,运行仿真模块4对第三输出数据进行仿真并生成第四输出数据;选择模块4运行生成的第四真实数据输入至仿真模块5,运行仿真模块5对第四真实数据进行仿真并生成第五输出数据。可以理解的是,不论是选择记录运行日志时任意模块的输出数据或任意仿真模块的输出数据输入至下一仿真模块还是在记录运行日志时任意模块的输出数据和任意仿真模块的输出数据之间不断选择其中之一输入至下一仿真模块,这种选择方式均为随机进行。在一些可行的实施例中,用户可以对输入至下一仿真模块的数据的选择进行自定义,在此不做限定。
上述实施例中,由于各模块的执行情况往往是自动驾驶车辆在真实场景中的真实反应,通过将运行日志加载于场景数据中能够完全重现路测时自动驾驶车辆上各模块的执行情况,保证在仿真系统中按真实的运行顺序完全重现真实情况。此外,由于仿真系统中的仿真模块的更新频率高于自动驾驶车辆上的模块,则输出的数据与对应的模块输出的真实数据会有所不同。通过此仿真系统可以检验更新后的仿真模块是否更优。同时,选择不同的输出数据作为下一仿真模块的输入也可以验证仿真系统输出结果的确定性。
若不存在运行日志,则根据上文所描述的运行顺序运行各仿真模块处理相应的数据。
请参看图5,其为本发明实施例提供的接收中断信息的流程图。仿真方法还包括如下步骤。
步骤S502,在指定的时间点接收预设的中断信息。具体地,仿真系统10在仿真时,用户可以通过触发用户终端设备的用户界面上的相关操作模块向仿真系统10发出相应的中断信息。
步骤S504,响应中断信息暂停仿真预设时间后,将当前的时间点任意仿真模块的输出数据或者预设数据输入到下一个仿真模块。其中,预设数据可以是记录运行日志时任意模块的输出数据。具体地,仿真系统10接收中断信息后,响应该中断信息。其中,中断信息包括使仿真系统10暂停预设时间的指令。当仿真系统10暂停仿真预设时间后,将暂停仿真时运行的仿真模块的输出数据或者与运行的仿真模块相对应的模块的输出数据输入至下一仿真模块。其中,预设时间可以为任意的时间长度,预设时间也可以由用户自行定义。在一些可行的实施例中,预设数据不限于此,在此不做限定。
上述实施例中,由于在真实场景中,用户可能会在自动驾驶车辆行驶过程中突然决定停车。此时,用户可以通过外接设备发出停车指令以使自动驾驶车辆停下。其中,外接设备包括但不限于设置于自动驾驶车辆上的按钮、触摸屏、语音接收器、以及设置于自动驾驶车辆外部的远程控制装置等。通过在仿真系统仿真时发送中断信息,可以测试仿真系统在运行不同仿真模块时接收到中断信息的反应,同时确保每次仿真系统都是暂停预设时间后继续进行仿真。此外,中断信息的插入还有助于找到仿真系统中存在的问题。
请参看图10,其为本发明实施例提供的计算机设备的内部结构示意图。计算机设备200用于自动驾驶仿真,计算机设备200包括存储器202、以及处理器201。其中,存储器202用于存储计算机可执行程序,处理器201用于执行可执行程序以实现如上述实施例提供的自动驾驶的仿真方法。
其中,处理器201在一些实施例中可以是一中央处理器(CentralProcessingUnit,CPU)、控制器、微控制器、微处理器或其它数据处理芯片,用于运行存储器202中存储的计算机可执行程序。具体地,处理器201执行可执行程序以实现上述自动驾驶的仿真方法。
存储器202至少包括一种类型的可读存储介质,该可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器202在一些实施例中可以是计算机设备200的内部存储单元,例如计算机设备200的硬盘。存储器202在另一些实施例中也可以是的外部计算机设备200存储设备,例如计算机设备200上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(FlashCard)等。进一步地,存储器202还可以既包括计算机设备200的内部存储单元也包括外部存储设备。存储器202不仅可以用于存储安装于计算机设备200的应用软件及各类数据,例如实现自动驾驶的仿真方法的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
计算机设备200还包括总线203。总线203可以是外设部件互连标准(peripheralcomponent interconnect,简称PCI)总线或扩展工业标准结构(extendedindustrystandard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
进一步地,计算机设备200还可以包括显示组件204。显示组件204可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-EmittingDiode,有机发光二极管)触摸器等。其中,显示组件204也可以适当的称为显示装置或显示单元,用于显示在计算机设备200中处理的信息以及用于显示可视化的用户界面。
进一步地,计算机设备200还可以包括通信组件205。通信组件205可选的可以包括有线通信组件和/或无线通信组件(如WI-FI通信组件、蓝牙通信组件等),通常用于在计算机设备200与其它计算机设备之间建立通信连接。
图10仅示出了具有部分组件以及实现图自动驾驶的仿真方法的计算机设备200,本领域技术人员可以理解的是,图10示出的结构并不构成对计算机设备200的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
请参看图11,其为本发明实施例提供的存储介质的示意图。存储介质300用于存储自动驾驶仿真程序,其中,自动驾驶仿真程序由处理器201’执行以实现如上述实施例提供的自动驾驶的仿真方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机程序指令时,全部或部分地产生按照本发明实施例的流程或功能。该计算机设备可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,该计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,该单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
该作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、流动硬盘、只读存储介质(ROM,Read-Only Memory)、随机存取存储介质(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。