Lanelets_ 高效的自动驾驶地图表达方式

2024-04-07 11:20

本文主要是介绍Lanelets_ 高效的自动驾驶地图表达方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Lanelets: 高效的自动驾驶地图表达方式

image

附赠自动驾驶学习资料和量产经验:链接

LaneLets是自动驾驶领域高精度地图的一种高效表达方式,它以彼此相互连接的LaneLets来描述自动驾驶可行驶区域,不仅可以表达车道几何,也可以完整表述车道拓扑,同时可以集成交通规则和人的驾驶习惯。

image

如上图所示,每个Lanelet由left bound和right bound组成,left/right bound有一系列点序列组成,因此可以以任意精度逼近任意车道形状。

1. 用于Routing的Lanelets Graph

为了能够基于Lanelets进行路径规划,我们可以构建Lanelets邻接图结构。当Lanelets A的左右边界的终点与Lanelets B的左右边界的起点相同时,我们就称Lanelets A和Lanelets B是相邻接的。

如下图所示,图(右)是对图(左)构建的Graph,同时将每个Lanelets的长度作为Graph Edge的权重。基于该Graph,我们就可以采用Dijkstra算法,实现从任意起点到终点的路径规划。当然读者也可以给Graph Edge赋予道路边界类型、权重因子等属性,从而实现其它类型的Routing规划算法。

image

2. Lanelets中的交通规则

开放的公共道路上存在各种各样的交通控制要素,比如红绿灯、交通标牌等。我们将这些交通规则按照一定的方式组织起来,并关联到对应的Lanelets上。行驶在Lanelets上的车辆必须遵守该Lanelets关联的交通规则。

交通规则通常由两部分内容组成:1、规则的名称和内容;2、遵守这一规则的静态信息或者参数。举个路口红绿灯的例子,它的规则为车辆必须在交通灯为红色的时候,必须停止在路口停止线前等待;它的参数为停止线和关联交通灯的位置。

这里要特别提到是没有红绿灯的十字路口,它的通行规则必须以尽可能少的阻碍其它拥有通行权的交通参与者为准则。

image

交通规则表达

在实际数据中,交通规则通过"type=regulatory element"标识,再通过名称为maneuver的tag区分不同的交通规则。

merge and cross

当maneuver=merge时,该规则的参数是:merge发生的第一个Lanelets。该规则期望车辆在进入merge的第一个Lanelets时,尽可能的与同向车道的车辆的运动速度趋同,并且保持安全距离。

当maneuver=cross时,该规则的参数是:与当前Lanelets发生cross的Lanelets,以及为了避免碰撞发生主车的停止位置。

traffic light

当maneuver=traffic light,该规则的参数是:路口的停止线和关联红绿灯的位置。该规则期望当红绿灯为红色时,车辆停止在停止线之前。

image

3. Lanelets中高效的距离计算和测量

image

image

image

4. 开源的Lanelets地图加载库-libLanelet

libLanelet使用Boost C++代码库实现,它提供了读取、加载和查询XML文件的功能;使用RTree检索查询空间要素的功能;使用诸如Dijkstra进行Routing路线规划的功能;

随着地图范围的不断扩张,Lanelets的数量会快速膨胀,为了提升数据检索的速度,libLanelets使用RTree对Lanelets进行检索,可以做到在O(logn)时间内实现对任意Object的查询。

Github代码路径:https://github.com/phbender/liblanelet

5. Lanelets高精度地图生成

Top-View Map生成

我们利用立体图像技术,将车辆周围的3D点投影到地面上,再利用轨迹将这些3D投影点聚合起来,形成全局的鸟瞰图。然后利用这些鸟瞰图,使用OSM Editor人工标注高精度地图。

image

Lanelets存储格式及编辑工具

Lanelets Map采用OSM格式存储:即文件格式采用XML格式;包含三个基础结构,nodes、ways和relations;坐标系采用WGS-84坐标系。

image

6. Lanelets在实际驾驶中的应用

自动车辆利用Lanelets地图实现状态转换状态机(State Machine)不同状态之间的转换。如下图所示,当自动驾驶车辆行驶到绑定了交通规则的Lanelets时,并且距离交通规则参数的距离小于一定阈值时,事件S被触发,提醒车辆在停止线前停下来。当自动驾驶车辆距离交通规则参数的距离大于一定距离时,事件A被触发,车辆进入路口驾驶模式。当离开路口时,事件F被触发,整个系统被重置到空闲状态。

image

为了完成周围其它车辆的驾驶行为预测,我们首先获取社会车辆周围一定范围内的所有Lanelets,然后通过社会车辆的Pose与Lanelets中心线的距离和角度阈值过滤掉主车无法到达的Lanelets,最后在自动驾驶车辆的预测范围(比如可以预测社会车辆10s的运动范围)内,以社会车辆的运动朝向和运动速度计算所有的可能运动路径,从而调整自动驾驶汽车的运动规划,以避免可能存在的碰撞行为。

参考链接

Lanelets: Efficient Map Representation for Autonomous Driving

这篇关于Lanelets_ 高效的自动驾驶地图表达方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/882464

相关文章

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM