主要内容

模型视觉传感器检测

这个例子展示了如何建模和模拟的汽车视觉传感器的输出不同的驾驶场景。生成合成视觉检测是重要的测试和验证跟踪和传感器融合算法在角情况下,或者当传感器硬件不可用。这个例子分析视觉测量之间的差异和车辆地面真理的位置和速度向前碰撞警告(结合)的情况下,通过车辆的情况下,和一座小山血统的场景。

在本例中,您以编程方式生成视觉检测。你也可以生成检测使用驾驶场景设计师应用。例如,明白了创建驾驶场景交互并生成合成传感器数据

介绍

车辆包含高级驾驶员辅助系统(ADAS)功能或设计为全自动通常依赖于多种类型的传感器。这些传感器包括声纳、雷达、激光雷达和视觉。一个健壮的解决方案包括一个传感器融合算法结合了力量在系统中所包含的各种类型的传感器。更多信息的合成检测传感器融合多传感器ADAS系统,明白了使用合成雷达和视觉传感器融合数据

当使用合成检测测试和验证跟踪和传感器融合算法,重要的是要了解如何生成的模型检测传感器的独特的性能特征。各类汽车传感器提供了一组特定的优势和劣势,导致融合的解决方案。这个例子提出了一些重要的汽车视觉传感器和性能特征显示了如何通过使用合成检测传感器性能建模。

视觉传感器模型

这个示例使用visionDetectionGenerator来生成合成视觉传感器检测。visionDetectionGenerator模型汽车视觉传感器的性能特点如下:

的优势

  • 良好的横向位置和速度的准确性

  • 每个目标一个检测报告

弱点

  • 可怜的纵向位置和速度的准确性

  • 无法检测到阻挡目标

  • 纵向偏差的提升目标

结合自动化驾驶场景

创建一个向前碰撞警告(结合)测试场景,用于说明如何衡量目标的位置和一个汽车视觉传感器。移动的场景由自我车辆和固定目标车辆放置75米。50公里的自我车辆有一个初始速度之前应用的实现恒减速制动3 m / s ^ 2。然后车靠站目标车辆的后保险杠前1米。

rng默认的;initialDist = 75;% mfinalDist = 1;% minitialSpeed = 50;%公里brakeAccel = 3;% m / s ^ 2[场景,egoCar] = helperCreateSensorDemoScenario (“结合”,initialSpeed initialDist brakeAccel finalDist);

前方的视觉传感器。

创建一个前置视觉传感器安装在自我车辆的前挡风玻璃,离地面1.1米。传感器是把1度向路上并生成测量每0.1秒。传感器的相机480 - 640像素成像阵列和一个800像素的焦距。传感器可以定位对象在一个图像的精度5像素,最大探测距离为150米。的ActorProfiles属性指定的物理尺寸的车辆被仿真的视觉传感器。

visionSensor = visionDetectionGenerator (“SensorIndex”,1“UpdateInterval”,0.1,“SensorLocation”(0.75 * egoCar。轴距0),“高度”,1.1,“节”,1“intrinsic”cameraIntrinsics(800, 240年[320],[480]640),“BoundingBoxAccuracy”5,“MaxRange”,150,“ActorProfiles”actorProfiles(场景))
visionSensor = visionDetectionGenerator属性:SensorIndex: 1 UpdateInterval: 0.1000 SensorLocation:[2.1000 0]高度:1.1000偏航:0节:1卷:0 intrinsic: [1 x1 cameraIntrinsics] DetectorOutput:“对象只有”FieldOfView: [43.6028 - 33.3985] MaxRange: 150 MaxSpeed: 100 MaxAllowedOcclusion: 0.5000 MinObjectImageSize: [15 15] DetectionProbability: 0.9000 FalsePositivesPerImage: 0.1000使用显示所有属性

模拟视觉检测

模拟视觉传感器测量目标车辆的位置通过推进仿真时间的场景。视觉传感器检测来自真正的目标构成(位置、速度和方向)中表达自我车辆的坐标系。

