主要内容

从驾驶场景设计师创建以自我为中心的占用地图

这个例子展示了如何从驾驶场景设计师app.本例使用来自视觉检测生成器的障碍信息来更新以自我为中心的占用地图。

这个例子:

  • 使用视觉检测生成器获取障碍物信息和道路几何。

  • 使用二进制占用地图创建以自我为中心的占用地图。

  • 使用车道边界和障碍物信息更新以自我为中心的占用地图。

介绍

自动驾驶系统在ego车上使用多个传感器,如雷达、摄像机和激光雷达。这些传感器用于感知周围环境的信息。将来自这些异构传感器的信息整理成一个共同的时间参考框架是很重要的。这通常是使用以自我为中心的占用地图来完成的。这张地图包含了关于周围环境的信息,如道路几何形状、自由空间和障碍。这个以自我为中心的占用地图被规划算法用于导航。自我车辆可以通过定期更新以自我为中心的占据地图中的信息来响应环境的动态变化。

这个例子展示了如何使用从场景中获得的车道和障碍物信息来创建和更新以自我为中心的占用地图。

本示例还使用了使用Driving scenario Designer (DSD)设计的直路场景。有关详细信息,请参见驾驶场景设计师(自动驾驶工具箱).您还可以通过编程方式创建驾驶场景。欲知更多详情,请参阅以编程方式创建驾驶场景(自动驾驶工具箱)

从驾驶场景中获取车道边界和障碍物信息

本例中使用的场景是一条有四条车道的直路。这个场景有一辆自我车辆和六辆目标车辆,它们遵循各自预定义的路径。使用helper函数创建一个场景,exampleHelperCreateStraightRoadScenario

本示例中使用的场景如下图所示。

[scenario, egoVehicle] = examplehelpercreatedirectroadscenario;

这个例子使用了一个视觉检测发生器,它综合了安装在驾驶场景中的ego车辆前面的摄像机传感器。这个生成器被配置为检测车道边界和障碍物。

有关详细信息,请参见visionDetectionGenerator(自动驾驶工具箱)

视觉检测发生器的更新间隔配置为每0.1秒产生一次检测,与典型汽车视觉传感器的更新速率一致。

创建actorProfiles对于场景,其中包含所有驾驶场景参与者(包括ego车辆)的物理和雷达概况。为视觉检测生成器指定这些角色和其他配置参数。

概要文件= actorProfiles(场景);%配置视觉检测生成器来检测车道和障碍物传感器= visionDetectionGenerator (“SensorIndex”, 1...“SensorLocation”1.9 [0],...“DetectionProbability”, 1...“MinObjectImageSize”, 5 [5],...“FalsePositivesPerImage”0,...“DetectorOutput”车道和对象的...“intrinsic”, cameraIntrinsics([700 1814],[320 240],[480 640]),...“ActorProfiles”配置文件,...“UpdateInterval”, 0.1);

为了得到检测,传感器对象在每个模拟步骤中调用。这传感器对象调用发生在helper函数中exampleHelperGetObstacleDataFromSensors

创建以自我为中心的入住地图

这个例子使用了binaryOccupancyMap对象创建一个以自我为中心的占用地图。

创建一个正方形的占用地图,每边100米,分辨率为2格/米。默认情况下将所有单元格设置为已占用状态。

egoMap = binaryOccupancyMap(100, 100, 2);setOccupancy (egoMap(200、200));

默认情况下,地图原点位于左下角。移动egoMap入住地图的中心位置。这将占用地图转换为以自我为中心的占用地图。

egoMap。GridOriginInLocal = [-egoMap.XLocalLimits (2) / 2,...-egoMap.YLocalLimits (2) / 2);

用障碍信息更新以自我为中心的占用地图

在更新之前egoMap,初始化可视化窗口。障碍egoMap可视化用黑色(有占用)表示,空闲空间用白色(没有占用)表示。

hax = exampleHelperSetupVisualization(场景);

使用。设置执行该场景的循环推进(场景).这个循环应该移动egoVehicle一边走一边更新姿势。

调用移动egoMap使用更新的姿态得到更新的检测。每次更新都清除地图上的所有障碍。

%推进方案推进(场景)自我车辆位置egoPose = egoVehicle.Position;egoYaw =函数(egoVehicle.Yaw);%移动网格的原点到自我车的正面。移动(egoMap [egoPose (1) egoPose (2)));%在使用障碍信息更新之前重置egoMapsetOccupancy (egoMap (egoMap.GridSize));

由视觉检测生成器生成的车道边界和障碍物信息用于查找需要更新的已占用空间egoMap

本例使用从车道边界提取的道路边界信息。公路边界外的地区也被认为是被占领的。

exampleHelperGetObstacleDataFromSensor辅助函数提取视觉检测生成器生成的道路边界和障碍物信息。

[obstleinfo, roadBorders, isValidLaneTime] =...egoMap exampleHelperGetObstacleDataFromSensor(场景,...egoVehicle、传感器);

根据视觉检测发生器的范围,检测可能落在egoMap范围之内。使用egoMap界限,exampleHelperFitlerObstacles功能提取了以自我为中心的地图中的障碍和自由空间。

[obstlepoints, unocupiedspace] = examplehelperfilterobstacle (...egoMap obstacleInfo,...roadBorders,...isValidLaneTime egoVehicle);

使用过滤过的障碍和自由空间位置来更新自我中心地图。更新可视化。

%设置空闲空间占用率为0如果~isempty(unccupiedspace) setoc占卜性(egoMap, unccupiedspace, 0);结束%设置已使用空间的占用率为1如果~isempty(obstlepoints) seto占卜性(egoMap, obstlepoints, 1);结束%更新可视化exampleHelperUpdateVisualization(hax, egoVehicle, egoopose, egoYaw, egoMap);结束

图中包含2个轴对象和其他类型的uipanel对象。标题为二进制占用网格的坐标轴对象1包含2个类型为图像、补丁的对象。axis对象2包含10个类型为patch, line的对象。

图中包含2个轴对象和其他类型的uipanel对象。标题为二进制占用网格的坐标轴对象1包含2个类型为图像、补丁的对象。axis对象2包含10个类型为patch, line的对象。