技术领域
[0001] 本申请涉及自动驾驶技术领域,尤其涉及一种自动驾驶决策方法和决策装置。
相关背景技术
[0002] 自动驾驶的决策规划和控制(Planning and Control,PnC)模块,可以通过对感知和地图输出的信息进行处理判断,在每一帧对特定的业务需求给出一个布尔值的决策结果,综合这些检测函数的输出设计相关逻辑实现一个更宏观的决策,例如是否需要借道等。
[0003] 然而,受限于感知结果的不稳定和延迟,以及地图相关阈值附近的跳变,单帧检测结果可能不稳定,基于这些不稳的检测结果进行更宏观的决策,可能会产生不好的结果,影响自动驾驶性能。
具体实施方式
[0016] 以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
[0017] 下面将结合附图详细说明根据本申请实施例的一种自动驾驶决策方法和装置。
[0018] 上文提及,受限于感知结果的不稳定和延迟,以及地图相关阈值附近的跳变,单帧检测结果可能不稳定,基于这些不稳的检测结果进行更宏观的决策,可能会产生不好的结果,影响自动驾驶性能。
[0019] 鉴于此,本申请实施例提供了一种自动驾驶决策方法,通过调用多帧检测函数,并获取自动驾驶对象的N帧感知信息和地图输出信息,根据各帧感知信息和地图输出信息构造得到多帧检测函数的N个多帧检测实例,在多帧检测函数的标志位为第一取值时使用模板函数根据该N个多帧检测实例确定多帧决策结果,最后根据多帧决策结果确定自动驾驶策略,实现了利用多帧感知和地图输出信息融合确定决策,提高了PnC决策的稳定性和鲁棒性,提升了用户体验。
[0020] 图1是本申请实施例提供的一种自动驾驶决策方法的流程示意图。如图1所示,该方法包括如下步骤:在步骤S101中,调用多帧检测函数。
[0021] 其中,多帧检测函数至少包括模板函数和标志位。
[0022] 在步骤S102中,获取自动驾驶对象的N帧感知信息和地图输出信息,根据各帧的感知信息和地图输出信息构造得到多帧检测函数的N个多帧检测实例。
[0023] 其中,N为正整数。
[0024] 在步骤S103中,将N个多帧检测实例和标志位的值输入模板函数。
[0025] 在步骤S104中,响应于确定标志位的值为第一取值,根据N个多帧检测实例确定多帧决策结果。
[0026] 在步骤S105中,根据多帧决策结果确定自动驾驶策略。
[0027] 在本申请实施例的某些实施例中,该自动驾驶决策方法可以由处理单元执行。一示例中,处理单元可以是自动驾驶对象中配置的处理单元。又一些实例中,处理单元也可以是在服务器或者云端配置的处理单元,且自动驾驶对象可以与处理单元通信,发送诸如感知信息等信息至处理单元,并自处理单元接收自动驾驶策略等指令或者信息。进一步的,处理单元中可以配置PnC模块,用于对自动驾驶过程进行规划并提供策略。
[0028] 其中,自动驾驶对象可以是执行自动驾驶任务的对象,例如自动驾驶车辆、自动驾驶机器人,或者其他自动驾驶对象,此处不做限制。
[0029] 一些实施方式中,PnC模块在进行自动驾驶决策时,可以调用多帧检测函数,该多帧检测函数至少包括模板函数和标志位。其中,标志位用于标志该多帧检测函数工作于多帧检测模式还是单帧检测模式。标志位的值可以是布尔类型的值,当标志位的值为第一取值时,例如为真(true)时,该多帧检测函数可以工作于多帧检测模式。反之,当标志位的值为第二取值,例如为假(false)时,该多帧检测函数可以工作于单帧检测模式。
[0030] 另一方面,PnC模块还可以获取自动驾驶对象的N帧感知信息和地图输出信息。
[0031] 其中,感知信息可以由自动驾驶对象主动获取,例如自动驾驶对象使用其自身搭载的感知设备包括摄像装置、激光雷达装置等获取,也可以由诸如路侧装置(Road Side Unit,RSU)等利用感知设备获取,然后传输至自动驾驶对象。感知信息包括但不限于车道信息、障碍物信息、红绿灯信息、交通标志信息。
[0032] 地图输出信息可以是自动驾驶对象获取的地图信息,包括地图中标记的车道信息、障碍物信息、红绿灯信息、交通标志信息等。
[0033] 本申请的一些实施方式中,PnC模块可以根据各帧的感知信息和地图输出信息构造得到该多帧检测函数的N个多帧检测实例。一示例中,PnC模块可以获取第一帧感知信息和地图输出信息,然后根据该第一帧感知信息和地图输出信息构造得到多帧检测函数的第一个多帧检测实例;然后获取第二帧感知信息和地图输出信息,然后根据该第二帧感知信息和地图输出信息构造得到多帧检测函数的第二个多帧检测实例,以此类推,直至构造得到多帧检测函数的第N个多帧检测实例。
[0034] 一些实施方式中,可以将构造得到的N个多帧检测实例和多帧检测函数的标志位的值输入该模板函数。模板函数首先判断接收到的标志位的值是否为第一取值,例如是否为true,若是则表明该多帧检测函数需要工作于多帧检测模式。此时,该模板函数可以根据接收到的N个多帧检测实例确定多帧决策结果,并基于该多帧决策结果确定自动驾驶对象的驾驶策略。
[0035] 另一方面,若模板函数判断接收到的标志位的值为第二取值,例如为false,则表明该多帧检测函数需要工作于单帧检测模式。此时,可以直接退出该模板函数,并将当前帧的感知信息和地图输出信息使用单帧检测函数进行检测,得到检测结果,然后使用该检测结果确定驾驶策略。
[0036] 根据本申请实施例提供的技术方案,通过调用多帧检测函数,并获取自动驾驶对象的N帧感知信息和地图输出信息,根据各帧感知信息和地图输出信息构造得到多帧检测函数的N个多帧检测实例,在多帧检测函数的标志位为第一取值时使用模板函数根据该N个多帧检测实例确定多帧决策结果,最后根据多帧决策结果确定自动驾驶策略,实现了利用多帧感知和地图输出信息融合确定决策,提高了PnC决策的稳定性和鲁棒性,提升了用户体验。
[0037] 在本申请的某些实施例中,多帧检测函数可以是一个类,例如记为FrameCheckInfo,其继承自检测基类,该检测基类例如记为FrameCheckInfoBase。进一步的,该检测基类FrameCheckInfoBase中可以被配置如下属性:本帧决策结果,例如记为frame_ans,本帧时间戳frame_time,以及多帧决策结果frame_final_ans。在一些实施方式中,该检测基类FrameCheckInfoBase中可以被配置本帧日志(LOG)信息属性,例如记为frame_info_sign。更进一步的,该检测基类FrameCheckInfoBase中还可以配置纯虚函数PrintFrameCheckInfo,用于打印该检测基类FrameCheckInfoBase的相关信息。
[0038] 一些实施方式中,多帧检测函数可以包括检测参数和返回值,该检测参数和返回值可以被配置为与对应的单帧检测函数的检测参数和返回值相同,只是在多帧检测函数中额外增加标志位use_multi_frame。其中,对应的多帧检测函数和单帧检测函数是指,用于实现相同检测功能的检测函数。
[0039] 一些示例性的单帧检测函数可以是,是否正前方无静态障碍检测函数,记为IsMiddleFrontStaticObsClear,是否左前方无静态障碍检测函数,记为IsLeftFrontStaticObsClear,是否右前方无静态障碍检测函数,记为
IsRightFrontStaticObsClear,是否左侧无动态障碍检测函数,记为
IsLeftDynamicObsClear,是否右侧无动态障碍检测函数,记为IsRightDynamicObsClear,是否前方有红绿灯检测函数,记为IsFrontHasTrafficLight,是否前方有停止标志检测函数,记为IsFrontHasStopSign, 是否前方有十字路口检测函数,记为
IsFrontHasCrossRoad,是否左前方有不可跨越边界检测函数,记为
IsLeftFrontHasRoadBoundary,是否右前方有不可跨越边界检测函数,记为
IsRightFrontHasRoadBoundary,是否前方有弯道检测函数,记为IsFrontHasLaneTurn,以及用户利用开放接口根据业务需求自定义的其他检测函数。
[0040] 上述检测函数都是根据业务需求定义的,通过对感知和地图输出的信息做处理和判断,每一帧给出一个布尔值的决策结果,综合这些检测函数的输出可设计相关逻辑实现一个更宏观的决策,例如是否需要借道等。如上所述,受限于感知结果的不稳定和延迟,以及地图相关阈值附近的跳变,单帧检测结果可能不稳定,基于这些不稳的检测结果进行更宏观的决策,可能会产生不好的结果,影响自动驾驶性能。鉴于此,本申请实施例提供了利用多帧检测函数融合多个单帧决策结果得到更为稳定和准确的决策结果,进而进行自动驾驶策略的方法。
[0041] 进一步的,多帧检测函数继承自检测基类FrameCheckInfoBase,除包括该检测基类FrameCheckInfoBase中的属性frame_ans、frame_time、frame_final_ans和frame_info_sign,外,该多帧检测函数中还可以配置与多帧检查相关的属性。更进一步的,该多帧检测函数也可以配置纯虚函数PrintFrameCheckInfo,用于打印该多帧检测函数的相关信息。
[0042] 图2是本申请实施例提供的构造目标多帧检测实例的方法的流程示意图。如图2所示,该方法包括如下步骤:在步骤S201中,获取目标帧的感知信息和地图输出信息。
[0043] 在步骤S202中,调用多帧检测函数的检测参数得到目标单帧检测结果。
[0044] 在步骤S203中,确定目标单帧检测结果为目标多帧检测实例的本帧决策结果。
[0045] 其中,目标多帧检测实例为N个多帧检测实例中的任一实例。
[0046] 在构造目标多帧检测实例时,可以首先获取目标帧的感知信息和地图输出信息,然后调用多帧检测函数的检测参数得到目标单帧检测结果,并确定该目标单帧检测结果为目标多帧检测实例的本帧决策结果。也就是说,可以根据本次决策目标以及目标帧的感知信息和地图输出信息,调用多帧检测函数中的对应检测参数,实现对该目标帧的感知信息和地图输出信息的单帧检测,得到单帧检测结果,然后将该单帧检测结果作为目标多帧检测实例的本帧决策结果。
[0047] 例如,若本次决策目标为检测前方是否有红绿灯,则可以利用获取的目标帧的感知信息和地图输出信息与多帧检测函数中用于实现IsFrontHasTrafficLight的检测参数检测得到前方是否有红绿灯的单帧检测结果,然后将该单帧检测结果作为该目标多帧检测实例的本帧决策结果。
[0048] 在本申请实施例的某些实施方式中,在构建目标多帧检测实例时,还可以自定义该目标多帧检测实例的LOG信息,以及将对应单帧检测函数更新的其他信息赋值至自定义的多帧检查相关的属性,从而得到该目标多帧检测实例。
[0049] 图3是本申请实施例提供的根据N个多帧检测实例确定多帧决策结果的方法的流程示意图。如图3所示,该方法包括如下步骤:在步骤S301中,构建检测队列,将N个多帧检测实例依次加入检测队列。
[0050] 在步骤S302中,在检测队列中确定目标多帧检测实例集合。
[0051] 在步骤S303中,使用预设检测策略在目标多帧检测实例集合中确定命中多帧检测实例。
[0052] 在步骤S304中,确定命中多帧检测实例的多帧决策结果为多帧检测函数的多帧决策结果,并确定命中多帧检测实例的本帧时间戳为多帧检测函数的时间戳。
[0053] 其中,检测队列中,顺序排列的各多帧检测实例的时间戳与当前时间之差依次增大,命中多帧检测实例的多帧决策结果由其本帧决策结果赋值得到。
[0054] 在本申请的一些实施例中,在模板函数根据N个多帧检测实例确定多帧决策结果时,可以首先构建一检测队列,将该N个多帧检测实例依次加入该检测队列。然后,使用预设检测策略在检测队列中确定命中多帧检测实例。最后,将该命中多帧检测实例的frame_final_ans作为返回值传入多帧检测函数,作为该多帧检测函数的frame_final_ans。进一步的,还可以将该命中多帧检测实例的frame_time作为返回值传入多帧检测函数,作为该多帧检测函数的frame_time。
[0055] 其中,模板函数中可以传入N个多帧检测实例和use_multi_frame,还可以定义本次检测容量参数horizon和权重参数exp_param。模板函数在初始化时,可以将各多帧检测实例中的frame_ans赋值至frame_final_ans,例如将目标多帧检测实例中的frame_ans赋值至frame_final_ans,目标多帧检测实例为上述N个多帧检测实例中的任一多帧检测实例。另一方面,模板函数中还可以配置一当前时刻参数cur_frame_time,在初始化时可以将当前时刻复制至该cur_frame_time。
[0056] 模板函数在工作时,首先确定传入的use_multi_frame是否为真,若否则退出函数。反之,若为真,则将传入的N个多帧检测实例依次加入一检测队列。其中,检测队列可以是一个静态的双端队列frame_check_info_vec_static。将N个多帧检测实例依次加入检测队列是指,根据时间顺序,将本帧时间戳对应的时间最靠前的多帧检测实例先加入frame_check_info_vec_static,作为队列的首元素,队列的末元素则是本帧时间戳对应的时间最靠后的多帧检测实例。也就是说,在检测队列中,顺序排列的各多帧检测实例的时间戳与当前时间之差依次增大。
[0057] 一示例中,若一双端队列中包括FrameCheckInfo1至FrameCheckInfo5共计5个多帧检测实例,其中,FrameCheckInfo1至FrameCheckInfo5的本帧时间戳与当前时刻之差依次增大,即FrameCheckInfo5为最先生成并传入模板函数的多帧检测实例,FrameCheckInfo1为最后生成并传入模板函数的多帧检测实例,则frame_check_info_vec_static中FrameCheckInfo1至FrameCheckInfo5可以依次排列,且FrameCheckInfo5为队列的首元素,FrameCheckInfo1为队列的末元素。
[0058] 模板函数在将各多帧检测实例依次加入frame_check_info_vec_static前,可以首先判断该frame_check_info_vec_static是否为空。若是则直接执行依次加入各多帧检测实例的操作。否则,需要判断该frame_check_info_vec_static中的元素是否可用。
[0059] 一示例中,可以获取frame_check_info_vec_static的末元素的frame_time,然后判断该frame_check_info_vec_static的末元素的frame_time与当前时刻的差值大于第一预设阈值来确定各元素是否可用。frame_check_info_vec_static的末元素为frame_check_info_vec_static中最后一个加入的多帧检测实例。
[0060] 若frame_check_info_vec_static的末元素的frame_time与当前时刻的差值大于第一预设阈值,则可以确定frame_check_info_vec_static中全部元素的frame_time与当前时刻的差值均大于第一预设阈值,此时可以认为frame_check_info_vec_static中各多帧检测实例不可用,并清空该frame_check_info_vec_static。
[0061] 若frame_check_info_vec_static的末元素的frame_time与当前时刻的差值小于或者等于第一预设阈值,则可以依次判断frame_check_info_vec_static的次末元素至首元素的frame_time与当前时刻的差值是否大于第一预设阈值。若确定某个元素的frame_time与当前时刻的差值大于第一预设阈值,则在frame_check_info_vec_static中删除该元素至首元素中的全部元素。一示例中,该第一预设阈值可以被记为kFrameTimeLowLim。第一预设阈值的取值可以根据实际需要确定,其标记方式也可以根据实际需要设置,此处不做限制。
[0062] 进一步的,模板函数在将各多帧检测实例依次加入frame_check_info_vec_static时,还需要判断frame_check_info_vec_static是否已满。即,在加入目标多帧检测实例后,若确定frame_check_info_vec_static中的多帧检测实例数量大于第二预设阈值,则将frame_check_info_vec_static的首元素移出frame_check_info_vec_static,并将该目标多帧检测实例保存于frame_check_info_vec_static的队尾。
[0063] 也就是说,若将用于表征frame_check_info_vec_static最大容量的第二预设阈值记为kFrameNums,则模板函数在每次向frame_check_info_vec_static中加入多帧检测实例时,均需要判断该frame_check_info_vec_static中的元素个数是否大于kFrameNums,若否则直接加入该多帧检测实例,若是则需要将frame_check_info_vec_static中的首元素移出,然后加入该多帧检测实例。
[0064] 一示例中,若kFrameNums=10,frame_check_info_vec_static中当前包括10个元素,此时模板函数需要继续向frame_check_info_vec_static中加入多帧检测实例。由于加入该多帧检测实例后,frame_check_info_vec_static中的元素个数为10+1=11,大于kFrameNums,因此需要将frame_check_info_vec_static中的首元素移出,然后再将该多帧检测实例加入将frame_check_info_vec_static的队尾。
[0065] 采用这种方式,能够保证frame_check_info_vec_static中保存的都是最新的即本帧时间戳距离当前时间最近的多帧检测实例。
[0066] 一些实施方式中,可以在检测队列中确定目标多帧检测实例集合。其中,目标多帧检测实例集合是指本次检测需要使用的frame_check_info_vec_static中多帧检测实例。一示例中,可以首先确定目标多帧检测实例数量M,然后将frame_check_info_vec_static中自队尾开始的M个元素作为目标多帧检测实例集合,M为正整数。
[0067] 其中,M可以采用如下方式确定:M=min(clamp(horizon,kMinHorizon,kFrameNums),frame_size),其中,kMinHorizon为自定义的最小检测范围,frame_size为当前frame_check_info_vec_static中的元素个数,clamp为限位函数,表示在horizon的取值大于kMinHorizon且小于kFrameNums时,clamp函数输出该horizon的值,在horizon的取值小于或者等于kMinHorizon时,clamp函数输出kMinHorizon的值,并在horizon的取值大于或者等于kFrameNums时,clamp函数输出kFrameNums的值。min为取最小值函数。
[0068] 采用这种方式,能够根据不同的检测目标灵活调整用于检测的多帧检测实例对象,在提高决策稳定性的基础上充分考虑了决策效率和决策成本。
[0069] 在确定了目标多帧检测实例集合后,可以使用预设检测策略在该目标多帧检测实例集合中确定命中多帧检测实例,然后确定命中多帧检测实例的多帧决策结果为多帧检测函数的多帧决策结果,并确定命中多帧检测实例的本帧时间戳为多帧检测函数的时间戳。如前所述,在模板函数初始化时,会将各多帧检测实例的frame_ans赋值至frame_final_ans,因此该命中多帧检测实例的多帧决策结果即其本帧决策结果。
[0070] 进一步的,在使用命中多帧检测函数的多帧决策结果和本帧时间戳更新多帧检测函数的多帧决策结果和时间戳后,还可以使用命中多帧检测函数的多帧决策结果和本帧时间戳更新检测队列中末元素的多帧决策结果和本帧时间戳。
[0071] 预设检测策略的实现方式可以有多种,例如根据历史数据统计确定经验值策略、使用预设权重算法策略、使用其他算法策略等。以下以两种不同的预设权重算法策略为例,介绍使用预设检测策略在所述检测队列中确定命中多帧检测实例的实现方式。可以理解的是,实际使用中预设检测策略可以根据需要设置,此处不做限制。
[0072] 一示例中,预设检测策略可以是利用指数权重递减算法进行检测。
[0073] 图4是本申请实施例提供的一种使用预设检测策略在检测队列中确定命中多帧检测实例的方法的流程示意图。如图4所示,该方法包括如下步骤:在步骤S401中,定义第一得分数组和权重数组。
[0074] 在步骤S402中,将检测队列中各多帧检测实例的本帧决策结果依次写入第一得分数组。
[0075] 在步骤S403中,计算检测队列中各多帧检测实例的权重值,并将各权重值依次写入权重数组。
[0076] 在步骤S404中,根据第一得分数组和权重数组计算得到目标得分,根据目标得分确定计算决策结果。
[0077] 在步骤S405中,自第一得分数组的末元素开始依次遍历第一得分数组,确定本帧决策结果与计算决策结果相同的第一个多帧检测实例为命中多帧检测实例。
[0078] 其中,第一得分数组的末元素为第一得分数组中的第一个元素,第一得分数组和权重数组中的元素排序方式与检测队列中各多帧检测实例的排序方式相同。
[0079] 一些实施方式中,可以首先定义第一得分数组frame_ans_scores和权重数组frame_ans_weights以分别表征得分序列和权重序列。
[0080] 接下来可以遍历frame_check_info_vec_static,将frame_check_info_vec_static中各多帧检测实例的frame_ans值依次写入该frame_ans_scores。也就是说,将i作为当前遍历到的帧的序号,则frame_ans_scores中第i个元素的值即为frame_check_info_vec_static中第i个元素的frame_ans值,i为大于或者等于0且小于N的整数。
[0081] 另一方面,在遍历frame_check_info_vec_static时,还可以对遍历得到的每个元素计算其权重值,然后将计算得到的权重值对应保存于frame_ans_weights。其中,计算各元素的权重值可以是,配置权重参数,并配置该权重参数大于0且小于1;然后确定权重数组中第i个权重值为权重参数的i+1次幂,i为大于或者等于0且小于N的整数。
[0082] 例如,对于frame_check_info_vec_static中的第i个元素,可以计算得到其权重值frame_weight为pow(exp_param,i+1),其中,pow为指数运算函数,pow(exp_param,i+1)= i+1exp_param 。若设置exp_param为大于0且小于1的数,则在i依次递增时,frame_weight的值将会遵循指数函数的变化趋势依次递减。
[0083] 在完成frame_check_info_vec_static中各元素的遍历,构建好数组frame_ans_scores和frame_ans_weights后,可以根据该数组frame_ans_scores和frame_ans_weights计算得到目标得分,并根据目标得分确定计算决策结果。
[0084] 其中,根据数组frame_ans_scores和frame_ans_weights计算得到目标得分可以是,将数组frame_ans_scores和frame_ans_weights中相同序号的元素相乘,并将得到的全部乘积相加,得到得分总数sum_scores。同时将数组frame_ans_weights中的全部权重值相加,得到总权重值sum_weights。最后将得分总数与总权重值之商作为目标得分final_score。
[0085] 进一步的,由于各多帧检测实例的本帧决策结果均为布尔值,因此根据目标得分确定计算决策结果可以是,响应于确定目标得分大于或者等于0.5,确定计算决策结果为第一决策结果;响应于确定目标得分小于0.5,确定计算决策结果为第二决策结果。其中,第一决策结果与各多帧检测实例的本帧决策结果为真(1)时的决策结果相同,第二决策结果与各多帧检测实例的本帧决策结果为假(0)时的决策结果相同。
[0086] 最后,可以根据计算决策结果确定命中多帧检测实例。一示例中,可以自第一得分数组的末元素开始依次遍历第一得分数组,确定本帧决策结果与计算决策结果相同的第一个多帧检测实例为命中多帧检测实例。
[0087] 例如,若frame_check_info_vec_static中包括5个元素,从队尾至队首各元素的frame_ans的值分别为01011,且目标得分为0.6>0.5,故计算决策结果为1,此时可以将上述01111中第一个1对应的frame_check_info_vec_static中的次末元素作为命中多帧检测实例。
[0088] 又如,若frame_check_info_vec_static中仍然包括5个元素,从队尾至队首各元素的frame_ans的值分别为11000,且目标得分为0.48<0.5,故计算决策结果为0,此时可以将上述11000中第一个0对应的frame_check_info_vec_static中自末元素开始的第三个元素作为命中多帧检测实例。如此即可实现利用指数权重递减算法在检测队列中确定命中多帧检测实例。
[0089] 又一示例中,预设检测策略也可以是利用等比权重算法进行检测。
[0090] 图5是本申请实施例提供的另一种使用预设检测策略在检测队列中确定命中多帧检测实例的方法的流程示意图。如图5所示,该方法包括如下步骤:在步骤S501中,定义第二得分数组,将检测队列中各多帧检测实例的本帧决策结果依次写入第二得分数组。
[0091] 其中,各多帧检测实例的本帧决策结果均为布尔值。
[0092] 在步骤S502中,响应于确定第二得分数组中至少包括一个元素的值与其他元素的值不同,确定检测队列的次末元素为命中多帧检测实例。
[0093] 检测队列的次末元素为检测队列中倒数第二个加入的多帧检测实例。
[0094] 在步骤S503中,响应于确定第二得分数组中全部元素的值均相同,确定检测队列的末元素为命中多帧检测实例。
[0095] 检测队列的末元素为检测队列中最后一个加入的多帧检测实例。
[0096] 在本申请的一些实施例中,可以首先定义第二得分数组frame_ans_bool,遍历frame_check_info_vec_static,将frame_check_info_vec_static中各多帧检测实例的frame_ans值依次写入该frame_ans_bool。也就是说,将i作为当前遍历到的帧的序号,则frame_ans_bool中第i个元素的值即为frame_check_info_vec_static中第i个元素的frame_ans值,i为大于或者等于0且小于N的整数。
[0097] 由于frame_check_info_vec_static中各元素的frame_ans值均为布尔值,因此可以判断frame_ans_bool各元素的值是否都相同,例如全为真(1),或者全为假(0)。若确定frame_ans_bool中至少包括一个元素的值与其他元素的值不同,即不为全1或者不为全0,则可以确定frame_check_info_vec_static的次末元素为命中多帧检测实例。可以理解的是,这里选取frame_check_info_vec_static的次末元素作为命中多帧检测实例是基于现阶段历史数据统计得到的经验值,在不同的检测目标、检测条件下,可以选取frame_check_info_vec_static中其他合适的元素作为命中多帧检测实例,此处不做限制。
[0098] 另一方面,若确定frame_ans_bool中全部元素的值均相同,即为全1或者全0,则可以确定frame_check_info_vec_static的末元素为命中多帧检测实例。
[0099] 采用本申请实施例的技术方案,通过设计多帧检测函数,能够在自动驾驶的PnC过程中基于多帧检测结果确定驾驶策略,提高了决策的稳定性和鲁棒性,提升了用户体验。
[0100] 进一步的,该多帧检测函数被配置为可以灵活设置检测帧数,适用于不同情况的决策,具有较高的普适性。
[0101] 更进一步的,该多帧检测函数还被配置为通过调用预设检测策略确定决策结果,且预设检测策略可以根据实际需要设置并扩展,进一步提高了方案的适配性。
[0102] 上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
[0103] 下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
[0104] 图6是本申请实施例提供的一种自动驾驶决策装置的示意图。如图6所示,该装置包括:函数调用模块601,被配置为调用多帧检测函数,多帧检测函数至少包括模板函数和标志位。
[0105] 获取模块602,被配置为获取自动驾驶对象的N帧感知信息和地图输出信息,根据各帧的感知信息和地图输出信息构造得到多帧检测函数的N个多帧检测实例,N为正整数。
[0106] 输入模块603,被配置为将N个多帧检测实例和标志位的值输入模板函数。
[0107] 确定模块604,被配置为响应于确定标志位的值为第一取值,根据N个多帧检测实例确定多帧决策结果。
[0108] 确定模块604还被配置为根据多帧决策结果确定自动驾驶策略。
[0109] 根据本申请实施例提供的技术方案,通过调用多帧检测函数,并获取自动驾驶对象的N帧感知信息和地图输出信息,根据各帧感知信息和地图输出信息构造得到多帧检测函数的N个多帧检测实例,在多帧检测函数的标志位为第一取值时使用模板函数根据该N个多帧检测实例确定多帧决策结果,最后根据多帧决策结果确定自动驾驶策略,实现了利用多帧感知和地图输出信息融合确定决策,提高了PnC决策的稳定性和鲁棒性,提升了用户体验。
[0110] 一些实施方式中,多帧检测函数继承自检测基类,检测基类至少包括以下属性:本帧决策结果、本帧时间戳和多帧决策结果;多帧检测函数至少包括检测参数和返回值,检测参数用于实现与多帧检测函数对应的单帧检测,返回值为单帧检测结果;构造目标多帧检测实例,包括:获取目标帧的感知信息和地图输出信息;调用多帧检测函数的检测参数得到目标单帧检测结果;确定目标单帧检测结果为目标多帧检测实例的本帧决策结果;其中,目标多帧检测实例为N个多帧检测实例中的任一实例。
[0111] 一些实施方式中,根据N个多帧检测实例确定多帧决策结果,包括:构建检测队列,将N个多帧检测实例依次加入检测队列;在检测队列中确定目标多帧检测实例集合;使用预设检测策略在目标多帧检测实例集合中确定命中多帧检测实例;确定命中多帧检测实例的多帧决策结果为多帧检测函数的多帧决策结果,并确定命中多帧检测实例的本帧时间戳为多帧检测函数的时间戳;其中,检测队列中顺序排列的各多帧检测实例的时间戳与当前时间之差依次增大,命中多帧检测实例的多帧决策结果由其本帧决策结果赋值得到。
[0112] 一些实施方式中,使用预设检测策略在检测队列中确定命中多帧检测实例,包括:定义第一得分数组和权重数组;将检测队列中各多帧检测实例的本帧决策结果依次写入第一得分数组;计算检测队列中各多帧检测实例的权重值,并将各权重值依次写入权重数组;
根据第一得分数组和权重数组计算得到目标得分,根据目标得分确定计算决策结果;自第一得分数组的末元素开始依次遍历第一得分数组,确定本帧决策结果与计算决策结果相同的第一个多帧检测实例为命中多帧检测实例;其中,第一得分数组的末元素为第一得分数组中的第一个元素,第一得分数组和权重数组中的元素排序方式与检测队列中各多帧检测实例的排序方式相同。
[0113] 一些实施方式中,计算检测队列中各多帧检测实例的权重值,包括:配置权重参数,权重参数大于0且小于1;确定权重数组中第i个权重值为权重参数的i+1次幂,i为大于或者等于0且小于N的整数。
[0114] 一些实施方式中,根据第一得分数组和权重数组计算得到目标得分,包括:将第一得分数组和权重数组中相同序号的元素相乘,并将得到的全部乘积相加,得到得分总数;将权重数组中的全部权重值相加,得到总权重值;将得分总数与总权重值之商作为目标得分。
[0115] 一些实施方式中,各多帧检测实例的本帧决策结果均为布尔值;根据目标得分确定计算决策结果,包括:响应于确定目标得分大于或者等于0.5,确定计算决策结果为第一决策结果;响应于确定目标得分小于0.5,确定计算决策结果为第二决策结果。
[0116] 一些实施方式中,使用预设检测策略在检测队列中确定命中多帧检测实例,包括:定义第二得分数组,将检测队列中各多帧检测实例的本帧决策结果依次写入第二得分数组,其中,各多帧检测实例的本帧决策结果均为布尔值;响应于确定第二得分数组中至少包括一个元素的值与其他元素的值不同,确定检测队列的次末元素为命中多帧检测实例,检测队列的次末元素为检测队列中倒数第二个加入的多帧检测实例;或者响应于确定第二得分数组中全部元素的值均相同,确定检测队列的末元素为命中多帧检测实例,检测队列的末元素为检测队列中最后一个加入的多帧检测实例。
[0117] 一些实施方式中,在将N个多帧检测实例依次加入检测队列前,还包括:响应于确定检测队列非空,获取检测队列的末元素的本帧时间戳,检测队列的末元素为检测队列中最后一个加入的多帧检测实例;响应于确定检测队列的末元素的本帧时间戳与当前时刻的差值大于第一预设阈值,清空检测队列;在将N个多帧检测实例依次加入检测队列时,还包括:响应于确定加入目标多帧检测实例后,检测队列中的多帧检测实例数量大于第二预设阈值,将检测队列的首元素移出检测队列,并将目标多帧检测实例保存于检测队列的队尾;其中,检测队列的首元素为检测队列中第一个加入的多帧检测实例,目标多帧检测实例为N个多帧检测实例中的任一实例。
[0118] 应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
[0119] 图7是本申请实施例提供的电子设备的示意图。如图7所示,该实施例的电子设备7包括:处理器701、存储器702以及存储在该存储器702中并且可在处理器701上运行的计算机程序703。处理器701执行计算机程序703时实现上述各个方法实施例中的步骤。或者,处理器701执行计算机程序703时实现上述各装置实施例中各模块/单元的功能。
[0120] 电子设备7可以是桌上型计算机、笔记本、掌上电脑及云端服务器等电子设备。电子设备7可以包括但不仅限于处理器701和存储器702。本领域技术人员可以理解,图7仅仅是电子设备7的示例,并不构成对电子设备7的限定,可以包括比图示更多或更少的部件,或者不同的部件。
[0121] 处理器701可以是中央处理单元(Central Processing Unit,CPU),也可以是其它通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field‑Programmable Gate Array,FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。
[0122] 存储器702可以是电子设备7的内部存储单元,例如,电子设备7的硬盘或内存。存储器702也可以是电子设备7的外部存储设备,例如,电子设备7上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。存储器702还可以既包括电子设备7的内部存储单元也包括外部存储设备。存储器702用于存储计算机程序以及电子设备所需的其它程序和数据。
[0123] 所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0124] 集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可以存储在计算机可读存储介质中,该计算机程序在被处理器执行时,可以实现上述各个方法实施例的步骤。计算机程序可以包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read‑Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、电载波信号、电信信号以及软件分发介质等。
[0125] 以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。