星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)

文章目录

  • 1. 高精度地图的作用
    • 1.1 高精度地图与传统地图的区别
    • 1.2 为什么要使用高精度地图?
    • 1.3 高精度地图面临的挑战和问题
  • 2. 高精度地图的介绍
    • 2.1 如何制作高精度地图
    • 2.2 地图采集
    • 2.3 地图制作
    • 2.4 地图标注
    • 2.5 地图保存
  • 3. Apollo高精度地图
    • 3.1 文件位置
    • 3.2 格式种类及意义
      • 3.2.1 人行横道
      • 3.2.2 交叉路口
      • 3.2.3 车道
      • 3.2.4 停车标志
      • 3.2.5 红绿灯
      • 3.2.6 让行标志
      • 3.2.7 禁止停车
      • 3.2.8 减速带
      • 3.2.9 道路
      • 3.2.10 停车场
    • 3.3 Apollo高精度地图API
  • 4. 实践案例

1. 高精度地图的作用

    高精度地图(英文全称为∶High Definition Map),从字面意义上理解为精度更高的地图(相对于传统地图而言)。

  • 绝对精度高,自动驾驶要求的精度为10cm以内。
  • 数据元素更加丰富,包括车道线、红绿灯、交通标志等。
  • 相对于以往的导航地图,其服务的对象并非仅仅是人类驾驶员,而是人类驾驶员和自动驾驶汽车

1.1 高精度地图与传统地图的区别

传统地图 高精度地图
精度 10米左右精度 1米以内
车道 车道级别 车道级别(信息更加丰富)
元素 限速、交通规则等 交通基础设施
功能 导航、搜索 定位、路径规划
实时性 准静态 动态

精度更高,元素更丰富,更新速度更快!

1.2 为什么要使用高精度地图?

  • 定位。需要高精度地图表示当前的位置信息,同时还依赖高精度地图提供的定位图层进行定位。
  • ROI(感兴趣区域)。感知模块中依赖高精度地图提供ROI。例如,红绿灯的识别(位置&&选择哪个红绿灯)
  • 规划。依赖高精度提供的道路信息,例如车道线,曲率,坡度等信息,还依赖高精度地图提供交通规则信息,如是否能够变道,左转还是右转,当前车道关联的红绿灯等。

1.3 高精度地图面临的挑战和问题

1.更新频率要求高。需要能够做到星期或者天级别的更新。
2.采集难度大。需要专业的地图采集车和地图采集资质。
3.存储空间要求大。高精度地图目前的大小可能要上百G的存储。
4.成本、格式和规范尚未统一

    由于上述几点要求,高精度地图的制作成本高,并且格式尚未有统一的标准,各家的地图可能会出现不兼容的情况,还有一些法律法规的问题等。

2. 高精度地图的介绍

    高精度按照功能划分为4个图层:

  • 静态图层。保存道路的3维建模信息,通常是道路的测绘数据。
  • 定位图层。通过原始的点云地图,提取出一些特征如电线杆、建筑物、交通标志等。用来做点云匹配定位。
  • 语义图层。提供道路的结构化信息,这部分信息定义了车道线、交通标志、交通规则信息等
  • 动态图层。实时动态的更新一些信息如:当前路况、实时交通规则、前方车祸等。

星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第1张图片

2.1 如何制作高精度地图

    高精度地图的制作流程主要包括,实际上还应该包括地图校验
1.地图采集
2.地图制作 (对城市进行建模)
3.地图标注(对车道线以及其他语义信息进行标注)
4.地图保存(保存为相应的格式)
星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第2张图片

2.2 地图采集

    地图采集车
·基于激光雷达。能够准确获取位置信息,光照变化影响不大。
·基于视觉。能够提供颜色,纹理信息,对光照变化敏感,得不到准确深度信息。
星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第3张图片

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文件夹下
星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第4张图片

  • 地图通过proto定义
  • 每个proto代表一种地图元素

星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第5张图片

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;
}

星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第6张图片

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;
}

星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第7张图片

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;
}

星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第8张图片

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;
}

星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第9张图片

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;
}

星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第10张图片

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;
}

星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第11张图片

3.2.7 禁止停车

message ClearArea {
	optional Id id = 1;
	repeated Id overlap _id = 2
	optional Polygon polygon = 3;
}

星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第12张图片

3.2.8 减速带

message SpeedBump {
	optional Id id = 1;
	repeated Id overlap _id = 2;
	repeated Curve position = 3;
}

星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第13张图片

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;
}

星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第14张图片

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;
	}}

星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第15张图片

3.3 Apollo高精度地图API

星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第16张图片
星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第17张图片

4. 实践案例

实验地址:https://github.com/daohu527/ndt_mapping
星火计划学习笔记——第四讲上(Apollo自动驾驶高精地图)_第18张图片

你可能感兴趣的:(学习,自动驾驶,人工智能)