具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
相关技术中,自动驾驶车辆在行驶过程中,主要依靠高精度地图和全球导航卫星***(Global Navigation Satellite System,GNSS)定位车辆位置,进而确定人行横道区域。或者还可以基于自动驾驶车辆安装的高性能摄像机,结合视觉感知算法,对人行横道线进行识别,进而确定出人行横道区域。
但在自动驾驶车辆的实际行驶过程中,一些区域的路段可能没有高精度地图或者人行横道线被磨损而无法通过图像识别,导致无法准确确定出人行横道区域。
为了便于理解本公开实施例,下面对本公开实施例中涉及到的概念进行说明。
车路协同是自动驾驶和智能交通领域的未来发展趋势,通过车辆、路侧单元和云控平台之间相互配合,进行协同感知、协同计算和协同决策控制,可以实现道路基础设施和交通管理的数字化和智能化,可以构建深度融合、高度协同、安全高效的一体化***。
车路协同技术中的地图(MAP)消息集由路侧基础设施进行广播,从而向自动驾驶车辆传递局部区域的地图信息。地图消息集包括包括局部区域的路口信息、路段信息、车道信息和道路之间的连接关系等。单个地图消息可以包括多个路口或多个区域的地图数据。
如图1所示,图1为本公开实施例提供的MAP消息集的主体结构示意图。MAP消息集具体包括以下字段:
timeStamp(时间戳),为地图消息集的时间戳。
msgCount(消息编号),为地图消息集的编号。
nodes(节点),是指地图节点。节点是地图的最基本组成部分,可以是交叉路口,也可以是一个路段的端点。两个相邻且有上下游关系的节点可以标识一条有向路段。一个节点的地图消息集中包含的路段信息指示的路段,均将该节点作为下游端点。
其中,nodes中包括Seq of Node(地图节点列表),每个node的信息具体包括以下字段:
name(名称),指节点名称;
id,指节点的id,节点id由一个全局唯一的地区ID和一个地区内部唯一的ID组成;
refPos(3D)(参考位置),为节点的位置信息,单位是10的负七次方度,该点应尽量选取在接近路口中心的位置。
inLinks(路段),从一个节点到相邻另一个节点的道路称为一个有向路段。
其中,inLinks中包括Seq of Link(路段列表),每个路段的信息具体包括以下字段:
name(名称),为路段的名称;
upstreamNodeId(上游节点id),表示路段的上游节点ID;
speedLimits(速度限制),表示路段的限速信息;
LinkWidth(路段宽度),表示两个节点之间连接的路段的宽度,单位厘米;
Lanes(车道),表示路段包括的车道;
Points(位置点),为拟合该路段中心线的位置点列表;
Movements(移动参数),描述路段与下游路段的连接关系,以及该连接对应的本地路口处信号灯相位ID。
其中,Movements包括Seq of Movement(移动参数列表),每个Movement的信息具体包括以下字段:
remoteIntersection(远端交叉路口),表示下游路段出口节点;
phaseId(相位ID),表示信号灯相位ID。
lanes包括Seq of Lane(车道列表),每个lane的信息具体包括以下字段:
laneWidth(车道宽度),表示该车道的宽度;
laneID(车道ID),每一条有向路段上的每个车道,都拥有一个单独的ID,数值0表示无效ID;
laneAttributes(车道属性),包括车道共享情况以及车道本身所属的类别特性。包含shareWith(共享属性)和laneType(车道类型)两个属性;
Maneuvers(机动),用于定义一个(机动车)车道的允许转向行为;
connectsTo(连接关系),定义路段中每条车道,在下游路口处与下游路段中车道的转向连接关系列表;
Points(位置点),表示拟合车道中心线的位置点列表,列表中所有位置点按上游至下游顺序排列。Points包括Seq of RoadPoint(道路位置点列表),每个point的信息具体包括posOffset,posOffset表示位置偏移;
speedLimits(速度限制),表示车道上的限速信息。
其中,connectsTo包括Seq of Connection(连接关系列表),每个Connection的信息具体包括以下字段:
remoteIntersection(远端交叉路口),表示下游路段出口节点;
connectingLane(连接车道),用于定位上游车道转向连接的下游车道。包括下游车道ID以及该转向的允许行驶行为,下游车道ID的作用范围是该车道所在的路段;
phaseId(相位ID),表示信号灯相位ID。
关于MAP消息集的具体字段定义可参考V2X标准协议的规定,本公开实施例中不再详细描述。
为了解决上述技术问题,本公开实施例提供了一种人行横道区域确定方法,如图2所示,该方法包括:
S201、接收路侧单元广播的地图消息集。
本公开实施例中,路侧单元(Road Side Unit,RSU)为设置在道路旁的基础设施,RSU可以广播地图消息集,行驶在RSU广播范围内的自动驾驶车辆可以接收到地图消息集。
如图3所示,图3为本公开实施例提供的一种RSU广播地图消息集的示意图,图中1、2、3、4、5、6为路口编号,L1、L1'、L2、L3、L4、L5和L6为路段编号。RSU被设置在路段L2旁,P点为RSU在路段L2上的投影点,RSU的广播范围为覆盖起点S1至覆盖终点E1之间的路段,以及覆盖起点S2至覆盖终点E2之间的路段,行驶在该范围内的自动驾驶车辆可以接收到RSU广播的地图消息集。其中,覆盖起点S1至投影点P之间的距离d1为投影点P的上游道路距离,投影点P至覆盖终点E1之间的距离d2为投影点P的下游道路距离。
上述RSU广播的地图消息集可以包括多个区域的道路信息。
S202、从地图消息集中获取当前路段的路段宽度和中心点列表包括的终点位置。
其中,中心点列表包括用于拟合路段中心线的有序的多个位置点。
S203、基于终点位置和路段宽度,确定当前路段的人行横道区域。
采用本公开实施例,自动驾驶车辆可以接收到路侧单元广播的地图消息集,从地图消息集中获取当前路段的路段宽度和中心点列表包括的终点位置,基于终点位置和路段宽度,确定当前路段的人行横道区域;上述过程无需使用高精度地图,也无需对人行横道线进行识别,自动驾驶车辆可以利用地图消息集准确确定出人行横道区域。
结合图1所示的MAP消息集,在上述S202中,可以从地图消息集中获取标识当前路段的Link字段中linkwidth字段的值和Points字段中最后一个位置点的值。linkwidth字段的值为当前路段的路段宽度,Points字段中包括上述中心点列表,中心点列表中的最后一个位置点为当前路段的终点的位置。
如此,可以通过MAP消息集获取路段宽度和路段的终点位置,可以在无高精度地图或道路停止线被磨损的情况下,通过路段宽度和路段的终点位置确定人行横道的位置。
在本公开另一实施例中,自动驾驶车辆还可以确定停止线,根据交通规则,自动驾驶车辆可以在停止线前停车,在上述S202、从地图消息集中获取当前路段的路段宽度和中心点列表包括的终点位置之后,如图4所示,该方法还包括:
S401、将终点位置作为当前路段的停止线上,靠近人行横道一侧的边缘中心点。
作为示例,如图5a所示,中心点列表中包括的位置点为图5a中用于拟合车道2的中心线的位置点,该中心点列表中最后一个位置点为点A,即点A为终点位置。可以将点A作为停止线的边缘中心点。
S402、基于边缘中心点,将路段宽度作为停止线的长度,将第一预设值作为停止线的宽度,确定停止线的区域。
其中,第一预设值可以根据道路停止线的标准设置,例如,第一预设值可以被设置为40cm。
如图5a所示,在确定停止线的边缘中心点、停止线的长度和宽度后,即可确定出停止线的区域。可选地,本公开实施例中,可以基于停止线的区域绘制停止线,以模拟真实的道路情况。
一种实现方式中,可以将边缘中心点(例如点A)作为线段中点,将路段宽度作为线段的长度,确定出停止线的一条边。并且可以沿车道方向的反方向,将距离边缘中心点第一预设值处的位置点,作为停止线远离人行横道一侧的边缘中心点,即图5a中的点B。然后以点B为线段中点,将路段宽度作为线段的长度,确定出停止线的另一条边。将两条边的端点相连,即可得到一个矩形区域,将该矩形区域确定为停止线区域。
采用本公开实施例,由于终点位置为路段中心线的终点,所以可以将终点位置作为当前路段的停止线上,靠近人行横道一侧的边缘中心点,基于边缘中心点,将路段宽度作为停止线的长度,将第一预设值作为停止线的宽度,确定停止线的区域。如此,可以实现在无高精度地图或者停止线被磨损的情况下,准确确定出停止线的区域,以便自动驾驶车辆基于停止线制定安全的自动驾驶策略。
在本公开另一实施例中,上述S203、基于终点位置和路段宽度,确定当前路段的人行横道区域,具体可以实现为:
获取当前路段包括的车道数量;在车道数量大于等于2的情况下,将沿当前路段的车道方向,距离终点位置第一距离的位置点,作为靠近停止线一侧的人行横道边缘中心点;基于人行横道边缘中心点,将路段宽度作为人行横道的长度,将第二预设值作为人行横道的宽度,确定人行横道区域;或者,
在车道数量小于2的情况下,将沿当前路段的车道方向,距离终点位置第二距离的位置点,作为靠近停止线一侧的人行横道边缘中心点;基于人行横道边缘中心点,将路段宽度作为人行横道的长度,将第二预设值作为人行横道的宽度,确定人行横道区域。
其中,当前路段的车道数为当前路段的路段宽度与车道宽度的比值。车道宽度为地图消息集中link字段中包括的laneWidth字段的值。
当前路段的车道方向的确定方式为:从地图消息集中获取当前路段上游节点的位置和下游节点的位置;将上游节点的位置至下游节点的位置方向,作为当前路段的车道方向。
结合图1所示的地图消息集,可获取地图消息集的refPos(3D)字段的值,从而得到下游节点的位置。并且可从路段信息的upstreamNodeId字段中,获取上游节点的ID,再基于上游节点的ID获取上游节点的地图消息集,从上游节点的地图消息集的refPos(3D)字段中获取上游节点的位置。
其中,refPos(3D)字段的值可以为经纬度信息,基于两个节点的经纬度,可以确定从上游节点至下游节点的方向,该方向为当前路段的车道方向。
如此,可以根据地图消息集确定当前路段的车道方向,在无高精地图或人行横道磨损的情况下,也可基于车道方向确定人行横道的方位。
上述第一距离、第二距离和第二预设值可以根据道路标准设置。例如,第一距离可以设置为3m,第二距离可以设置为1m,第二预设值可以设置为3m。
仍以图5a为例,图5a中的车道数量大于2,则可将沿车道方向,距离终点位置(点A)3m处的位置点(点C),作为人行横道靠近停止线一侧的边缘中心点。
在确定人行横道的边缘中心点、人行横道的长度和宽度后,即可确定出人行横道的区域。可选地,本公开实施例中,可以基于人行横道的区域绘制人行横道,以模拟真实的道路情况。
一种实现方式中,可以将人行横道的边缘中心点(点C)作为线段中点,将人行横道的长度作为该线段的长度,确定出人行横道区域的一条边。并且可以沿车道方向,将距离人行横道的边缘中心点(点C)第二预设值处的位置点(点D),作为人行横道区域的另一条边的边缘中心点。然后以点D为线段中点,将人行横道的长度作为该线段的长度,确定出人行横道区域的另一条边。将两条边的端点相连,即可得到一个矩形区域,将该矩形区域作为人行横道区域。
可选的,在得到其中一个路段的停止线和人行横道区域之后,可以根据道路信息,对确定出的停止线和人行横道区域进行平移和/或旋转操作,确定同一路口的其他路段的停止线和人行横道区域。
如图5b所示,图5b为本公开实施例提供的确定人行横道区域的示例性场景图,图5b中以路口A为十字路口为例进行说明。其中,车道a和车道d分别为右转和左转车道,车道c和车道b为直行车道。可以根据上述实施例中的方式确定出车道1、车道2和车道3所属路段的停止线和人行横道区域。进而,基于路口的标准尺寸,将确定出的停止线和人行横道区域以平移和旋转的方式,确定出其他路段的停止线和人行横道区域。
采用本公开实施例,可以通过获取当前路段的车道数,根据当前路段的车道数确定人行横道的边缘中心点与路段终点位置的距离,相当于确定了人行横道边缘的位置,进而,可以根据路段宽度和第二预设值确定出人行横道区域。上述过程无需使用高精地图和摄像头拍摄的人行横道的图像,可以实现在无高精度地图或者人行横道线磨损情况下,确定人行横道区域。
如图6所示,图6为本公开实施例提供的自动驾驶车辆驾驶决策的示例性流程图,下面结合图6进行说明。
S601、路侧单元RSU广播地图消息集。
S602、自动驾驶车辆接收并解析地图消息集,获取当前路段的Points、节点(Node)、路段(Link)、车道(Lane)等数据。
从Points中获取当前路段的终点位置,根据当前路段的上游节点位置和下游节点位置,确定当前路段的车道方向,获取路段宽度(linkWidth)和车道宽度(laneWidth)。
S603、根据Points中的终点位置,确定停止线。
确定停止线的方式与上述实施中确定停止线的方式一致,可以参考上述实施例中的有关描述,此处不再赘述。
在S603之后,可以执行S604和S607。
S604、判断车道数是否大于等于2。
车道路数等于路段宽度除以车道宽度。
判断结果为是,执行S605;判断结果为否,执行S606。
S605、在距离终点位置3米处,确定人行横道区域。
S606、在距离终点位置1米处,确定人行横道区域。
S605和S606中确定人行横道区域的方式与上述实施例中确定人行横道区域的方式一致,可以参考上述实施例中的有关描述,此处不再赘述。
S607、根据停止线和人行横道区域,制定驾驶策略。
采用本公开实施例提供的技术方案,自动驾驶车辆可以根据路侧单元发送的地图消息,从地图消息集中获取当前路段的终点位置,根据终点位置确定停止线和人行横道区域,制定自动驾驶车辆得的驾驶策略。与现有技术中依赖高精度地图或者视觉感识别人行横道线的方案相比,本公开实施例提供的技术方案可以在无高精度地图的路段确定人行横道区域,同时不需要依赖自动驾驶车辆上安装的摄像机对人行横道线进行视觉感知识别,即在车辆不具备高性能摄像机和和不具备感知算法的情况下,或在人行横道线被磨损的情况下,均可确定人行横道区域,从而辅助车辆指定行驶策略。
基于相同的发明构思,本公开实施例还提供了一种人行横道区域确定装置,如图7所示,该装置包括:
接收模块701,用于接收路侧单元广播的地图消息集;
获取模块702,用于从地图消息集中获取当前路段的路段宽度和中心点列表包括的终点位置,中心点列表包括用于拟合路段中心线的有序的多个位置点;
确定模块703,用于基于终点位置和路段宽度,确定当前路段的人行横道区域。
可选的,确定模块703,还用于:
将终点位置作为当前路段的停止线上,靠近人行横道一侧的边缘中心点;
基于边缘中心点,将路段宽度作为停止线的长度,将第一预设值作为停止线的宽度,确定停止线的区域。
可选的,所确定模块703,具体用于:
获取当前路段包括的车道数量;
在车道数量大于等于2的情况下,将沿当前路段的车道方向,距离终点位置第一距离的位置点,作为靠近停止线一侧的人行横道边缘中心点;基于人行横道边缘中心点,将路段宽度作为人行横道的长度,将第二预设值作为人行横道的宽度,确定人行横道区域;或者,
在车道数量小于2的情况下,将沿当前路段的车道方向,距离终点位置第二距离的位置点,作为靠近停止线一侧的人行横道边缘中心点;基于人行横道边缘中心点,将路段宽度作为人行横道的长度,将第二预设值作为人行横道的宽度,确定人行横道区域。
可选的,获取模块702,还用于:
从地图消息集中获取当前路段上游节点的位置和下游节点的位置;
将上游节点的位置至下游节点的位置方向,作为当前路段的车道方向。
可选的,获取模块702,具体用于:
从地图消息集中获取标识当前路段的Link字段中linkwidth字段的值和Points字段中最后一个位置点的值,Points字段包括中心点列表。
本公开的技术方案中,所涉及的地图消息集的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
需要说明的是,本实施例中的地图消息集来自于公开数据集。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图8示出了可以用来实施本公开的实施例的示例电子设备800的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图8所示,设备800包括计算单元801,其可以根据存储在只读存储器(ROM)802中的计算机程序或者从存储单元808加载到随机访问存储器(RAM)803中的计算机程序,来执行各种适当的动作和处理。在RAM 803中,还可存储设备800操作所需的各种程序和数据。计算单元801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
设备800中的多个部件连接至I/O接口805,包括:输入单元806,例如键盘、鼠标等;输出单元807,例如各种类型的显示器、扬声器等;存储单元808,例如磁盘、光盘等;以及通信单元809,例如网卡、调制解调器、无线通信收发机等。通信单元809允许设备800通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元801可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元801的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元801执行上文所描述的各个方法和处理,例如人行横道区域确定方法。例如,在一些实施例中,人行横道区域确定方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元808。在一些实施例中,计算机程序的部分或者全部可以经由ROM 802和/或通信单元809而被载入和/或安装到设备800上。当计算机程序加载到RAM 803并由计算单元801执行时,可以执行上文描述的人行横道区域确定方法的一个或多个步骤。备选地,在其他实施例中,计算单元801可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行人行横道区域确定方法。
本公开实施例还提供一种自动驾驶车辆,包括上述电子设备,电子设备的处理器能够执行上述方法实施例中的方法步骤。
本文中以上描述的***和技术的各种实施方式可以在数字电子电路***、集成电路***、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上***的***(SOC)、复杂可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程***上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储***、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储***、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行***、装置或设备使用或与指令执行***、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体***、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的***和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的***和技术实施在包括后台部件的计算***(例如,作为数据服务器)、或者包括中间件部件的计算***(例如,应用服务器)、或者包括前端部件的计算***(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的***和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算***中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将***的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机***可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式***的服务器,或者是结合了区块链的服务器。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。