Skip to content

Lanelet2地图

Overview

目的:通过网页导入地图(pcd格式)画图,最后导出矢量地图(lanelet2_map.osm)

Lanelet2是一个处理自动驾驶地图数据的C++库,在设计Lanelet2之初,其就被用于高效地处理面向复杂交通场景的高精度地图数据。灵活性与可拓展性作为Lanelet2的核心原则,使其能够处理未来地图的新特性。

lanelet2_example_image

Lanelet2的基本元素

lanelet2地图由一些基本单元组成,基础单元由node/pointlinestringpolygonlaneletarearegulatory element组成。 lanelet2_primitives

node

node由一个唯一的id、经纬度高度与笛卡尔坐标系的坐标组成,并具有扩展能力,通过设置tag中的k来增加新特性,通过设置v来设置新特性的值。

<node id="1" lat="" lon="">
  <tag k="mgrs_code" v="99XXX0000-2"/>
  <tag k="local_x" v="11.5354"/>
  <tag k="local_y" v="-184.0996"/>
  <tag k="ele" v="-0.2962"/>
</node>

上面的例子为一个node,其id为1,local_x为x坐标,local_y为y坐标,ele为高度。用于组成linestring、area基本结构。

area

area由一个唯一的id、一系列有序顶点的node_id,area类型与是否是area的标识,并具有扩展能力,通过设置tag中的k来增加新特性,通过设置v来设置新特性的值。

<way id="88">
  <nd ref="84"/>
  <nd ref="85"/>
  <nd ref="86"/>
  <nd ref="87"/>
  <tag k="type" v="detection_area"/>
  <tag k="area" v="yes"/>
</way>

上例中,area_id88,按顺序引用node的id分别为1712131516areayes

linestring

Linestring由一系列有序的node_id、linestring类型与拓展类型组成,并具有扩展能力,通过设置tag中的k来增加新特性,通过设置v来设置新特性的值。

<way id="3">
  <nd ref="1"/>
  <nd ref="2"/>
  <nd ref="8"/>
  <nd ref="10"/>
  <tag k="type" v="line_thin"/>
  <tag k="subtype" v="solid"/>
</way>

上例中,Linestring的id为”3”,按顺序引用node “1””2””8””10”,linestring的类型为”line_thin”,可选的linestring类型与子类型参考下表。

type subtype description lane change?
line_thin solid a solid lane marking no
line_thin solid_solid a double solid lane marking no
line_thin dashed a dashed lane marking yes
line_thin dashed_solid a marking that is dashed on the left and solid on the right left->right: yes
line_thin solid_dashed the other way around right->left: yes
line_thick same as above for thin
curbstone high a curbstone that is to high for a vehicle to drive over no
curbstone low curb that is low and can be driven for a vehicle no
virtual - a non-physical lane boundary, intended mainly for intersections no
road_border - the end of the road. no

polygon

polygon由一条linestring组成,并具有扩展能力,通过设置tag中的k来增加新特性,通过设置v来设置新特性的值。

<relation id="35">
  <member type="way" role="outer" ref="32"/>
  <tag k="type" v="multipolygon"/>
</relation>

lanelet

lanelet由左右两个linestring组成,引用的regulatory element与lanelet的类型组成,并具有扩展能力,通过设置tag中的k来增加新特性,通过设置v来设置新特性的值。

<relation id="48">
  <member type="way" role="left" ref="47"/>
  <member type="way" role="right" ref="44"/>
  <member type="way" role="centerline" ref="80"/>
  <member type="relation" role="regulatory_element" ref="89"/>
  <member type="relation" role="regulatory_element" ref="100"/>
  <tag k="type" v="lanelet"/>
  <tag k="subtype" v="road"/>
  <tag k="speed_limit" v="10"/>
  <tag k="location" v="urban"/>
  <tag k="one_way" v="yes"/>
</relation>

上例中,Lanelet的ID为48,lane的左、右边界分别引用id4744Linestringcenterline引用id为80linestringregulatory_element引用id89100regulatory_elementypelaneletsubtyperoadspeed_limit10km/h,locationurbanone_wayyes。lanelet可选的tag参考下表。

