基于MATLAB&SIMULINK开发自动驾驶系统第六讲之导航与地图
本例展示了如何在OpenStreetMap®基图上显示行驶路线和车辆位置。
将OpenStreetMap基图添加到geoplayer对象可用的基图列表中。添加基图后,在以后的会话中不需要再添加。
name = 'openstreetmap';
url = 'https://a.tile.openstreetmap.org/${z}/${x}/${y}.png';
copyright = char(uint8(169));
attribution =copyright + "OpenStreetMap contributors";
addCustomBasemap(name,url,'Attribution',attribution)
加载经纬度坐标序列:
data = load('geoRoute.mat');
创建一个地图显示。将其集中在行驶路线的第一个位置上,并将缩放级别设置为12:
zoomLevel = 12;
player =geoplayer(data.latitude(1),data.longitude(1),zoomLevel);
显示全部路线。
plotRoute(player,data.latitude,data.longitude);
默认情况下,地理播放使用Esri®提供的世界街道地图基图('街道')。更新地图显示以使用新增的OpenStreetMap基图。
player.Basemap = 'openstreetmap';
再次显示路线。
plotRoute(player,data.latitude,data.longitude);
按顺序显示车辆的位置。
for i =1:length(data.latitude)
plotPosition(player,data.latitude(i),data.longitude(i))
end
6.2 阅读和可视化这里的高清实时地图数据
HERE高清实时地图(HERE HDLM)由HERE技术公司开发,是一个基于云计算的网络服务,使能够访问高度精确、持续更新的地图数据。这些数据由瓷砖地图层组成,包含道路和车道的拓扑结构和几何形状、道路级属性和车道级属性,以及道路沿线的障碍物、标志和杆子等信息。这些数据适用于各种高级驾驶辅助系统(ADAS)的应用,包括本地化、场景生成、导航和路径规划。
使用自动驾驶工具箱的功能和对象,可以配置和创建HEREHDLM阅读器,从HERE HDLM网络服务中读取地图数据,然后将某些图层的数据可视化。
6.2.1 输入凭证
在使用HEREHDLM网络服务之前,必须输入与HERE Technologies签订的协议中获得的凭证。要设置的凭证,请使用hereHDLMCredentials功能。
hereHDLMCredentialssetup
输入有效的访问密钥 ID 和访问密钥秘密,然后单击 "确定"。该凭证将保存在的机器上的 MATLAB 会话的其余部分。要为计算机上的未来MATLAB 会话保存的凭证,请在对话框中选择在MATLAB 会话之间保存我的凭证。这些凭证将一直保存,直到删除它们。
6.2.2 配置阅读器搜索特定目录
在HERE HDLM网络服务中,地图数据存储在一组称为目录的数据库中。每个目录大致对应一个不同的地理区域,如北美或西欧。通过创建 hereHDLMConfiguration 对象,可以配置 HERE HDLM 阅读器,使其仅从特定目录中搜索地图数据。还可以选择性地指定要搜索的目录的版本。这些配置可以加快读卡器的性能,因为读卡器不会为地图数据搜索不必要的目录。
例如,为大致对应于北美地区的目录创建一个配置。
config= hereHDLMConfiguration('hrn:here:data::olp-here-had:here-hdlm-protobuf-na-2');
使用此配置创建的读取器仅从指定目录中搜索地图数据。
配置HERE HDLM阅读器是可选的。如果没有指定配置,读取器默认为在所有目录中搜索地图层。读取器会从找到这些磁贴的目录的最新版本中返回地图数据。
6.2.3 为特定地图瓦片创建读取器
hereHDLMReader对象从选定的地图磁贴中读取HERE HDLM数据。默认情况下,这些地图层被设置为14的缩放级别,相当于大约5-10平方公里的矩形区域。
创建 hereHDLMReader 对象时,可以选择要读取数据的地图磁贴。可以直接指定地图层ID。或者, 也可以指定一个行驶路线的坐标,并从该路线的地图层中读取数据。
加载北美地区驾车路线的经纬度坐标。作为参考,在地理轴上显示路线。
route = load('geoSequenceNatickMA.mat');
lat = route.latitude;
lon = route.longitude;
geoplot(lat,lon,'bo-')geobasemap('streets') title('Driving Route')
使用指定的驾驶路径和配置创建一个 hereHDLMReader 对象。
reader= hereHDLMReader(lat,lon,'Configuration',config);
该阅读器可以让 读取该行驶路线所在的地砖的地图数据。地图数据存储在一组包含地图各方面详细信息的图层中。读取器支持读取道路中心线模型、高清车道模型和高清定位模型的地图图层数据。
有关这些模型中的图层的详细信息,请参见第七讲 "HERE高清实时地图图层"。
6.2.4 读取地图层数据
读取函数读取所选地图层的数据。地图数据以一系列图层对象的形式返回。读取包含道路拓扑几何体的图层的数据。
topology =read(reader,'TopologyGeometry')
topology=
2×1 TopologyGeometry arraywith properties:
Data:
HereTileId IntersectingLinkRefs LinksStartingInTileNodesInTile
TileCenterHere2dCoordinate
Metadata:
Catalog
CatalogVersion
每个地图层对象都对应于使用输入的 hereHDLMReader 对象选择的地图层。这些地图瓦片的ID存储在阅读器的TileIds属性中。检查第一个地图瓦片的地图层对象的属性。的目录版本和地图数据可能与这里显示的不同。
topology(1)
ans =
TopologyGeometry with properties:
Data:
HereTileId: 321884279
IntersectingLinkRefs: [42×1 struct]
LinksStartingInTile: [905×1 struct]
NodesInTile: [635×1 struct]
TileCenterHere2dCoordinate: [42.3083-71.3782]
Metadata:
Catalog:'hrn:here:data::olp-here-had:here-hdlm-protobuf-na-2'
CatalogVersion: 3321
TopologyGeometry层对象的属性对应于该层的有效HERE HDLM字段。在这些图层对象中,图层字段的名称被修改为符合MATLAB对象属性的命名惯例。关于图层对象的更多细节,请参见读取函数参考页的layerData输出参数说明。
6.2.5 可视化地图图层数据
要可视化地图图层的数据,请使用绘图功能。绘制返回的地图图层的拓扑几何图形。该图显示地图层内的边界、节点(交叉口和死角)和链接(街道)。如果一个链接延伸到指定地图层的边界之外,图层数据就包括该链接。
plot(topology)
地图图层图是在地理轴上返回的。要自定义地图显示,可以使用地理轴的属性。更多详情,请参阅GeographicAxes属性。将行驶路线覆盖在图上。
hold on
geoplot(lat,lon,'bo-','DisplayName','Route')
hold off