主要内容

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

对象创建一个以自我为中心的占用图驾驶场景设计器应用.本例使用来自视觉检测生成器的障碍物信息来更新以自我为中心的占用地图。

这个例子:

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

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

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

简介

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

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

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

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

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

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

[scenario, egoVehicle] = examplehelpercreatestraight troadscenario;

本例使用了一种视觉检测发生器,它在驾驶场景中合成了安装在自我车辆前方的摄像头传感器。该生成器被配置为检测车道边界和障碍物。

详情请参见visionDetectionGenerator(自动驾驶工具箱)

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

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

profiles = 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函数中exampleHelperGetObstacleDataFromSensor

创建一个以自我为中心的占用地图

本例使用binaryOccupancyMap对象创建以自我为中心的占用图。

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

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

默认情况下,映射原点位于左下角。移动egoMap从地图的中心开始。这将占用地图转换为以自我为中心的占用地图。

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

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

在更新egoMap,初始化可视化窗口。的障碍egoMap可视化用黑色表示(已占用),自由空间用白色表示(未占用)。

hAxes = exampleHelperSetupVisualization(场景);

设置用于执行场景的循环推进(场景).这个循环应该移动egoVehicle沿着道路,随着它的移动更新姿势。

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

%推进场景推进(场景)自我车辆位置egoPose = egoVehicle.Position;egocar . yaw = deg2rad(egoVehicle.Yaw);移动网格的原点到自我车辆的正面。move(egoMap, [egoPose(1), egoPose(2)]);在更新障碍物信息之前重置egoMapsetOccupancy (egoMap (egoMap.GridSize));

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

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

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

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

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

[obstaclePoints, unooccupiedspace] = example...egoMap obstacleInfo,...roadBorders,...isValidLaneTime egoVehicle);

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

%设置空闲空间占用率为0如果~isempty(unocupiedspace) setOccupancy(egoMap, unocupiedspace, 0);结束%设置已用空间占用率为1如果~isempty(obstaclePoints) setooccupancy (egoMap, obstaclePoints, 1);结束%更新可视化exampleHelperUpdateVisualization(hAxes, egoVehicle, egoPose, egoYaw, egoMap);结束

{

{