视觉传感器配置为生成检测在0.1秒的时间间隔,这是符合典型的汽车视觉传感器的更新速度。然而,精确模型的运动车辆,每0.01秒的场景模拟进步。传感器返回一个逻辑国旗,isValidTime,这是真的当视觉传感器达到所需的更新间隔,表明此仿真时间步将生成检测。

%为结合场景创建显示(cep figScene] = helperCreateSensorDemoDisplay(场景、egoCar visionSensor);指标=结构;%初始化结构体收集场景指标推进(场景)%更新车辆位置gTruth = targetPoses (egoCar);%得到目标位置在自我车辆坐标%生成带时间戳的视力检测时间= scenario.SimulationTime;[侦破,~,isValidTime] = visionSensor (gTruth、时间);如果isValidTime%更新鸟瞰的情节与检测和道路边界helperUpdateSensorDemoDisplay (cep egoCar visionSensor,依据);%收集视觉检测和地面实况进行离线分析指标= helperCollectScenarioMetrics(指标、gTruth相同);结束%快照发布的例子helperPublishSnapshot (figScene、时间> = 6);结束

位置测量

在结合自动化测试的持续时间,自我目标车辆的距离车辆跨越广泛的价值。通过比较视觉传感器的测量目标车辆的纵向和横向位置到目标车辆的地面真理的位置,你可以观察到传感器的测量位置的准确性。

使用helperPlotSensorDemoDetections情节纵向和横向位置错误的测量位置之间的差异报告的视觉传感器和目标飞行器的地面真理。地面真理参考目标车辆是点在地面上直接低于目标车的后桥的中心,也就是1米在车的前保险杠。

helperPlotSensorDemoDetections(指标、“位置”,“反向范围”6 [6]);%显示车后的目标tgtCar = scenario.Actors (2);rearOverhang = tgtCar.RearOverhang;次要情节(1、2、1);持有;情节(-rearOverhang * [1], ylim,“k”);持有;传奇(“错误”,“2 \σ噪声”,“后方过剩”);

视觉传感器转换目标的位置在相机的图像在自我车辆的纵向和横向位置坐标系统。传感器这转换通过假设图像中检测出点躺在一个平坦的道路,车辆在同一海拔的自我。

纵向位置测量

前置视觉传感器配置,纵向位置测量主要来自目标的垂直放置在相机的图像。

图像中对象的垂直位置对象的高度密切相关,但它是弱相关对象的距离相机。这种弱相关导致单眼视觉传感器的纵向位置错误成为大物体运动传感器。纵向位置错误在前面的情节在左边显示传感器的纵向误差迅速增加当目标车辆的传感器。传感器的纵向美元\σ2美元测量噪声小于1米,地面真值到目标车辆范围小于30米,长到超过5米范围超出了70米的自我。

纵向位置错误也显示经度之间的1米偏差测量的视觉传感器和地面目标的真实位置。1米偏见表明传感器一直措施目标更接近自我比目标车辆的车辆地面实况的位置。目标而不是近似为一个点在空间,视觉传感器模型的物理尺寸汽车的身体。对于结合场景,视觉传感器目标车辆的后侧的看法。1米偏差的检测从这边对应生成车辆的后方过剩。车辆的后方过剩定义车辆的后端之间的距离和它的后桥,地面实况参考所在地。

横向位置测量

前置视觉传感器配置,侧卧位来自目标的水平位置在相机的图像。

与纵向位置不同,对象的横向位置的水平位置密切相关视觉传感器的形象。这个强烈的相关性产生精确的横向位置测量不降解迅速与物体的距离传感器。外侧位置错误在前面的右边的情节缓慢增长与范围。的美元\σ2美元报告的测量噪声传感器仍低于0.2米,地面真值范围的70米。

速度测量和目标遮挡

创建一个驾驶场景中有两个目标车辆(领先的汽车和一辆驶过的车)来说明一个视觉传感器的准确性的纵向和横向速度测量。领头车放置40米前的自我,与相同的速度旅行。通过汽车开始在车左边的车道与自我,通过自我的车辆,并合并到右车道后方领导的车。这一合并操作产生纵向和横向速度分量,使您比较传感器的准确性以及这两个维度。