subtype location description Inferred Participants Speed limit
road urban A part of a road in urban region All vehicles and bikes City speed limit
road nonurban A part of a road in nonurban region All vehicles and bikes Nonurban speed limit
highway urban A part of a highway in urban region All vehicles Urban highway limit
highway nonurban A part of a highway in nonurban region All vehicles Nonurban highway limit
play_street - A part of a play street Vehicles, bikes, pedestrians play street speed limit
emergency_lane - Lane for emergency vehicles Emergency vehicles Average emergency vehicle speed
bus_lane urban Lane for buses Bus, Emergency, Taxi City speed limit
bus_lane nonurban Lane for buses Bus, Emergency, Taxi Nonurban speed limit
bicycle_lane - A lane that is usable only for bikes Bikes Average bike speed
exit urban Exit area of a house or garage that crosses the crosswalk Vehicles, bikes, pedestrians Urban speed limit
walkway - A part of a way for pedestrians Pedestrians Average pedestrian walking speed
shared_walkway - A way shared by bikes and pedestrians Bikes, Pedestrians Average bike/pedestrian speed
crosswalk - A part of a crosswalk Pedestrians Average pedestrian walking speed
stairs - Well ... stairs Pedestrians Average pedestrian walking speed

regulatory element

regulatory element由一系列的linestring与regulatory elemenet的类型组成,并具有扩展能力,通过设置tag中的k来增加新特性,通过设置v来设置新特性的值。

<relation id="100">
  <member type="way" role="refers" ref="95"/>
  <member type="way" role="ref_line" ref="92"/>
  <member type="way" role="light_bulbs" ref="99"/>
  <tag k="type" v="regulatory_element"/>
  <tag k="subtype" v="traffic_light"/>
</relation>

上例中,regulatory_elementid100;引用id95linestring作为交通灯的参考线;引用id92linestring作为停止线;引用id95linestring作为灯泡;typeregulatory_elementsubtypetraffic_lightregulatory_elementsubtype见下表.

subtype description
traffic_sign 交通信号标志
traffic_light 交通信号灯
speed_limit 限速标志

lanelet2地图制作

画图工具

使用TierIv Inc.开发的Vector Map Builder工具进行制作。 vector_map_builder

导入点云地图

制作地图之前,首先需要导入点云地图,作为矢量地图几何特征的参考。点云地图制作方法

  1. 点击file-Import PCD import_pcd_1

  2. 点击browser选取PCD文件 import_pcd_2

  3. 选去好PCD文件后点击import import_pcd_3

  4. 可以看到地图可视化框中导入了点云地图 import_pcd_4

创建lanelet2地图

  1. 点击create菜单,create_lanelet2Map create_lanelet2_map create_lanelet2_map_2

编辑lanelet

  1. 找到道路,可以看到两侧路沿间的可行驶区域 find_driable_area
  2. 点击上方菜单内lanelet按钮进入lanelet编辑模式 select_lanelet_tool
  3. 单击地图上的可行驶区域选择lanelet的初始点 draw_lanelet_1
  4. 移动鼠标选择下一个lanelet节点,在弯道的部分可以多选择一些节点以确保弯道的平滑 draw_lanelet_2
  5. 取消选择lanelet按钮退出lanelet编辑模式 draw_lanelet_3
  6. 修改lanelet宽度
  7. 可以选择右侧Action内的Change Lanelet Width进行修改 change_lanelet2_width_1 change_lanelet2_width_2
  8. 可以点击node进行三维的移动改变lanelet的宽度 change_lanelet2_width_3 change_lanelet2_width_4

编辑parking_lot(停车场)

parking_lot在自动驾驶车辆进入泊车模式时会将parking_lot转换成为 1. 找到停车场区域,选择linestring描绘停车场区域 draw_parking_lot_1 2. 取消linestring绘制工具勾选,点击右侧Change to Polygon按钮,将linestring转换成为polygon draw_parking_lot_2 3. 在右侧属性编辑栏将type属性设置为parking_lot draw_parking_lot_3

编辑trafficlight(交通信号灯)

  1. 选择一条lanelet,选择上方工具栏的trafficlight工具 draw_trafficlight_1
  2. 点击这条lanelet,就会生成一条typestop_linelinestring,一条typetraffic_lightlinestring,一条typelight_bulbslinestring;可以移动这些这些组件的位置,但是traffic_light的方向不能够改变,因为在交通信号灯检测过程中,traffic_light方向是作为过滤的考虑因素。 draw_trafficlight_3
  3. traffic_lightsub_type设置为red_yellow_green,其中有一个keyheight,代表为以这条traffic_lightlinestring为长,height为宽的矩形作为交通信号灯的粗ROI,所以可以适当调整height的值。 draw_trafficlight_4
  4. 增加light_bulbs的一个名为traffic_light_idoptional_tag,其值设置为traffic_light这条linestring的id。 draw_trafficlight_6
  5. 调整light_bulbs的颜色,点击某一个灯泡,就能够在右侧属性编辑栏设置colorreadgreenyellowdraw_trafficlight_5

lanelet2地图示例

lanelet2地图示例下载

参考资料