Apollo星火计划学习笔记——第四讲(Apollo自动驾驶高精地图)
静态图层。保存道路的3维建模信息,通常是道路的测绘数据。定位图层。通过原始的点云地图,提取出一些特征如电线杆、建筑物、交通标志等。用来做点云匹配定位。语义图层。提供道路的结构化信息,这部分信息定义了车道线、交通标志、交通规则信息等动态图层。实时动态的更新一些信息如:当前路况、实时交通规则、前方车祸等。
文章目录
前言
Apollo星火计划课程链接如下
星火计划2.0基础课:https://apollo.baidu.com/community/online-course/2
星火计划2.0专项课:https://apollo.baidu.com/community/online-course/12
1. 高精度地图的作用
高精度地图(英文全称为∶High Definition Map),从字面意义上理解为精度更高的地图(相对于传统地图而言)。
绝对精度高
,自动驾驶要求的精度为10cm以内。数据元素更加丰富
,包括车道线、红绿灯、交通标志等。- 相对于以往的导航地图,其
服务的对象并非仅仅是人类驾驶员,而是人类驾驶员和自动驾驶汽车
。
1.1 高精度地图与传统地图的区别
传统地图 | 高精度地图 | |
---|---|---|
精度 | 10米左右精度 | 1米以内 |
车道 | 车道级别 | 车道级别(信息更加丰富) |
元素 | 限速、交通规则等 | 交通基础设施 |
功能 | 导航、搜索 | 定位、路径规划 |
实时性 | 准静态 | 动态 |
精度更高,元素更丰富,更新速度更快!
1.2 为什么要使用高精度地图?
定位
。需要高精度地图表示当前的位置信息,同时还依赖高精度地图提供的定位图层进行定位。ROI(感兴趣区域)
。感知模块中依赖高精度地图提供ROI。例如,红绿灯的识别(位置&&选择哪个红绿灯)规划
。依赖高精度提供的道路信息,例如车道线,曲率,坡度等信息,还依赖高精度地图提供交通规则信息,如是否能够变道,左转还是右转,当前车道关联的红绿灯等。
1.3 高精度地图面临的挑战和问题
1.更新频率要求高。需要能够做到星期或者天级别的更新。
2.采集难度大。需要专业的地图采集车和地图采集资质。
3.存储空间要求大。高精度地图目前的大小可能要上百G的存储。
4.成本、格式和规范尚未统一。
由于上述几点要求,高精度地图的制作成本高,并且格式尚未有统一的标准,各家的地图可能会出现不兼容的情况,还有一些法律法规的问题等。
2. 高精度地图的介绍
高精度按照功能划分为4个图层:
静态图层
。保存道路的3维建模信息,通常是道路的测绘数据。定位图层
。通过原始的点云地图,提取出一些特征如电线杆、建筑物、交通标志等。用来做点云匹配定位。语义图层
。提供道路的结构化信息,这部分信息定义了车道线、交通标志、交通规则信息等动态图层
。实时动态的更新一些信息如:当前路况、实时交通规则、前方车祸等。
2.1 如何制作高精度地图
高精度地图的制作流程主要包括,实际上还应该包括地图校验。
1.地图采集
2.地图制作 (对城市进行建模)
3.地图标注(对车道线以及其他语义信息进行标注)
4.地图保存(保存为相应的格式)
2.2 地图采集
地图采集车
·基于激光雷达。能够准确获取位置信息,光照变化影响不大。
·基于视觉。能够提供颜色,纹理信息,对光照变化敏感,得不到准确深度信息。
2.3 地图制作
目前主流的方法是通过SLAM算法对道路进行建模,得到一块区域的地图数据,然后进行标注。
视觉SLAM算法 | 激光雷达SLAM算法 |
---|---|
DSO | Cartographer |
ORB-SLAM | LOAM系列算法 |
SVO |
2.4 地图标注
常见的地图标注工具:
- Roadrunner(集成到MATLAB)
- Vector Map Builder(autoware)
- LGSVL Map Annotation
- Autocore MapToolBox
- Assure mapping tools
2.5 地图保存
目前还没有统一的高精度地图格式,主流的地图格式包括:
- Opendrive。德国汽车制造商奥迪、宝马、戴姆勒、保时捷大众成立的组织,目的是标准化车辆开发和验证过程中的数据交换。
- Lanelet2。Lanelet2是一个C++库,用于在自动驾驶环境中处理地图数据。
- VectorMap。矢量地图,目前自动驾驶系统普遍采用采样的方式来表征高精度地图。
3. Apollo高精度地图
3.1 文件位置
在map文件夹下
- 地图通过proto定义
- 每个proto代表一种地图元素
message Map {
optional Header header = 1;//上面所说的地图基本信息
repeated Crosswalk crosswalk = 2; //人行横道
repeated Junction junction = 3;//交叉路口
repeated Lane lane = 4;//车道
repeated StopSign stop_ sign = 5; //停车标志
repeated Signal signal = 6;//信号灯
repeated YieldSign yield = 7;//让车标志
repeated Overlap overlap = 8;//重叠区域
repeated ClearArea clear_ area = 9; //禁止停车区域
repeated SpeedBump speed_ _bump = 10; //减速带
repeated Road road = 11;//道路
repeated ParkingSpace parking_ space = 12; //停车区域
repeated sidewalk sidewalk = 13; //路边的小路, 或者行人走的路,现在的版本已经去掉?但是其他模块有些还有side
}
3.2 格式种类及意义
3.2.1 人行横道
// Crosswalk is a place des ignated
message Crosswalk {
optional Id id = 1 ; //每个人行横道的编号,用以区分
optional Polygon polygon = 2; //人行横道的形状,一般情况是矩形
repeated Id overlap_ _id = 3;
}
3.2.2 交叉路口
// A junction is the junction at-gr
message Junction {
optional Id id = 1;
optional Polygon polygon = 2;
repeated Id overlap _id = 3;
enum Type {
UNKNOwN = 0
IN_ R0AD = 1
CROSS_ ROAD = 2;
FORK_ R0AD = 3;
MAIN_ SIDE = 4;
DEAD_ END = 5;
};
optional Type type = 4;
}
3.2.3 车道
message Lane{
optional Id id = 1;
// Central Lane as reference trajectory, not neces
//central.
optional Curve central curve = 2;
// Lane boundary curve.
optional LaneBoundary left boundary = 3;
optional LaneBoundary right_ boundary = 4;
// in meters.
optional double length = 5;
// Speed limit of the lane, in meters per second,
optional double speed_ Limit = 6;
repeated Id overlap. _id = 7;
// All lanes can be driving into (or from).
repeated Id predecessor_id = 8;
repeated Id successor_ 1d = 9;
// Neighbor lanes on the same direction.
repeated Id left_neighbor_forward_lane id = 10;
repeated Id right_neighbor_forward_lane_ 1d = 11;
}
3.2.4 停车标志
message StopSign {
optional Id id = 1;
repeated Curve stop_ line = 2;
repeated Id overlap_ id = 3;
enum StopType{
UNKNOWN = 0;
ONE_ WAY = 1;
TWO_ WAY = 2
THREE_ WAY = 3;
Four_ WAY = 4
ALL_ WAY = 5;
};
optional StopType type = 4;
}
3.2.5 红绿灯
message Signal {
enum Type {
UNKNOWN = 1;
MIX_2_HORIZONTAL=2;
MIX_2_VERTICAL=3;2
MIX_3_HORIZONTAL=4;
MIX_3_VERTICAL=5;
SINGLE=6;
};
optional Id id = 1;
optional Polygon boundary = 2;
repeated Subsignal subsignal = 3;
// TODO: add orientation. now no data support,
repeated Id overlap_id = 4;
optional Type type =5;
//stop line
repeated Curve stop_line = 6;
repeated SignInfo sign_info = 7;
}
3.2.6 让行标志
// A yield indicates that each driver must prepar
// driver on another approach proceed.
// A driver who stops or slows down to let anothe
// the right of way to that vehicle.
message YieldSign{
optional Id id = 1;
repeated Curve stop_Line = 2;
repeated Id overlap_id = 3;
}
3.2.7 禁止停车
message ClearArea {
optional Id id = 1;
repeated Id overlap _id = 2
optional Polygon polygon = 3;
}
3.2.8 减速带
message SpeedBump {
optional Id id = 1;
repeated Id overlap _id = 2;
repeated Curve position = 3;
}
3.2.9 道路
//The road is a collection of traffic e Lements ,
// etc
// It provides general information about the road
message Road {
optional Id id = 1;
repeated RoadSection section = 2;
// if lane road not in the junct ion, j unct ion
optional Id junction _id = 3;
enum Type {
UNKNOWN = 0;
HIGHWAY = 1
CITY_ ROAD = 2;
PARK = 3;
}
optional Type type = 4;
}
3.2.10 停车场
message ParkingSpace {
optional Id id = 1;
optional Polygon polygon = 2
repeated Id overlap_ _id = 3;
optional double heading = 4;
//ParkingLot is a place for parking cars.
message ParkingLot {
optional Id id = 1;
optional Polygon polygon = 2;
repeated Id overlap _id = 3;
};
}
3.3 Apollo高精度地图API
4. 实践案例
更多推荐
所有评论(0)