因为领导直接在传感器前面的车,它有一个纯粹的纵向速度分量。通过汽车的速度剖面纵向和横向速度分量。这些组件的变化当汽车通过车辆和进入自我领导背后的右车道的车。比较传感器的测量目标车辆的纵向和横向速度的地面实况速度说明了视觉传感器观察这两个速度分量的能力。

%创建通过场景leadDist = 40;% m速度= 50;%公里passSpeed = 70;%公里mergeFract = 0.55;% 55%合并到右车道[场景,egoCar] = helperCreateSensorDemoScenario (“传递”leadDist,速度、passSpeed mergeFract);

视觉传感器的配置速度测量

视觉传感器不能确定一个物体的速度从一个单一的形象。估计速度,视觉传感器比较对象的多个图像之间的运动。从多个图像处理提取的目标位置使用平滑滤波器。除了估计速度,这个过滤器产生平滑的位置估计。调整的平滑滤波器,可以设置传感器的过程噪声强度。传感器的噪声过程应该设置的最大加速度大小的顺序将从一个必须由传感器检测到的目标。

在前一节中使用的视觉传感器,并配置它来生成位置和速度估计从平滑滤波器的过程噪声强度5 m / s ^ 2。

%配置视觉传感器的噪声强度由平滑滤波器使用释放(visionSensor);visionSensor。ProcessNoiseIntensity = 5;% m / s ^ 2%使用演员资料传递汽车场景visionSensor。ActorProfiles= actorProfiles(scenario);

使用helperRunSensorDemoScenario模拟的运动自我和目标车辆。这个函数还收集模拟指标,作为结合以前做驾驶场景。

snapTime = 5.9;%仿真时间采取快照发布指标= helperRunSensorDemoScenario(场景、egoCar visionSensor snapTime);

使用helperPlotSensorDemoDetections绘制视觉传感器的纵向和横向速度误差是测量速度之间的差异报告的传感器和目标飞行器的地面真理。

helperPlotSensorDemoDetections(指标、“速度”,“时间”25 [-25]);次要情节(1、2、1);传奇(“引领汽车错误”,“引领汽车2 \σ噪声”,“通过汽车错误”,“通过汽车2 \σ噪声”);

纵向速度测量

前置视觉传感器测量纵向速度通过比较传感器的纵向位置测量传感器之间的变化更新间隔。因为传感器的纵向位置错误与范围、纵向速度错误也会增加目标范围。

通过车辆的纵向速度错误场景显示在前面的情节在左边。因为领导汽车视觉传感器的距离保持不变,其错误(显示为红点)显示相同的美元\σ2美元测量噪声在整个场景。然而,通过汽车传感器的距离不是常数,但这个距离增加汽车通过传感器和走向汽车。通过汽车的纵向速度错误(显示为黄色点)很小的时候第一次进入传感器的视场2秒。通过汽车接近场景中的视觉传感器在这一点上。从2秒到6秒,经过的车是远离自我,接近领导的车。其纵向速度误差增长作为其与传感器的距离增加。一旦通过汽车并入领导背后的右车道车,它维护一个常数距离传感器,和它的美元\σ2美元测量噪声保持不变。

横向速度测量

前置视觉传感器横向速度通过比较测量传感器的横向位置测量传感器之间的变化更新间隔。因为传感器的横向位置错误不是强与目标的范围从传感器、横向速度的错误也会显示小目标区间的依赖。

通过车辆的横向速度错误场景显示在前面的情节在右边。错误的引导车(红点)和通过车(黄点)几乎相同的测量噪声对整个场景。通过汽车的横向速度报道错误显示变化不大,因为它远离传感器。

检测的目标部分遮挡

在前面的速度误差的情节中,领头的车(红点)是可靠地检测到在第一次6秒的场景。路过的车(黄点)检测在2秒当它第一次进入相机的视野。检测然后生成目标车辆,直到6秒。在6秒,通过汽车合并到右车道和自我之间的移动车辆和汽车。对于剩余的场景,通过汽车部分阻塞的视觉传感器的观点引导车。导致汽车55%的背部被挡住,只留下45%的可见传感器检测。这种闭塞的观点引导汽车防止传感器发现汽车在相机的图像,生成检测。

