专利类型 | 发明授权 | 法律事件 | 公开; 实质审查; 授权; |
专利有效性 | 有效专利 | 当前状态 | 授权 |
申请号 | CN202080093044.7 | 申请日 | 2020-07-20 |
公开(公告)号 | CN114930391B | 公开(公告)日 | 2025-04-22 |
申请人 | 深圳元戎启行科技有限公司; | 申请人类型 | 企业 |
发明人 | 解婧玮; | 第一发明人 | 解婧玮 |
权利人 | 深圳元戎启行科技有限公司 | 权利人类型 | 企业 |
当前权利人 | 深圳元戎启行科技有限公司 | 当前权利人类型 | 企业 |
省份 | 当前专利权人所在省份:广东省 | 城市 | 当前专利权人所在城市:广东省深圳市 |
具体地址 | 当前专利权人所在详细地址:广东省深圳市南山区粤海街道高新区社区科苑南路3099号中国储能大厦1601 | 邮编 | 当前专利权人邮编:518054 |
主IPC国际分类 | G06F17/00 | 所有IPC国际分类 | G06F17/00 |
专利引用数量 | 2 | 专利被引用数量 | 0 |
专利权利要求数量 | 10 | 专利文献类型 | B |
专利代理机构 | 华进联合专利商标代理有限公司 | 专利代理人 | 邓丹; |
摘要 | 一种地图更新方法、装置、计算机设备和存储介质,所述方法包括:获取待更新地图的新的关键 帧 和所述待更新地图的历史 位姿 图(S201);将所述新的关键帧作为新的 节点 添加到所述历史位姿图中,得到新的位姿图(S202);识别所述新的位姿图中的待更新节点(S203);对所述待更新地图中所述待更新节点对应的地图区域进行更新(S204)。采用上述方法,实现了根据待更新地图的新的关键帧和待更新地图的历史位姿图,对待更新地图进行更新的目的,避免了直接将新的地图数据匹配到旧地图数据上,导致更新后的地图数据的准确度较低的 缺陷 ,从而提高了地图更新的准确度。 | ||
权利要求 | 1.一种地图更新方法,其特征在于,所述方法包括: |
||
说明书全文 | 地图更新方法、装置、计算机设备和存储介质技术领域[0001] 本申请涉及地图处理技术领域,特别是涉及一种地图更新方法、装置、计算机设备和存储介质。 背景技术[0003] 然而,目前的地图更新方法,一般是将新增的地图数据整体匹配到旧地图数据,然后进行增量式更新;但是,直接将新的地图数据整体匹配到旧地图数据上,旧地图数据的精度就会限制建图的精度,导致更新后的地图数据的准确度较低,从而造成地图更新的准确度较低。发明内容 [0004] 基于此,有必要针对上述技术问题,提供一种能够地图更新的准确度的地图更新方法、装置、计算机设备和存储介质。 [0005] 一种地图更新方法,所述方法包括: [0007] 将所述新的关键帧作为新的节点添加到所述历史位姿图中,得到新的位姿图; [0008] 识别所述新的位姿图中的待更新节点; [0009] 对所述待更新地图中所述待更新节点对应的地图区域进行更新。 [0010] 在其中一个实施例中,所述将所述新的关键帧作为新的节点添加到所述历史位姿图中,得到新的位姿图,包括: [0011] 将所述新的关键帧作为新的节点; [0012] 在所述新的节点和所述历史位姿图中的历史节点之间进行回环检测,得到所述新的节点和所述历史位姿图中的历史节点之间的约束关系; [0013] 根据所述约束关系,将所述新的节点添加到所述历史位姿图中的对应位置,得到新的位姿图。 [0014] 在其中一个实施例中,所述在所述新的节点和所述历史位姿图中的历史节点之间进行回环检测,得到所述新的节点和所述历史位姿图中的历史节点之间的约束关系,包括: [0015] 在所述新的节点和所述历史位姿图中的历史节点之间进行回环检测,得到与所述新的节点时间或位置相邻的历史节点; [0016] 根据与所述新的节点时间或位置相邻的历史节点,得到所述新的节点和所述历史位姿图中的所述历史节点之间的约束关系。 [0017] 在其中一个实施例中,所述识别所述新的位姿图中的待更新节点,包括: [0018] 当所述新的位姿图中的所述新的节点的数量达到第一预设数量时,构建第一节点集合、第二节点集合和第三节点集合;所述第一节点集合为所述新的节点所构成的集合,所述第二节点集合为与所述新的节点存在约束关系,且不属于所述第一节点集合的历史节点所构成的集合,所述第三节点集合为与所述第二节点集合中的历史节点存在约束关系,且不属于所述第一节点集合和所述第二节点集合的历史节点所构成的集合; [0019] 通过预先训练的优化模型,对第一节点集合、第二节点集合和第三节点集合中的载体状态量进行优化,直到所述第一节点集合中的节点的数量达到第二预设数量; [0020] 若所述第一节点集合中的节点的数量达到所述第二预设数量,则将所述第一节点集合中的节点作为待更新节点。 [0021] 在其中一个实施例中,所述对所述待更新地图中所述待更新节点对应的地图区域进行更新,包括: [0022] 获取所述待更新节点对应的地图数据; [0023] 确定所述地图数据覆盖的地图区域; [0024] 对所述待更新地图中的所述地图区域进行更新。 [0025] 在其中一个实施例中,所述获取待更新地图的新的关键帧,包括: [0027] 根据所述传感器数据,确定所述载体设备在各个时刻的初始载体状态量; [0028] 从所述载体设备在各个时刻的初始载体状态量中,筛选出满足预设条件的初始载体状态量,作为所述待更新地图的新的关键帧。 [0029] 在其中一个实施例中,在对所述待更新地图中所述待更新节点对应的地图区域进行更新之后,还包括: [0030] 获取更新后的地图; [0031] 将所述更新后的地图转化为预设类型的自动驾驶地图; [0032] 将所述自动驾驶地图发送至自动驾驶车辆终端,触发所述自动驾驶车辆终端控制对应的自动驾驶车辆驾驶。 [0033] 一种地图更新装置,所述装置包括: [0034] 获取模块,用于获取待更新地图的新的关键帧和所述待更新地图的历史位姿图; [0035] 添加模块,用于将所述新的关键帧作为新的节点添加到所述历史位姿图中,得到新的位姿图; [0036] 识别模块,用于识别所述新的位姿图中的待更新节点; [0037] 更新模块,用于对所述待更新地图中所述待更新节点对应的地图区域进行更新。 [0039] 获取模块,用于获取待更新地图的新的关键帧和所述待更新地图的历史位姿图; [0040] 添加模块,用于将所述新的关键帧作为新的节点添加到所述历史位姿图中,得到新的位姿图; [0041] 识别模块,用于识别所述新的位姿图中的待更新节点; [0042] 更新模块,用于对所述待更新地图中所述待更新节点对应的地图区域进行更新。 [0043] 一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤: [0044] 获取模块,用于获取待更新地图的新的关键帧和所述待更新地图的历史位姿图; [0045] 添加模块,用于将所述新的关键帧作为新的节点添加到所述历史位姿图中,得到新的位姿图; [0046] 识别模块,用于识别所述新的位姿图中的待更新节点; [0047] 更新模块,用于对所述待更新地图中所述待更新节点对应的地图区域进行更新。 [0048] 上述地图更新方法、装置、计算机设备和存储介质,通过获取待更新地图的新的关键帧和待更新地图的历史位姿图;将新的关键帧作为新的节点添加到历史位姿图中,得到新的位姿图;识别新的位姿图中的待更新节点;对待更新地图中待更新节点对应的地图区域进行更新;实现了根据待更新地图的新的关键帧和待更新地图的历史位姿图,对待更新地图进行更新的目的,避免了直接将新的地图数据匹配到旧地图数据上,导致更新后的地图数据的准确度较低的缺陷,从而提高了地图更新的准确度;同时,先将新的关键帧作为新的节点添加到历史位姿图中,得到新的位姿图,再识别新的位姿图中的待更新节点,进而对待更新地图进行更新,综合考虑了新的位姿图中的待更新节点,并非直接利用新的节点对待更新地图进行更新,进一步提高了地图更新的准确度。附图说明 [0049] 图1为一个实施例中地图更新方法的应用环境图; [0050] 图2为一个实施例中地图更新方法的流程示意图; [0051] 图3为一个实施例中识别新的位姿图中的待更新节点的步骤的流程示意图; [0052] 图4为一个实施例中获取待更新地图的新的关键帧的步骤的流程示意图; [0053] 图5为另一个实施例中地图更新方法的流程示意图; [0054] 图6为又一个实施例中地图更新方法的流程示意图; [0055] 图7为一个实施例中地图更新装置的结构框图; [0056] 图8为一个实施例中计算机设备的内部结构图。 具体实施方式[0057] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。 [0058] 本申请提供的地图更新方法,可以应用于如图1所示的应用环境中。其中,传感器110通过网络与服务器120进行通信,传感器110设置在载体设备上,用于在载体设备在待更新地图的目标路线上的移动过程中,采集相应的传感器数据,并通过网络将传感器数据上传至服务器120;服务器120根据接收的传感器数据,确定待更新地图的新的关键帧,并获取待更新地图的历史位姿图;将新的关键帧作为新的节点添加到历史位姿图中,得到新的位姿图;识别新的位姿图中的待更新节点;对待更新地图中待更新节点对应的地图区域进行更新,得到更新后的地图。其中,传感器可以但不限于是各种相机、GPS(Global Positioning System,全球定位系统)接收机、激光雷达、IMU(Inertial Measurement Unit,惯性测量单元)、轮速计等,服务器120可以用独立的服务器或者是多个服务器组成的服务器集群来实现。 [0059] 在一个实施例中,如图2所示,提供了一种地图更新方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤: [0060] 步骤S201,获取待更新地图的新的关键帧和待更新地图的历史位姿图。 [0061] 其中,待更新地图是指需要更新的地图,比如点云地图、栅格地图、语义地图等。新的关键帧是指通过新采集的传感器数据所确定的载体状态量,具体是指某一时刻下的载体状态量,可以包含位置、姿态值,也可包含其他待优化的载体状态量。关键帧之间的约束是指不同时刻的载体状态量的关系(比如传感器测量得到的关键帧之间的相对运动关系,或从回环检测得到的关键帧之间的相对位置关系,可以作为约束)。位姿图是指将关键帧作为节点,关键帧之间的约束作为边所构成的图优化模型,具体是指包含载体设备的位置和姿态等状态信息,及不同时间之间载体状态量变化关系的图模型,历史位姿图是指将历史的关键帧作为节点,历史关键帧之间的约束作为边所构成的图。 [0062] 具体地,服务器接收传感器采集的新的传感器数据,根据新的传感器数据,确定关键时刻的载体状态量,作为待更新地图的新的关键帧;获取待更新地图的地图标识,比如地图编号、地图名称等,根据地图标识查询存储有多个地图标识对应的历史位姿图,得到待更新地图的地图标识对应的历史位姿图,作为待更新地图的历史位姿图。这样,通过获取待更新地图的新的关键帧和历史位姿图,有利于后续将新的关键帧作为新的节点添加到历史位姿图中,得到新的位姿图。 [0063] 进一步地,服务器还可以通过下述方式获取历史位姿图:获取载体设备上安装的传感器在目标路线上采集的历史传感器数据;根据历史传感器数据,确定载体设备在各个历史时刻的初始载体状态量;从载体设备在各个历史时刻的初始载体状态量中,筛选出满足预设条件的初始载体状态量,作为历史关键帧;以历史关键帧为节点,构建历史位姿图。 [0064] 步骤S202,将新的关键帧作为新的节点添加到历史位姿图中,得到新的位姿图。 [0065] 其中,新的位姿图是指在历史位姿图的基础上添加了新的关键帧所对应的节点后所构成的位姿图。 [0066] 具体地,服务器将新的关键帧作为新的节点,并获取历史位姿图中的历史节点;获取预设的回环检测指令,根据预设的回环检测指令,确定新的节点与历史位姿图中的历史节点之间的约束关系;根据约束关系,将新的节点添加到历史位姿图中,得到新的位姿图。这样,通过将新的关键帧作为新的节点添加到历史位姿图中,得到新的位姿图,有利于后续综合考虑新的位姿图中的节点,以确定新的位姿图中的待更新节点。 [0067] 步骤S203,识别新的位姿图中的待更新节点。 [0068] 其中,待更新节点是指需要更新的节点。 [0069] 具体地,服务器获取新的位姿图中的节点的载体状态量,通过预先训练的优化模型,对新的位姿图中的节点的载体状态量进行优化处理,得到新的位姿图中的待优化节点,作为新的位姿图中的待更新节点。这样,有利于后续对所述待更新地图中所述待更新节点对应的地图区域进行更新,综合考虑了新的位姿图中的待更新节点,并非直接利用新的节点对待更新地图进行更新,进一步提高了地图更新的准确度。 [0070] 进一步地,服务器还可以获取预设的待更新节点识别指令,根据预设的待更新节点识别指令对新的位姿图中的节点进行分析处理,得到新的位姿图中的待更新节点;其中,预设的待更新节点识别指令是一种能够自动识别位姿图中的待更新节点的指令。 [0071] 步骤S204,对待更新地图中待更新节点对应的地图区域进行更新。 [0072] 具体地,服务器获取待更新节点在待更新地图中所对应的节点,根据待更新节点在待更新地图中所对应的节点,确定待更新地图中的待更新的地图区域;对待更新地图中的待更新的地图区域进行更新,得到更新后的地图。这样,避免了直接将新的地图数据匹配到旧地图数据上,导致更新后的地图数据的准确度较低的缺陷,从而提高了地图更新的准确度。 [0073] 上述地图更新方法,通过获取待更新地图的新的关键帧和待更新地图的历史位姿图;将新的关键帧作为新的节点添加到历史位姿图中,得到新的位姿图;识别新的位姿图中的待更新节点;对待更新地图中待更新节点对应的地图区域进行更新;实现了根据待更新地图的新的关键帧和待更新地图的历史位姿图,对待更新地图进行更新的目的,避免了直接将新的地图数据匹配到旧地图数据上,导致更新后的地图数据的准确度较低的缺陷,从而提高了地图更新的准确度;同时,先将新的关键帧作为新的节点添加到历史位姿图中,得到新的位姿图,再识别新的位姿图中的待更新节点,进而对待更新地图进行更新,综合考虑了新的位姿图中的待更新节点,并非直接利用新的节点对待更新地图进行更新,进一步提高了地图更新的准确度。 [0074] 在一个实施例中,上述步骤S202,将新的关键帧作为新的节点添加到历史位姿图中,得到新的位姿图,包括:将新的关键帧作为新的节点;在新的节点和历史位姿图中的历史节点之间进行回环检测,得到新的节点和历史位姿图中的历史节点之间的约束关系;根据约束关系,将新的节点添加到历史位姿图中的对应位置,得到新的位姿图。 [0075] 其中,约束关系是指节点之间的位置关系,或者节点所对应时间之间的关系。 [0076] 具体地,服务器获取预设的回环检测指令以及历史位姿图中的历史节点;将新的关键帧作为新的节点,并通过预设的回环检测指令,在新的节点和历史位姿图中的历史节点之间进行回环检测,若检测到新的节点和历史位姿图中的历史节点之间存在约束关系,则构建新的节点和历史位姿图中的历史节点之间的约束关系;根据约束关系,确定新的节点在历史位姿图中的对应位置;将新的节点添加到历史位姿图中的对应位置,得到新的位姿图。 [0077] 举例说明,当一个新的关键帧添加到历史位姿图时,即将新的关键帧作为历史位姿图中新建立的节点时,服务器会在新建立的节点与历史位姿图中的历史节点之间进行回环检测,尝试在新加入的节点与历史位姿图中的历史节点之间建立约束关系,从而将新的节点添加到历史位姿图中的对应位置,得到新的位姿图。 [0078] 上述实施例,通过将新的关键帧作为新的节点添加到历史位姿图中,得到新的位姿图,有利于后续综合考虑新的位姿图中的节点,以确定新的位姿图中的待更新节点。 [0079] 在一个实施例中,在新的节点和历史位姿图中的历史节点之间进行回环检测,得到新的节点和历史位姿图中的历史节点之间的约束关系,包括:在新的节点和历史位姿图中的历史节点之间进行回环检测,得到与新的节点时间或位置相邻的历史节点;根据与新的节点时间或位置相邻的历史节点,得到新的节点和历史位姿图中的历史节点之间的约束关系。 [0080] 举例说明,对于一个新建立的节点,它可以和其他节点构建两种类型的边,一种是相邻时刻节点之间的边,来自本地数据库提供的相邻时间的帧之间的关系;另一种是相关位置的节点之间的边,来自本地数据库提供的空间上相邻的帧之间的关系。例如,如果在时刻T1和时刻T2分别有一个关键帧,对应图中的节点V1、V2,且含有状态量state_1和state_2,当使用轮速计数据时,可以测得车辆从T1到T2时刻,基于载体坐标系frame1发生了Trans_12_wheel的移动,且这个观测值Trans_12_wheel的协方差矩阵为Cov_12_wheel,则可以根据轮速计的测量值设置对关键帧T1和T2的约束,设残差为:Residual_12_wheel=Trans_12_wheel‑1·Trans01‑1·Tans02。则在相邻时间的关键帧T1和T2之间建立的约束是,希望优化后的状态量Trans01和Trans02可以使Residual_12_wheelT·Cov_12_wheel·Residual_12_wheel的值尽量小。如果对于T4时刻的关键帧,作为节点V4存入图中,且模块S04通过比较关键帧T4和关键帧T1所含有的点云数据,在他们之间检测到回环,并通过ICP(Iterative Closest Point,迭代最近点)算法得到这两帧之间的坐标转换关系的观测值Trans_14_icp和此观测值的协方差矩阵为Cov_14_icp,则可以根据两个关键帧之间的空间变换观测值Trans_14_icp在V1和V4两个位置相关的节点之间建立约束,设残差为 Residual_14_icp=Trans_14_icp‑1·Trans01‑1·Tans04。希望优化后的状态量Trans01和Trans04可以使Residual_14_icpT·Cov_14_icp·Residual_14_icp的值尽量小。 [0081] 上述实施例,通过在新的节点和历史位姿图中的历史节点之间进行回环检测,得到新的节点和历史位姿图中的历史节点之间的约束关系,有利于后续根据约束关系,将新的节点添加到历史位姿图中的对应位置,得到新的位姿图。 [0082] 在一个实施例中,如图3所示,上述步骤S203,识别新的位姿图中的待更新节点,具体包括如下步骤: [0083] 步骤S301,当新的位姿图中的新的节点的数量达到第一预设数量时,构建第一节点集合、第二节点集合和第三节点集合。 [0084] 其中,第一节点集合为新的节点所构成的集合,第二节点集合为与新的节点存在约束关系,且不属于第一节点集合的历史节点所构成的集合,第三节点集合为与第二节点集合中的历史节点存在约束关系,且不属于第一节点集合和第二节点集合的历史节点所构成的集合。 [0085] 步骤S302,通过预先训练的优化模型,对第一节点集合、第二节点集合和第三节点集合中的载体状态量进行优化,直到第一节点集合中的节点的数量达到第二预设数量。 [0086] 其中,预先训练的优化模型是指能够对位姿图中的节点进行优化的模型。 [0087] 具体地,服务器通过预先训练的优化模型,将第一节点集合、第二节点集合和第三节点集合内的节点之间定义的残差项作为约束条件,将第一节点集合、第二节点集合所包含的载体状态量作为待优化的载体状态量,将第三节点集合包含的载体状态量设为固定变量,进行优化得到结果;对于第二节点集合包含的节点,比较其优化前后的载体状态量的差异,如果对于第二节点集合中的某个节点的载体状态量的更新值超过对应的阈值,则将该节点从第二节点集合移动到第一节点集合中,将第三节点集合中与该节点有约束关系的目标节点移动到第二节点集合,并从新的位姿图中找到与目标节点存在约束关系且不属于第一节点集合、第二节点集合中的节点加入第三节点集合,再次执行上述过程;若第二节点集合中没有载体状态量的更新值大于对应的阈值,则结束优化,或者第一节点集合中的节点的数量达到第二预设数量,则结束优化。 [0088] 步骤S303,若第一节点集合中的节点的数量达到第二预设数量,则将第一节点集合中的节点作为待更新节点。 [0089] 其中,第二预设数量大于第一预设数量。 [0090] 举例说明,服务器从新的位姿图中选取需要优化的节点,以一定频率对新的位姿图进行优化;为了实现地图构建的持续更新,会涉及大量载体状态量的优化,故通过选取部分载体状态量进行优化,具体如下: [0091] Step1:每当位姿图中新增K=20个节点,进入step2。 [0092] Step2:集合G1为本轮优化需要更新的节点,初始化为这K个新增节点组成的集合。集合G2为本轮优化中可能需要更新的节点,初始化为与这K个新增节点之间存在约束关系,但不在集合G1中的节点,集合G3为本轮优化中不需要更新的节点,初始化为与集合G2中的节点之间存在约束关系,但不存在于G1和G2中的节点。初始化之后,进入Step3。 [0093] Step3:使用优化算法,将G1、G2和G3内的节点之间定义的残差项作为约束,将G1和G2含有的状态量设为待优化变量,将G3含有的状态量设为固定变量,进行优化得到结果。对于G2所含的节点,比较其优化前后状态量的差异,如果对于G2中的某个节点Vn,其状态量的更新值超过阈值d_thresho]d=[0.05m,0.05m,0.05m,0.1degree,0.1degree,0.1degree],则将节点Vn从集合G2移到G1,将与Vn直接有约束关系的G3中的每个节点Vn’移到G2,并从位姿图中找到与每个Vn’存在约束关系且不在G1、G2中的节点加入G3,再次执行Step3。若G2中没有状态量的更新值大于阈值,则结束优化。为了控制优化时的计算量,可以对集合G1的元素个数设置上限,比如当集合G1内的节点数量大于阈值n_max_node=10000时,则停止循环。 [0094] 需要说明的是,优化算法可以使用线性或非线性最小二乘,常见的有高斯牛顿法等,在实现中可以直接使用现有的优化算法库,如ceres solver,g2o等。另外,当优化问题涉及的变量不多时,可以使用传统的后端优化方法,等待所有新的关键帧加入位姿图后,对整个位姿图进行优化。比如使用ceres等优化算法库,将之前定义好的载体状态量和残差项输入优化模型,对所有载体状态量进行最优估计,得到优化后的状态量。 [0095] 进一步地,随着地图的持续更新,还可能需要简化位姿图,删去过于老旧的数据,或对关键帧节点进行再次抽稀,减少需要储存和计算的数据量;比如,旧的位姿图节点与新增的位姿图节点的时间差异大于1年时,从位姿图中移除该数据。 [0096] 上述实施例,通过识别新的位姿图中的待更新节点,有利于后续对所述待更新地图中所述待更新节点对应的地图区域进行更新,综合考虑了新的位姿图中的待更新节点,并非直接利用新的节点对待更新地图进行更新,进一步提高了地图更新的准确度。 [0097] 在一个实施例中,上述步骤S204,对待更新地图中待更新节点对应的地图区域进行更新,包括:获取待更新节点对应的地图数据;确定地图数据覆盖的地图区域;对待更新地图中的地图区域进行更新。 [0098] 其中,地图数据有多种类型,可以是指点云数据,也可以是指由RGB三色所表示的二维彩色栅格地图,还可以是指二维的灰度图;当然,地图数据还可以其他类型的数据,具体在此不做限定。 [0099] 具体地,服务器获取待更新节点对应的地图数据,对待更新节点对应的地图数据所覆盖的地图区域进行统计分析,得到地图数据覆盖的地图区域;重新利用地图数据和位姿轨迹,对待更新地图中的地图区域进行更新,得到更新后的地图,作为用于自动驾驶的高精度地图。举例说明,使用优化后的位姿轨迹,内插得到每一帧点云数据的位姿,从而更新后的三维点云地图。 [0100] 上述实施例,通过对待更新地图中待更新节点对应的地图区域进行更新,避免了直接将新的地图数据匹配到旧地图数据上,导致更新后的地图数据的准确度较低的缺陷,从而提高了地图更新的准确度。 [0101] 在一个实施例中,如图4所示,上述步骤S201,获取待更新地图的新的关键帧,具体包括如下步骤: [0102] 步骤S401,获取载体设备上安装的传感器在待更新地图的目标路线上采集的传感器数据。 [0103] 具体地,通过安装各类传感器(比如相机、GPS接收机、激光雷达、IMU、轮速计等)的载体设备(如汽车、无人机等),沿着待更新地图的目标路线上驾驶并采集沿路的传感器数据,并将传感器数据通过网络发送至对应的服务器;或者将采集得到的传感器数据以特定格式保存在载体设备的存储器中,再通过服务器从存储器中读取这些以特定格式保存的传感器数据。 [0104] 当然,也可以通过安装在目标路线的固定位置的传感器进行测量,并将测量得到的传感器数据通过网络发送至对应的服务器;传感器数据除了传感器本身输出的数据,还可以包含该数据的采集时间,单个传感器数据的时间轴应该保持一致。 [0105] 举例来说,使用汽车作为载体设备,使用安装在汽车上的激光雷达和GPS接收机作为传感器,在目标路线上进行驾驶和数据采集,驾驶过程中将传感器获取到的传感器数据通过网络实时传送到云端的服务器,采集结束后从服务器将本次采集得到的传感器数据读取出来。 [0106] 需要说明的是,通过搭配使用高精度和低精度的地图采集车,在高覆盖率的情况下,降低采集成本。 [0107] 步骤S402,根据传感器数据,确定载体设备在各个时刻的初始载体状态量。 [0108] 其中,载体状态量可以包含载体设备在特定时刻在特定参考坐标系(如ENU全局坐标系,或以载体初始时刻位置为原点的局部坐标系等)下的位置、姿态、速度、加速度等信息,还可以包含传感器在不同时刻下的状态信息(比如IMU零偏、车轮半径等)。本步骤中使用的里程计算法,根据实际的应用场景和传感器配置按需选取;基于相机传感器,可以使用特征点法、直接法、光流法等视觉里程计算法;基于激光传感器,可以使用ICP、NDT等点云匹配算法计算相邻时刻的点云相对位置关系;还可以使用GPS传感器,直接使用GPS输出的传感器位置信息,通过内插得到每个时刻下载体工具的位置初始值。 [0109] 具体地,服务器基于传感器数据,估算相邻时刻下的载体状态量的变化关系;根据相邻时刻下的载体状态量的变化关系,确定载体设备在各个时刻的初始载体状态量。 [0110] 举例说明,使用汽车作为载体设备,载体坐标系定义为以汽车四轮中心为坐标系原点的直角坐标系,xyz轴分别指向车的前、左、上方。用Ft表示t时刻时的载体坐标系。以初始时刻t=0时的载体坐标系F0作为参考坐标系。用Trans_mn=[p_mn,R_mn]表示从坐标系Fn到坐标系Fm的坐标转换关系,p_mn为坐标系Fn的坐标原点在坐标系Fm中的位置,R_mn为从坐标系Fn旋转到坐标系Fm的旋转矩阵。则载体坐标系Fn中的一点P_Fn=(x,y,z)在Fm中的坐标P_Fm=p_mn+R_mn·P_Fn。设置t时刻的载体状态值state_t为从Ft到F0的坐标转换关系,即state_t=Trans_0t,则p_0t是t时刻的汽车四轮中心在参考系F0中的坐标,R_0t表示从Ft到F0的旋转。p_00=[0,0,0],R_00=I。在t=0,1,2三个时刻,使用激光扫描仪扫描得到载体坐标系F0、F1、F2下的激光点云pcd0,pcd1,pcd2,使用ICP算法得到pcd1到pcd0的坐标转换Trans_01和pcd2到pcd1的坐标转换Trans12。则可得state_1=Trans01,state_2=Trans02=[p_02,R_02]=[p_01+R_01·p_12,R_01·R_12]。以此类推state_k=[p_0k,R_0k]=[p_01+R_01·p_12+…+R_0,k‑1·p_k‑1,k,R_01·R_12...·R_k‑1,k]。由此完成state_0到state_k的初始化。 [0111] 需要说明的是,对于相机和激光雷达数据,每得到一个数据就在该数据对应的时间建立一帧状态量,对于Imu等输入频率较高的数据,可以隔一段时间如0.01s再添加一帧状态量。 [0112] 步骤S403,从载体设备在各个时刻的初始载体状态量中,筛选出满足预设条件的初始载体状态量,作为待更新地图的新的关键帧。 [0113] 具体地,服务器基于图优化理论,从载体设备的初始载体状态量中,选取满足预设条件的初始载体状态量,作为待更新地图的新的关键帧;此外,服务器还可以将关键帧作为图中的节点,用传感器数据构建关键帧之间的约束,作为节点之间的边;按照一定的顺序将关键帧加入历史位姿图,选取需要优化的节点进行载体状态量的优化更新,并按照一定的规则将不再需要优化的关键帧移出历史位姿图,从而得到待更新地图的新的位姿图。 [0114] 举例说明,为了降低优化时的计算量,在优化过程中,按照一定的规则,从所有时刻的初始载体状态量中,选取一部分初始载体状态量作为关键帧,输入位姿图进行优化。具体的选取方法,可以使用固定的时间间隔,比如从一系列时间间隔为0.01s的初始载体状态量中,每隔0.1s选取一个关键帧;也可以设置位姿变化阈值等方法得到,比如与上一个关键帧的欧氏距离大于0.1m时就建立新关键帧;在总的初始载体状态量的数量较小时,也可以直接使用全部时刻的初始载体状态量作为关键帧。 [0115] 需要说明的是,除了选取关键帧,还需要将点云数据和相机数据从非关键帧中移到关键帧中;具体方法是找到与点云帧Frame_pcd时间差异最小的关键帧Frame_key,根据他们的初始状态计从Frame_pcd转到Frame_key的空间变换关系,Trans_key_pcd=Trans_0_key‑1·Trans_0_pcd;然后将点云从点云帧的载体坐标系转换到关键帧的载体坐标系,同理可以得到关键帧中的相机外参。 [0116] 需要说明的是,历史位姿图中的关键帧的选择方法同上述过程一致;此外,若位姿图初始情况下是空的,在得到关键帧之后,可以将关键帧作为节点添加到位姿图中,作为历史位姿图,并存储起来;下一次进行建图操作时可以载入已有的历史位姿图,在它的基础上进行更新。 [0117] 上述实施例,通过获取待更新地图的新的关键帧,有利于后续将新的关键帧作为新的节点添加到历史位姿图中,得到新的位姿图。 [0118] 在一个实施例中,上述步骤S204,在对待更新地图中待更新节点对应的地图区域进行更新之后,还包括:获取更新后的地图;将更新后的地图转化为预设类型的自动驾驶地图;将自动驾驶地图发送至自动驾驶车辆终端,触发自动驾驶车辆终端控制对应的自动驾驶车辆驾驶。 [0119] 其中,自动驾驶地图是指可以用于自动驾驶的高精度地图,包括多种类型。 [0120] 具体地,服务器获取更新后的地图,根据预设的地图转化指令,将更新后的地图转化为预设类型的自动驾驶地图,比如添加上交通标志、道路标识等;将自动驾驶地图发送至对应的自动驾驶车辆终端;自动驾驶车辆终端通过终端界面显示自动驾驶地图,并控制对应的自动驾驶车辆安全驾驶,比如红灯停、绿灯行等。 [0121] 上述实施例,通过将更新后的地图转化为高精度的自动驾驶地图,并发送至自动驾驶车辆终端,有利于提高自动驾驶车辆的自动驾驶安全性。 [0122] 在一个实施例中,如图5所示,提供了另一种地图更新方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤: [0123] 步骤S501,获取载体设备上安装的传感器在待更新地图的目标路线上采集的传感器数据。 [0124] 步骤S502,根据传感器数据,确定载体设备在各个时刻的初始载体状态量。 [0125] 步骤S503,从载体设备在各个时刻的初始载体状态量中,筛选出满足预设条件的初始载体状态量,作为待更新地图的新的关键帧。 [0126] 步骤S504,获取待更新地图的历史位姿图,并将新的关键帧作为新的节点。 [0127] 步骤S505,在新的节点和历史位姿图中的历史节点之间进行回环检测,得到与新的节点时间或位置相邻的历史节点。 [0128] 步骤S506,根据与新的节点时间或位置相邻的历史节点,得到新的节点和历史位姿图中的历史节点之间的约束关系。 [0129] 步骤S507,根据约束关系,将新的节点添加到历史位姿图中的对应位置,得到新的位姿图。 [0130] 步骤S508,当新的位姿图中的新的节点的数量达到第一预设数量时,构建第一节点集合、第二节点集合和第三节点集合。 [0131] 其中,第一节点集合为新的节点所构成的集合,第二节点集合为与新的节点存在约束关系,且不属于第一节点集合的历史节点所构成的集合,第三节点集合为与第二节点集合中的历史节点存在约束关系,且不属于第一节点集合和第二节点集合的历史节点所构成的集合。 [0132] 步骤S509,通过预先训练的优化模型,对第一节点集合、第二节点集合和第三节点集合中的载体状态量进行优化,直到第一节点集合中的节点的数量达到第二预设数量。 [0133] 步骤S510,若第一节点集合中的节点的数量达到第二预设数量,则将第一节点集合中的节点作为待更新节点。 [0134] 步骤S511,获取待更新节点对应的地图数据;确定地图数据覆盖的地图区域;对待更新地图中的地图区域进行更新。 [0135] 上述地图更新方法,实现了根据待更新地图的新的关键帧和待更新地图的历史位姿图,对待更新地图进行更新的目的,避免了直接将新的地图数据匹配到旧地图数据上,导致更新后的地图数据的准确度较低的缺陷,从而提高了地图更新的准确度。 [0136] 在一个实施例中,如图6所示,本申请还提供一种应用场景,该应用场景应用上述的地图更新方法。具体地,该地图更新方法在该应用场景的应用步骤如下: [0137] 步骤S601,获取载体设备上安装的传感器在待更新地图的目标路线上采集的传感器数据。 [0138] 步骤S602,根据传感器数据,对每个时刻的载体状态量进行初始估计。 [0139] 举例说明,服务器基于传感器数据,估算相邻时刻下的载体状态量的变化关系,对不同时刻的载体状态进行初始估计。 [0140] 步骤S603,选取符合预设条件的载体状态量,作为关键帧;以关键帧为节点,构建位姿图,对需要更新的位姿进行优化。 [0141] 举例说明,服务器基于图优化理论,从载体的初始状态集合中选取关键帧,作为位姿图中的节点,用传感器数据构建关键帧之间的约束,作为节点之间的边;按照一定的顺序将关键帧加入位姿图,选取需要优化的节点进行状态量的优化更新,并按照一定的规则将不再需要优化的关键帧移出位姿图。 [0142] 步骤S604,使用优化后的关键帧位姿,构建或更新地图数据。 [0143] 需要说明的,关于步骤S601至步骤S604的具体描述可以参照上述相关的实施例,在此不再具体赘述。 [0144] 步骤S605,使用一定格式保存建图数据到储存器,或从储存器读数据用于后端优化更新。 [0145] 具体地,服务器负责建图数据的保存和读取;建图数据是指地图构建和位姿图优化所需的各种数据,包括位姿图数据和相关的传感器数据,位姿图数据包括节点的状态量,边所连接的节点信息,和边所含的约束信息,传感器数据可以含有相机所拍摄的相片、激光扫描仪扫描到的点云等。 [0146] 举例来说,对于位姿图的每个节点NodeM,使用该节点采集车辆车牌号及精确到微秒的采集时间设置节点的唯一id,以节点id为文件名。比如由车牌号“粤A12345”的车采集于2020年1月1日13点15分17.1866秒的关键帧,可以设置其id为YUE_A12345_20200101131517186600。将该节点的状态量和时间用文本形式保存在文件中。对于与NodeM相关的每个约束EdgeMN(即位姿图中的边),也以文本形式保存在该文件中。需要记录通过EdgeMN与NodeM相连的NodeN的id,该约束的类型,以及该约束含有的数据。比如NodeM和NodeN各含有一组点云数据,使用ICP算法得到两个点云之间的坐标系转换关系,得到NodeM和NodeN的载体坐标系转换关系TransMN和协方差矩阵CovIcpMN,则记录该约束的类型为ICP坐标转换,记录坐标系转换TransMN的参数p_MN和R_MN,并记录该转换关系的协方差矩阵CovIcpMN。另外需要保存NodeM和NodeN所含有的激光点云数据,各以节点id作为文件名,保存为pcd格式的点云数据。读取传感器数据时,通过数据id号加载对应名称的文件即可。 读取位姿图节点时,可以通过输入节点id获取一个节点,也可以通过指定节点坐标范围读取若干节点。按坐标范围读取节点时,读取数据库中的每个节点,计算其坐标范围是否在指定范围内来决定是否返回该节点。当地图范围较大时,可以将建图数据按照一定规则分块,以数据块id作为文件夹名,进行分块保存,加快按坐标读取节点的处理速度。分块基于数据的坐标进行,得到的各块的id与坐标相关,则可以通过输入的坐标范围确定块的id范围,只在这些块中搜索需要读取的符合坐标范围的节点。 [0147] 举例来说,按照精度2度,纬度1度为单位进行分块,按照整数经纬度划分格网,并以经纬度最小值为该格网命名。则对于经度、纬度分别为longitude,latitude的关键帧,精度取值范围为0到360度,纬度取值范围为‑90到90度时,其格网号由精度格网号和纬度格网号组成,计算方法为:精度网格号grid_id_longitude=floor(longitude/2.0),纬度网格号grid_id_latitude=floor(latitude+90)。floor是向下取整函数,经度格网编号的取值范围为0到179,纬度格网号的取值范围为0到180。对于经度为36.3度,纬度为66.1度的关键帧,其格网号为(经度格网号18,纬度格网号66)。它所属格网的8邻域相邻格网有八个,经纬格网编号分别为(17,65),(17,66),(17,67),(18,65),(18,67),(19,65),(19,66),(19,67)。当搜索精度范围为35.7‑36.5,纬度范围为65.8‑66.8的关键帧时,首先计算经纬度范围的均值,为精度36.1,纬度66.3,此坐标对应的网格A的编号为精度18,纬度66,将网格A加入待搜索的网格集合G1,将A的八个邻居网格加入待检查的网格集合G2。当G2不为空集合时,从G2中取出并剔除网格B,检查B是否与目标经纬度范围有重叠,若有,则将网格B的八个邻居网格也加入G2集合,并将网格B加入集合G1。当G2集合清空以后,G1所含有的网格就是可能含有目标关键帧的网格。遍历G1含有的所有网格中的关键帧,将坐标范围满足要求的进行输出。 [0148] 需要说明的是,在步骤S604执行完位姿图更新后,需要将被更新后的节点及节点之间的约束进行更新,若节点所属的分块没有改变,只需改变节点文件保存的内容即可;若该节点所属的块id发生变化,则需要将该节点从旧的分块文件夹中先删除,再在新分块的文件夹中添加该节点对应的文件。 [0149] 步骤S606,通过回环检测,在时间上不连续的相关关键帧之间建立约束关系。 [0150] 具体地,服务器为每个初始化后的关键帧搜索可能的回环,回环的搜索可以基于词袋法,特征点匹配,和地理位置的接近。找到回环后,使用点云或相机数据,使用ICP,NDT,特征点等算法对两帧的相对位置关系进行估算,并使用相对位置关系作为约束,在两个节点之间增加一条边。 [0151] 此外,若地图范围较大时,使用该节点的初始地理位置,计算该节点所在的建图数据块id,并且获得相邻的数据块id,在距离接近的地图构建数据块中进行回环搜索。 [0152] 上述地图更新方法,可以达到以下技术效果:(1)充分地利用采集到的数据,实现了高精度、高效率的地图构建和增量式更新,减少了自动驾驶地图制作过程中的设备、人工和时间成本;(2)重复利用历史数据,提高地图构建精度和一致性,减少地图生产人员再地图构建步骤中的人工检查和调整,降低对于地图车和内业生产电脑的配置要求,加快地图生产速度;(3)将位姿图和传感器信息保存下来,用于后端优化、回环检测和地图更新;(4)将新增的位姿和旧的地图中的位姿都进行优化,充分利用历史数据;(5)优化模型使用不固定规模的局部图优化,降低对于内业生产电脑的配置要求。 [0153] 应该理解的是,虽然图2‑6的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2‑6中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。 [0154] 在一个实施例中,如图7所示,提供了一种地图更新装置,包括:获取模块710、添加模块720、识别模块730和更新模块740,其中: [0155] 获取模块710,用于获取待更新地图的新的关键帧和待更新地图的历史位姿图。 [0156] 添加模块720,用于将所述新的关键帧作为新的节点添加到所述历史位姿图中,得到新的位姿图。 [0157] 识别模块730,用于识别所述新的位姿图中的待更新节点。 [0158] 更新模块740,用于对所述待更新地图中所述待更新节点对应的地图区域进行更新。 [0159] 在一个实施例中,上述添加模块720,还用于将新的关键帧作为新的节点;在新的节点和历史位姿图中的历史节点之间进行回环检测,得到新的节点和历史位姿图中的历史节点之间的约束关系;根据约束关系,将新的节点添加到历史位姿图中的对应位置,得到新的位姿图。 [0160] 在一个实施例中,上述添加模块720,还用于在新的节点和历史位姿图中的历史节点之间进行回环检测,得到与新的节点时间或位置相邻的历史节点;根据与新的节点时间或位置相邻的历史节点,得到新的节点和历史位姿图中的历史节点之间的约束关系。 [0161] 在一个实施例中,上述识别模块730,还用于当新的位姿图中的新的节点的数量达到第一预设数量时,构建第一节点集合、第二节点集合和第三节点集合;第一节点集合为新的节点所构成的集合,第二节点集合为与新的节点存在约束关系,且不属于第一节点集合的历史节点所构成的集合,第三节点集合为与第二节点集合中的历史节点存在约束关系,且不属于第一节点集合和第二节点集合的历史节点所构成的集合;通过预先训练的优化模型,对第一节点集合、第二节点集合和第三节点集合中的载体状态量进行优化,直到第一节点集合中的节点的数量达到第二预设数量;若第一节点集合中的节点的数量达到第二预设数量,则将第一节点集合中的节点作为待更新节点。 [0162] 在一个实施例中,上述更新模块740,还用于获取待更新节点对应的地图数据;确定地图数据覆盖的地图区域;对待更新地图中的地图区域进行更新。 [0163] 在一个实施例中,上述获取模块710,还用于获取载体设备上安装的传感器在待更新地图的目标路线上采集的传感器数据;根据传感器数据,确定载体设备在各个时刻的初始载体状态量;从载体设备在各个时刻的初始载体状态量中,筛选出满足预设条件的初始载体状态量,作为待更新地图的新的关键帧。 [0164] 在一个实施例中,本申请的地图更新装置还包括发送模块,用于获取更新后的地图;将更新后的地图转化为预设类型的自动驾驶地图;将自动驾驶地图发送至自动驾驶车辆终端,触发自动驾驶车辆终端控制对应的自动驾驶车辆驾驶。 [0165] 关于地图更新装置的具体限定可以参见上文中对于地图更新方法的限定,在此不再赘述。上述地图更新装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。 [0166] 在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储历史位姿图、新的位姿图等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种地图更新方法。 [0167] 本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。 [0168] 在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。 [0169] 在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。 [0170] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read‑Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。 |