视觉传感器的能力提供可靠的检测是强烈依赖于一个畅通无阻的视图对象的检测。在密集的交通,车辆在场景的可见性可以迅速改变车辆之间的距离变化和车辆进出通道。这无法维持对阻塞目标检测跟踪算法处理构成了挑战视觉传感器的检测。

重新运行通过车辆场景的视觉传感器可以检测目标与多达60%的阻挡目标的可视区域。

%配置视觉传感器支持最大60%的闭塞金宝app释放(visionSensor);visionSensor。MaxAllowedOcclusion = 0.6;%运行模拟和收集探测和地面真理为离线分析指标= helperRunSensorDemoScenario(场景、egoCar visionSensor);%情节纵向和横向速度错误helperPlotSensorDemoDetections(指标、“速度”,“时间”25 [-25]);次要情节(1、2、1);传奇(“引领汽车错误”,“引领汽车2 \σ噪声”,“通过汽车错误”,“通过汽车2 \σ噪声”);

在前面的图中,速度显示错误的引导车(红点)和通过车(黄点)。观察到同样的错误表现,但现在在铅检测汽车维护背后传递汽车合并后在6秒。通过调整的最大允许闭塞,可以模型视觉传感器对目标遮挡的敏感度。

从目标仰角纵向位置偏差

对象的垂直位置在相机的图像其高度密切相关。因为一个单眼视觉传感器产生纵向位置测量对象的垂直位置的相机的形象,大错误可能出现目标在不同海拔高度的自我。当一个对象改变高度,垂直位移的传感器错误解释相机的形象改变对象的纵向位置。

再次运行结合场景与静止目标车辆放置在一个位置2米低于自我车辆的初始位置。自我车辆是一个小山丘方法目标车辆。作为自我车辆下降,目标车辆的垂直位置在相机的图像变化,引入传感器的测量纵向位置偏差。

%创建结合山后裔场景initialDist = 75;% mfinalDist = 1;% minitialSpeed = 50;%公里brakeAccel = 3;% m / s ^ 2[场景,egoCar] = helperCreateSensorDemoScenario (“结合”,initialSpeed initialDist brakeAccel finalDist,假,2);%使用演员资料结合山后裔的场景释放(visionSensor);visionSensor。ActorProfiles= actorProfiles(scenario);%运行模拟和收集探测和地面真理为离线分析snapTime = 3;%仿真时间采取快照发布指标= helperRunSensorDemoScenario(场景、egoCar visionSensor snapTime, true);

情节的位置错误生成的目标车辆的自我车辆下降小山丘。

helperPlotSensorDemoDetections(指标、“位置”,“反向范围”(80年6 6;0));次要情节(1、2、1);xlim (60 [-10]);ylim (80 [0]);传奇(“错误”,“2 \σ噪声”);

前面的情节显示纵向位置错误(左边)和横向位置错误(右边)山后裔的场景。注意,在纵向位置误差情节,误差的极限轴一直在增加,以适应大偏差引起的目标的海拔相对于相机传感器作为自我车辆下降。

自我车辆开始下降75米时远离目标车辆。因为自我汽车,因为它是山下安营,目标出现在高空位置附近的相机的顶部的形象。作为自我车辆下降,目标车辆的位置在相机的图像从顶部的形象和穿过地平线。单眼视觉传感器,位于地平线附近目标在相机的图像映射到的位置非常远离传感器。(根据定义,点在地平线上位于无穷。)视觉传感器不生成探测对象出现在地平线在相机的图像,因为这些点不映射到的位置在路上的表面。

大型车辆的纵向位置的改变它的位置在图像也远离地平线引起传感器的平滑滤波器生成大量纵向速度估计。传感器拒绝检测速度超过它MaxSpeed财产。这些大产生的纵向速度目标的海拔也防止传感器生成检测当目标车辆靠近相机的地平线。

当自我目标车辆,车辆约40米目标车辆的图像位置已经越过地平线和传感器的速度估计满足其最高速度限制。在这个距离,视觉传感器开始生成目标车辆的检测。相机的地平线附近的目标位置映射点路上远离传感器解释了大型纵向单眼视觉传感器建模的错误时,开始检测目标车辆。纵向偏差继续减少自我车辆趋于山脚下和目标的位置远离相机的地平线的形象。自我车辆的后裔,年底目标和自我车辆在同一高度。只有1米偏差对应到目标车辆的后方存在威胁。传感器的横向位置错误没有偏见,因为自我的车辆,这就向下产生了气流的音高山上不会改变目标的水平位置在相机的图像。

行人和车辆检测

视觉传感器检测物体的能力其相机的形象取决于像素图像中的对象占用的数量。当图像中对象的规模大(数百个像素),传感器可以很容易地识别对象,并生成检测。然而当图像中对象的规模很小(像素)的传感器可能无法找到它,不会生成一个检测。对象的预期大小对相机的成像阵列是一个函数对象的物理尺寸和距离相机。因此,当车辆定位远离相机比一个行人,车辆和行人都可能有类似的尺寸在相机的图像。这意味着一个视觉传感器将检测大型对象(车辆)长范围比小对象(行人)。

再次运行结合场景与静止的汽车和行人在传感器前面75米。这个场景说明了传感器的探测距离的差异这两个对象。自我车辆、固定车和行人都放置在同一高度。

%创建结合自动化测试场景initialDist = 75;% mfinalDist = 1;% minitialSpeed = 50;%公里brakeAccel = 3;% m / s ^ 2[场景,egoCar] = helperCreateSensorDemoScenario (“结合”,initialSpeed initialDist brakeAccel finalDist,真正的);%使用演员资料结合山后裔的场景释放(visionSensor);visionSensor。ActorProfiles= actorProfiles(scenario);%运行模拟和收集探测和地面真理为离线分析snapTime = 5;%仿真时间采取快照发布指标= helperRunSensorDemoScenario(场景、egoCar visionSensor snapTime);

情节的位置错误生成的目标车辆和行人的结合情况。

helperPlotSensorDemoDetections(指标、“位置”,“反向范围”6 [6]);传奇(“车错误”,“车2 \σ噪声”,“行人错误”,“行人2 \σ噪声”);

前面的情节显示纵向位置错误(左边)和横向位置错误(右边)生成的视觉传感器的检测目标车辆和行人。错误检测为目标车辆(红色所示)生成到最远的范围包括在这个测试(75米),但行人(黄色)所示的错误没有出现,直到自我车辆已达到约30米的距离。这种差异在检测范围是由于这两个对象的大小的差异。

传感器停止生成检测行人的范围小于12米。在这个范围内,行人的抵消相机的光轴外的行人移动相机的水平视野。因为目标车辆直接在镜头面前,仍集中在相机的图像为整个结合自动化测试。

一些视觉传感器可以检测对象与较小的图像大小,使传感器来检测对象范围。在前面的场景中,传感器的检测行人是有限的行人的宽度(0.45米),这是比汽车的宽度窄(1.8 m)。为行人增加传感器的探测范围为40米,宽度的计算行人在相机的图像在40米。

找到物理宽度建模一个行人

概要文件= actorProfiles(场景);(3).Width pedWidth =概要文件%计算宽度的行人在相机的图像在像素从自我车辆40米cameraRange = 40-visionSensor.SensorLocation (1);focalLength = visionSensor.Intrinsics.FocalLength (1);pedImageWidth = focalLength * pedWidth / cameraRange
pedWidth pedImageWidth = 9.4987 = 0.4500

在40米,人行道宽度9.5像素的相机的图像。视觉传感器的最小对象宽度设置为匹配的行人在40米的宽度。

%配置传感器来检测行人一系列40米。释放(visionSensor);visionSensor.MinObjectImageSize (2) = pedImageWidth
visionSensor = visionDetectionGenerator属性:SensorIndex: 1 UpdateInterval: 0.1000 SensorLocation:[2.1000 0]高度:1.1000偏航:0节:1卷:0 intrinsic: [1 x1 cameraIntrinsics] DetectorOutput:“对象只有”FieldOfView: [43.6028 - 33.3985] MaxRange: 150 MaxSpeed: 100 MaxAllowedOcclusion: 0.6000 MinObjectImageSize: 9.4987 [15] DetectionProbability: 0.9000 FalsePositivesPerImage: 0.1000使用显示所有属性

再次运行场景和情节的位置错误显示修改后的检测范围的车辆和行人。

%运行模拟和为离线收集探测和地面真理%的分析。指标= helperRunSensorDemoScenario(场景、egoCar visionSensor);%情节位置错误为目标车辆和行人。helperPlotSensorDemoDetections(指标、“位置”,“反向范围”6 [6]);传奇(“车错误”,“车2 \σ噪声”,“行人错误”,“行人2 \σ噪声”);

前面的情节显示纵向位置错误(左边)和横向位置错误(右边)视觉传感器配置为支持行人检测一系列40米。金宝app车辆(红色所示)还发现了最远的测试范围,但现在在行人检测(黄色所示)生成从传感器到40米。

车道边界测量和车道阻塞

视觉检测发电机也可以配置为检测车道。重建两车道的场景与领导开车,通过汽车来说明一个视觉传感器的准确性的车道边界测量。同样的合并操作是用来遮挡的车道标志。

%创建通过场景leadDist = 40;% m速度= 50;%公里passSpeed = 70;%公里mergeFract = 0.55;% 55%合并到右车道[场景,egoCar] = helperCreateSensorDemoScenario (“传递”leadDist,速度、passSpeed mergeFract);

视觉传感器的配置车道边界测量

配置在前一节中使用的视觉传感器,并配置它来生成位置和速度估计从平滑滤波器的过程噪声强度5 m / s ^ 2。

%配置视觉传感器来检测车道和对象释放(visionSensor);visionSensor。DetectorOutput =车道和对象的;%使用演员资料传递汽车场景visionSensor。ActorProfiles= actorProfiles(scenario);

使用helperRunSensorDemoScenario模拟的运动自我和目标车辆。

snapTime = 5.9;%仿真时间采取快照发布helperRunSensorDemoScenario(场景、egoCar visionSensor snapTime);

上面可以看出,默认检测器可以看到车道边界从而45米左右,当面对一个视图。你可以改变的intrinsic探测器观察其效果。

%显示相机intrinsic。visionSensor.Intrinsics
ans = cameraIntrinsics属性:FocalLength: 800年[800]PrincipalPoint: 240年[320]图象尺寸:640年[480]RadialDistortion: [0 0] TangentialDistortion:[0 0]斜:0 K: [3 x3的两倍)
%增加焦距,观察其效果。释放(visionSensor);visionSensor.Intrinsics= cameraIntrinsics([1200 1200],[320 240],[480 640]) helperRunSensorDemoScenario(scenario, egoCar, visionSensor, snapTime);
visionSensor = visionDetectionGenerator属性:SensorIndex: 1 UpdateInterval: 0.1000 SensorLocation:[2.1000 0]高度:1.1000偏航:0节:1卷:0 intrinsic: [1 x1 cameraIntrinsics] DetectorOutput:“车道和对象”FieldOfView: [29.8628 - 22.6199] MaxRange: 150 MaxSpeed: 100 MaxAllowedOcclusion: 0.6000 MinObjectImageSize: 9.4987 [15] MinLaneImageSize: 20 [3] DetectionProbability: 0.9000 FalsePositivesPerImage: 0.1000使用显示所有属性

改变焦距从800像素到1200年在x和y方向上镜头缩放,使其进一步检测了范围。

总结

这个例子演示了如何使用合成模型汽车视觉传感器的输出检测。特别是,它如何visionDetectionGenerator模型:

  • 提供精确的横向位置和速度测量长范围,但纵向精度的时间有限

  • 根据目标的物理空间和限制检测目标的其他物体遮挡的场景

  • 包括纵向偏差为目标位于不同的海拔比自我

  • 调整对象和车道检测由于单眼相机intrinsic。

另请参阅

应用程序

对象

相关的话题