主要内容

visionDetectionGenerator

生成驾驶场景的视觉检测

描述

visionDetectionGenerator系统对象™从安装在自我车辆上的单目相机传感器生成检测。所有的检测都参照自我车辆或车载传感器的坐标系。您可以使用visionDetectionGenerator对象在包含参与者和轨迹的场景中创建drivingScenario对象。使用统计模式,发生器可以模拟添加随机噪声的真实检测,也可以产生虚警检测。此外,您可以使用visionDetectionGenerator对象来创建对象的输入multiObjectTracker.方法构建场景时驾驶场景设计师App,安装在自我车上的摄像头传感器输出为visionDetectionGenerator对象。

产生视觉检测:

  1. 创建visionDetectionGenerator对象并设置其属性。

  2. 调用带有参数的对象,就像调用函数一样。

要了解更多关于System对象如何工作的信息,请参见什么是系统对象?

创建

描述

传感器= visionDetectionGenerator创建具有默认属性值的视觉检测生成器对象。

例子

传感器= visionDetectionGenerator (cameraConfig控件创建视觉检测生成器对象monoCamera配置对象,cameraConfig

例子

传感器= visionDetectionGenerator (名称,值属性使用一个或多个名值对。例如,visionDetectionGenerator(‘DetectionCoordinates’,‘传感器笛卡儿’,‘MaxRange’,200)创建一个视觉检测生成器,在传感器笛卡尔坐标系中报告检测,最大检测范围为200米。将每个属性名用引号括起来。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放函数打开它们。

如果属性是可调,您可以随时更改其值。

有关更改属性值的更多信息,请参见在MATLAB中使用系统对象设计系统

由传感器生成的检测类型,指定为“只将对象”“只道”“道与阻塞”,或车道和对象的

  • 当设置为“只将对象”,只检测参与者。

  • 当设置为“只道”,只检测到车道。

  • 当设置为“道与阻塞”,仅检测到车道,但相机视场中的行为体会削弱传感器检测车道的能力。

  • 当设置为车道和对象的,传感器产生物体检测和闭塞车道检测。

例子:“道与阻塞”

数据类型:字符|字符串

唯一传感器标识符,指定为正整数。这个特性区分了多传感器系统中来自不同传感器的检测。

例子:5

数据类型:

传感器更新之间所需的时间间隔,指定为正实标量。的drivingScenario对象以固定的时间间隔调用视觉检测生成器。方法定义的间隔内视觉检测器生成新的检测UpdateInterval财产。的值UpdateInterval属性必须是模拟时间间隔的整数倍。更新间隔之间从传感器请求的更新不包含检测。单位以秒为单位。

例子:5

数据类型:

视觉传感器中心的位置,指定为(x, y).的SensorLocation而且高度属性定义了视觉传感器相对于自我车辆坐标系的坐标。默认值对应于安装在汽车仪表板上的前向传感器。单位是米。

例子:0.1 [4]

数据类型:

传感器高度高于车辆地面平面,指定为正实标量。默认值对应于安装在轿车仪表板上的前置视觉传感器。单位是米。

例子:1.5

数据类型:

视觉传感器的偏航角度,指定为一个真实标量。偏航角是自我车辆的中心线与视觉传感器的下距轴之间的角度。正偏航角对应的顺时针旋转时,看的正方向z自我车辆坐标系的-轴。单位以度为单位。

例子:4

数据类型:

视觉传感器的俯仰角,指定为一个实标量。所述俯仰角是所述视觉传感器的下距轴与所述x - y自我车辆坐标系的平面。正螺距角对应顺时针旋转时,看的正方向y自我车辆坐标系的-轴。单位以度为单位。

例子:3.

数据类型:

视觉传感器的滚动角度,指定为实标量。滚动角度是视觉传感器的下距轴围绕的旋转角度x自我车辆坐标系的-轴。正面的滚转角度相当于顺时针方向的旋转x坐标系的-轴。单位以度为单位。

例子:4

数据类型:

视觉传感器的固有校准参数,具体为cameraIntrinsics对象。

此属性是只读的。

视觉传感器的角视场,指定为实值1乘2的正矢量,[azfov, elfov].视场定义了传感器图像的方位角和仰角范围。每个分量必须在0度到180度的区间内。视场是由视觉传感器的固有参数推导出来的。传感器角视场以外的目标不被检测到。单位以度为单位。

数据类型:

最大检测范围,指定为正实标量。传感器无法探测到超出这个范围的目标。单位是米。

例子:200

数据类型:

可检测到的最大物体速度,指定为非负实标量。单位是米每秒。

例子:10.0

数据类型:

对象允许的最大遮挡,指定为范围[0 1]中的实标量。遮挡是一个物体的总表面积的一部分,不可见的传感器。值为1表示对象被完全遮挡。单位是无量纲。

例子:0.2

数据类型:

探测到目标的概率,指定为小于或等于1的正实标量。这个量定义了传感器检测到可检测物体的概率。一个可检测的对象是满足最小可检测尺寸、最大范围、最大速度和最大允许遮挡约束的对象。

例子:0.95

数据类型:

视觉传感器为每个图像生成的错误检测数,指定为非负实标量。

例子:2

数据类型:

视觉传感器在图像中检测到的对象的最小高度和宽度,指定为[minHeight, minWidth]正的向量。物体的二维投影高度必须大于或等于minHeight.物体的投影宽度必须大于或等于minWidth.单位以像素为单位。

例子:30 [20]

数据类型:

边界框精度,指定为正实标量。这个量定义了检测器将边界框与目标匹配的精确度。单位以像素为单位。

例子:4

数据类型:

用于滤波位置和速度测量的噪声强度,指定为正实标量。噪声强度定义了视觉传感器中使用的内恒速卡尔曼滤波器过程噪声的标准差。该滤波器使用分段常数白噪声加速模型对过程噪声进行建模。噪声强度通常与目标预期的最大加速度量级相同。单位为m/s2

例子:2.5

数据类型:

允许向视觉传感器测量添加噪声,指定为真正的.将此属性设置为真正的为传感器测量增加噪声。否则,测量没有噪声。即使你设置了HasNoise,对象仍然计算MeasurementNoise每个检测的属性。

数据类型:逻辑

传感器报告的最大检测数的来源,指定为“汽车”“属性”.当此属性设置为“汽车”,传感器报告所有检测。当此属性设置为“属性”时,传感器报告的检测次数不超过MaxNumDetections财产。

数据类型:字符|字符串

传感器报告的最大检测数,指定为正整数。报告最接近传感器的检测结果。

依赖关系

要启用此属性,请设置MaxNumDetectionsSource财产“属性”

数据类型:

报告检测的坐标系统,指定为以下值之一:

  • “自我笛卡儿”-检测报告在自我载具笛卡尔坐标系。

  • 传感器笛卡儿的-检测报告在传感器笛卡尔坐标系。

数据类型:字符|字符串

车道检测更新之间的所需时间间隔,指定为正实标量。的drivingScenario对象以固定的时间间隔调用视觉检测生成器。视觉检测器按此属性定义的间隔生成新的车道检测,该属性必须是模拟时间间隔的整数倍。更新间隔之间从传感器请求的更新不包含车道检测。单位以秒为单位。

例子:0.4

数据类型:

在考虑曲率后,传感器可以检测到的投影车道标记的最小尺寸,指定为1 × 2实值向量,[minHeight minWidth].车道标识必须超过这两个值才能被检测到。此属性仅在检测车道时使用。单位以像素为单位。

例子:(5、7)

数据类型:

车道边界的精确度,指定为正实标量。此属性定义车道传感器放置车道边界的精确度。单位以像素为单位。此属性仅在检测车道时使用。

报告的最大车道数的来源,指定为“汽车”“属性”.当指定为“汽车”时,自动计算最大行车线数。当指定为“属性”,可以使用MaxNumLanes属性设置最大通道数或通道数。

数据类型:字符|字符串

报告的最大通道数,指定为正整数。

依赖关系

要启用此属性,请设置MaxNumLanesSource财产“属性”

数据类型:字符|字符串

参与者配置文件,指定为结构或结构数组。每个结构都包含一个参与者的物理和雷达特征。

  • 如果ActorProfiles是不是一个单一的结构,所有的参与者都传递到visionDetectionGenerator对象使用此配置文件。

  • 如果ActorProfiles是一个数组,传入对象的每个参与者必须具有唯一的参与者配置文件。

要为您的驾驶场景生成结构数组,请使用actorProfiles函数。该表显示了有效的结构字段。如果您不指定一个字段,该字段将被设置为其默认值。如果没有将参与者传递到对象中,则ActorID字段不包括在内。

描述
ActorID 场景定义的参与者标识符,指定为正整数。
ClassID 分类标识符,指定为非负整数。0为未知或未赋值类的对象保留。
长度 actor的长度,指定为正实标量。默认值是4.7.单位是米。
宽度 actor的宽度,指定为正实标量。默认值是1.8.单位是米。
高度 actor的高度,指定为正实标量。默认值是1.4.单位是米。
OriginOffset

动作者的旋转中心与几何中心的偏移量,用[表示xyz实值向量。旋转中心,或原点,位于演员的底部中心。对于车辆来说,旋转中心是后轴中心下方的地面点。默认值是(0 0 0).单位是米。

RCSPattern 行动者的雷达横截面图,指定为元素个数(RCSElevationAngles)——- - - - - -元素个数(RCSAzimuthAngles)实值矩阵。默认值是[10 10;10 10].单位为分贝每平方米。
RCSAzimuthAngles 方位角对应行RCSPattern,指定为范围为[-180,180]的实数向量。默认值是(-180 180).单位以度为单位。
RCSElevationAngles 仰角对应行RCSPattern,指定为范围为[- 90,90]的实值向量。默认值是(-90 90).单位以度为单位。

有关结构字段的完整定义,请参见演员而且车辆功能。

使用

描述

例子

依据=传感器(演员时间创建视觉检测,依据的传感器测量演员在当前的模拟中时间.该对象可以同时为多个参与者生成传感器检测。不要把自我载体作为演员之一。

若要启用此语法,请设置DetectionOutput“只将对象”

lanedets=传感器(laneboundaries时间生成车道检测,lanedets,从车道边界结构,laneboundaries

启用此语法集DetectionOutput“只道”.类指定的间隔生成车道边界LaneUpdateInterval财产。

lanedets=传感器(演员laneboundaries时间生成车道检测,lanedets,从车道边界结构,laneboundaries

若要启用此语法,请设置DetectionOutput“道与阻塞”.类指定的间隔生成车道边界LaneUpdateInterval财产。

例子

___numValidDets) =传感器(___也返回已报告的有效检测数,numValidDets

___numValidDetsisValidTime) =传感器(___也返回一个逻辑值,isValidTime,表示UpdateInterval生成检测的时间已经过去了。

例子

依据numValidDetsisValidTimelanedetsnumValidLaneDetsisValidLaneTime) =传感器(演员laneboundaries时间返回两个对象检测,依据,以及车道检测lanedets.该语法还返回报告的有效车道检测的数量,numValidLaneDets,和一面旗帜,isValidLaneTime,表示生成车道检测所需的模拟时间是否已经过。

若要启用此语法,请设置DetectionOutput车道和对象的

输入参数

全部展开

场景参与者姿势,指定为结构或结构数组。每个结构都对应一个参与者。方法可以生成此结构actorPoses函数。您也可以手动创建这些结构。该表显示了对象用于生成检测的字段。所有其他字段将被忽略。

描述
ActorID

场景定义的参与者标识符,指定为正整数。

位置

行为人的位置,指定为形式为[的实值向量xyz].单位是米。

速度

速度(v)的演员x-y- - - - - -,z-directions,指定为形式为[的实值向量vxvyvz].单位是米每秒。

actor的滚动角度,指定为实值标量。单位以度为单位。

球场

actor的俯仰角,指定为实值标量。单位以度为单位。

偏航

actor的偏航角,指定为实值标量。单位以度为单位。

AngularVelocity

角速度(ω)的演员x-,y- - - - - -,z-directions,指定为形式为[的实值向量ωxωyωz].单位是以度/秒为单位。

有关结构字段的完整定义,请参见演员而且车辆功能。

依赖关系

要启用此参数,请设置DetectorOutput财产“只将对象”“道与阻塞”,或车道和对象的

车道边界,指定为车道边界结构的数组。下表显示了每个结构的字段。

描述

坐标

车道边界坐标,指定为实值N3矩阵,N为车道边界坐标的个数。车道边界坐标定义了沿道路中心,在距离自我车辆指定纵向距离的边界上的点的位置。

  • 在MATLAB®方法指定这些距离“XDistance”的名称-值对参数laneBoundaries函数。

  • 在仿真万博1manbetx软件®方法指定这些距离计算边界的自我载具距离(m)参数的场景的读者块或计算车道边界时与父结点的距离参数的仿真三维视觉检测发生器块。

这个矩阵还包括与自我载具零距离处的边界坐标。这些坐标位于自我车辆原点的左右,原点位于后桥中心下方。单位是米。

曲率

车道边界的每一行都有曲率坐标矩阵,指定为实值N1的向量。N为车道边界坐标的个数。单位是弧度每米。

CurvatureDerivative

每一行的车道边界曲率的导数坐标矩阵,指定为实值N1的向量。N为车道边界坐标的个数。单位是弧度每平方米。

HeadingAngle

初始车道边界航向角,指定为实标量。车道边界的朝向角度与自我车辆的朝向是相对的。单位以度为单位。

LateralOffset

自我车辆位置从车道边界的横向偏移量,指定为实标量。对自我车辆左侧车道边界的偏移量为正。自我载体右侧的偏移量是负的。单位是米。在这幅图中,自我车辆距离左车道1.5米,距离右车道2.1米。

自我的车辆在车道上行驶

BoundaryType

车道界线标记的类型,指定为以下值之一:

  • “无名”-不存在物理车道标志

  • “固体”-单线不间断

  • “冲”-单线虚线车道标志

  • “DoubleSolid”-两条连续的线

  • “DoubleDashed”-两条虚线

  • “SolidDashed”-实线在左边,虚线在右边

  • “DashedSolid”-虚线在左边,实线在右边

强度

车道边界标记的饱和强度,指定为从0到1的实标量。的值0对应于颜色完全不饱和的标记。标记是灰色的。的值1对应于颜色完全饱和的标记。

宽度

车道边界宽度,指定为正实标量。在双线车道标志中,两条线和线与线之间的间距使用相同的宽度。单位是米。

长度

虚线中的虚线长度,指定为正实标量。在双线车道标志中,两条线的长度相同。

空间

虚线中虚线之间的空格长度,指定为正实标量。在虚线双线车道标记中,两条线使用相同的空间。

依赖关系

要启用此参数,请设置DetectorOutput财产“只道”“道与阻塞”,或车道和对象的

数据类型:结构体

当前模拟时间,指定为正实标量。的drivingScenario对象以固定的时间间隔调用视觉检测生成器。方法定义的间隔内视觉检测器生成新的检测UpdateInterval财产。的值UpdateInterval而且LanesUpdateInterval属性必须是模拟时间间隔的整数倍。更新间隔之间从传感器请求的更新不包含检测。单位以秒为单位。

例子:10.5

数据类型:

输出参数

全部展开

的单元格数组返回的对象检测objectDetection对象。每个对象都包含以下字段:

财产 定义
时间 测量时间
测量 对象的测量
MeasurementNoise 测量噪声协方差矩阵
SensorIndex 传感器的唯一ID
ObjectClassID 对象分类
ObjectAttributes 传递给跟踪器的附加信息
MeasurementParameters 非线性卡尔曼跟踪滤波器初始化函数所用的参数

测量MeasurementNoise,MeasurementParameters的坐标系统中报告DetectionCoordinates财产的visionDetectionGenerator

测量

DetectionCoordinates财产 测量和测量噪声坐标
“自我笛卡儿” [x, y, z, vx; v; vz]
传感器笛卡儿的

MeasurementParameters

参数 定义
框架 枚举类型,指示用于报告度量的帧。当框架被设置为“矩形”在美国,检测报告采用笛卡尔坐标。当框架设置“球”在美国,检测是以球坐标报告的。
OriginPosition 传感器原点与自我载体原点的三维矢量偏移量。这个向量是从SensorLocation而且高度visionDetectionGenerator
取向 视觉传感器坐标系相对于自我车辆坐标系的定位。方向是从偏航球场,的属性visionDetectionGenerator
HasVelocity 指示测量是否包含速度或距离率组件。

ObjectAttributes

属性 定义
TargetIndex 行为人的标识符,ActorID,从而产生了检测结果。对于误报,该值为负。

返回的检测数,定义为非负整数。

  • MaxNumDetectionsSource属性设置为“汽车”numValidDets的长度依据

  • MaxNumDetectionsSource被设置为“属性”依据单元格数组的长度是否由MaxNumDetections财产。不超过MaxNumDetections返回的检测数。如果检测数小于MaxNumDetections,第一个numValidDets的元素依据持有有效的检测。剩下的元素依据设置为默认值。

数据类型:

有效的检测时间,返回为01isValidTime0所指定的更新间隔之间请求检测更新时UpdateInterval

数据类型:逻辑

车道边界检测,作为数组结构返回。该结构的字段为:

车道边界检测结构

描述
时间 车道检测时间
SensorIndex 传感器唯一标识符
LaneBoundaries 的数组clothoidLaneBoundary对象。

返回的车道检测数,定义为非负整数。

  • MaxNumLanesSource属性设置为“汽车”numValidLaneDets的长度lanedets

  • MaxNumLanesSource被设置为“属性”lanedets单元格数组的长度是否由MaxNumLanes财产。不超过MaxNumLanes返回的车道检测数。如果检测数小于MaxNumLanes,第一个numValidLaneDetections的元素lanedets保持有效的车道检测。剩下的元素lanedets设置为默认值。

数据类型:

有效的车道检测时间,返回为01isValidLaneTime0所指定的更新间隔之间请求车道检测更新时LaneUpdateInterval

数据类型:逻辑

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放名为obj,使用以下语法:

发行版(obj)

全部展开

isLocked 确定系统对象在使用
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 的内部状态重置系统对象

例子

全部折叠

使用安装在自我车辆上的前向汽车视觉传感器生成检测。假设有两个目标车辆:

  • 载体1在自我载体的正前方,以相同的速度移动。

  • 车辆2在左车道上比自我车辆快12公里每小时。

所有的位置,速度和测量都是相对于自我载体而言的。运行模拟10步。

dt = 0.1;car1 =结构(“ActorID”, 1“位置”(100 0 0),“速度”, [5*1000/3600 00]);car2 =结构(“ActorID”2,“位置”(150 10 0),“速度”(12 * 1000/3600 0 0]);

创建一个与自我车辆位置偏移的汽车视觉传感器。默认情况下,传感器位置在距车辆中心(3.4,0)米,距地平面1.1米处。

传感器= visionDetectionGenerator (“DetectionProbability”, 1...“MinObjectImageSize”, 5 [5],“MaxRange”, 200,“DetectionCoordinates”传感器笛卡儿的);追踪= multiObjectTracker (“FilterInitializationFcn”@initcvkf,...“ConfirmationParameters”(3 - 4),“NumCoastingUpdates”6);

在非自我的角色移动时为其生成视觉检测。输出检测形成单元阵列。只从要传递给的检测中提取位置信息multiObjectTracker,它只需要职位信息。然后为每一组新的检测更新跟踪器。

simTime = 0;nsteps = 10;k = 1:nsteps dets = sensor([car1 car2],simTime);n =大小(侦破,1);k = 1:n meas = dets{k}.测量(1:3);依据k{}。测量=量;measmtx =侦破{k} .MeasurementNoise (1:3, 1:3);依据k{}。MeasurementNoise = measmtx;结束[confirmedTracks, tentativeTracks allTracks] = updateTracks(记录、侦破、simTime);simTime = simTime + dt;car1。位置= car1。位置+ dt*car1.Velocity; car2.Position = car2.Position + dt*car2.Velocity;结束

使用birdsEyePlot来创建检测的俯瞰视图。绘制传感器覆盖区域。提取x而且y目标位置的转换测量将单元格的字段转换为MATLAB®数组。然后,绘制检测使用birdsEyePlot功能。

BEplot = birdsEyePlot (“XLim”220年[0],“YLim”75年[-75]);caPlotter = coverageAreaPlotter (BEplot,“DisplayName的”“视觉覆盖范围”);plotCoverageArea (caPlotter sensor.SensorLocation sensor.MaxRange,...sensor.Yaw,sensor.FieldOfView(1)) detPlotter = detectionPlotter(BEplot,“DisplayName的”视觉检测的);detPos = cellfun (@ (d) d.Measurement(1:2),精细,“UniformOutput”、假);detPos = cell2mat (detPos ') ';如果~ isempty (detPos) plotDetection (detPlotter detPos)结束

图中包含一个axes对象。axis对象包含两个类型为patch、line的对象。这些物体代表视觉覆盖区域,视觉检测。

通过使用单目相机配置创建视觉传感器,并从该传感器生成检测。

指定相机的内在参数并创建一个monoCamera对象。摄像机被安装在离地面1.5米高、与地面有1度倾斜度的自我车辆的顶部。

focalLength = [800 800];principalPoint = [320 240];imageSize = [480 640];intrinsic = cameraIntrinsics (focalLength principalPoint图象尺寸);身高= 1.5;距= 1;monoCamConfig = monoCamera (intrinsic、身高、“节”、沥青);

使用单目摄像机配置创建视觉检测生成器。

visionSensor = visionDetectionGenerator (monoCamConfig);

生成一个带有一辆自我车辆和两辆目标车辆的驾驶场景。把第一辆目标车放在自我车前方30米的地方。将第二辆目标车放置在自我车前方20米的位置,但向左偏移3米。

场景= drivingScenario;egoVehicle =车辆(场景中,“ClassID”1);targetCar1 =车辆(场景中,“ClassID”, 1“位置”, 30 0 0);targetCar2 =车辆(场景中,“ClassID”, 1“位置”[20 3 0]);

使用鸟瞰图来显示车辆轮廓和传感器覆盖区域。

图bep = birdsEyePlot(“XLim”, 50 [0],“YLim”20 [-20]);olPlotter = outlinePlotter (cep);(位置、偏航、长度、宽度、originOffset color] = targetOutlines (egoVehicle);plotOutline (olPlotter、位置、偏航、长度、宽度);caPlotter = coverageAreaPlotter (cep),“DisplayName的”“覆盖范围”“FaceColor”“蓝”);plotCoverageArea (caPlotter visionSensor.SensorLocation visionSensor.MaxRange,...visionSensor.Yaw visionSensor.FieldOfView (1))

图中包含一个axes对象。axes对象包含一个patch类型的对象。此对象表示覆盖区域。

从自我车辆的角度获得目标车辆的姿态。使用这些姿势从传感器生成检测。

提出了= targetPoses (egoVehicle);[侦破,numValidDets] = visionSensor(姿势,scenario.SimulationTime);

显示(XY)有效检测的位置。对于每次检测,(XY的前两个值测量字段。

i = 1:numValidDets XY = dets{i}.Measurement(1:2);detXY = sprintf ('检测%d: X = %。2f米,Y = %。2 f米”,我,XY);disp (detXY)结束
探测1:X = 19.09米,Y = 2.79米探测2:X = 27.81米,Y = 0.08米

创建一个驾驶场景,包括一辆自我车辆和一辆目标车辆沿着一条三车道的道路行驶。使用视觉检测发生器检测车道边界。

场景= drivingScenario;

使用车道规格创建三车道道路。

roadCenters = [0 0 0;60 0 0;120年30 0];lspc = lanespec (3);路(场景、roadCenters“道”, lspc);

指定自我车辆以30米/秒的速度跟随中心车道。

egovehicle =车辆(场景中,“ClassID”1);Egopath = [1.5 0 0;60 0 0;111年25 0];egospeed = 30;smoothTrajectory (egovehicle egopath egospeed);

指定目标车辆以40米/秒的速度行驶在自我车辆的前面,并在靠近自我车辆的地方换道。

targetcar =车辆(场景中,“ClassID”1);Targetpath = [8 2;60 -3.2;120年33];targetspeed = 40;定位路径,smoothTrajectory (targetcar targetspeed);

显示一个追逐情节从自我车辆背后的3d视图的场景。

chasePlot (egovehicle)

创建一个检测车道和物体的视觉检测生成器。传感器的俯仰指向向下一度。

visionSensor = visionDetectionGenerator (“节”, 1.0);visionSensor。DetectorOutput =车道和对象的;visionSensor。ActorProfiles= actorProfiles(scenario);

运行仿真。

  1. 创建一个鸟瞰图和相关的绘图仪。

  2. 显示传感器覆盖区域。

  3. 显示车道标记。

  4. 获得道路上目标的地面真实姿态。

  5. 在前方60米内取得理想的行车界线点。

  6. 从理想的目标姿态和车道边界生成检测。

  7. 显示目标的轮廓。

  8. 当对象检测有效时显示对象检测。

  9. 车道检测有效时显示车道边界。

cep = birdsEyePlot (“XLim”, 60 [0],“YLim”35 [-35]);caPlotter = coverageAreaPlotter (cep),“DisplayName的”“覆盖范围”...“FaceColor”“蓝”);detPlotter = detectionPlotter (cep),“DisplayName的”“对象检测”);lmPlotter = laneMarkingPlotter (cep),“DisplayName的”“车道标记”);lbPlotter = laneBoundaryPlotter (cep),“DisplayName的”...“车道边界检测”“颜色”“红色”);olPlotter = outlinePlotter (cep);plotCoverageArea (caPlotter visionSensor。SensorLocation,...visionSensor.MaxRange visionSensor.Yaw,...visionSensor.FieldOfView (1));advance(scenario) [lmv,lmf] = laneMarkingVertices(egovehicle);plotLaneMarking(lmPlotter,lmv,lmf) tgtpose = targetpose (egovehicle);lookaheadDistance = 0:0.5:60;磅= laneBoundaries (egovehicle,“XDistance”lookaheadDistance,“LocationType”“内心”);[obdets, nobdets obValid、lb_dets nlb_dets, lbValid] =...visionSensor (tgtpose磅,scenario.SimulationTime);[objposition, objyaw objlength、objwidth objoriginOffset, color] = targetOutlines (egovehicle);plotOutline (olPlotter、objposition objyaw、objlength objwidth,...“OriginOffset”objoriginOffset,“颜色”、颜色)如果= cellfun(@(d)d. measurement (1:2),obdets,“UniformOutput”、假);detPos = vertcat (0 (0, 2), cell2mat (detPos ') ');plotDetection (detPlotter detPos)结束如果lbValid plotLaneBoundary (lbPlotter vertcat (lb_dets.LaneBoundaries))结束结束

从理想的视觉传感器生成检测,并将这些检测与来自噪声传感器的检测进行比较。一个理想的传感器它总是能产生检测,没有假阳性,也没有附加的随机噪声。

创建一个驾驶场景

创建一个驾驶场景,在这个场景中,自我车辆被放置在一排目标汽车的对角线前面。有了这个配置,您可以稍后绘制被检测目标的测量噪声协方差,而不必让目标车辆彼此遮挡。

场景= drivingScenario;egoVehicle =车辆(场景中,“ClassID”1);numTgts = 6;x = linspace(20、50、numTgts)”;y = linspace (-20 0, numTgts) ';x = [x, x (1: end-1)];y = [y; - y (1: end-1)];numTgts =元素个数(x);m = 1:numTgts vehicle(scenario,“ClassID”, 1“位置”, (x (m) y (m) 0]);结束

在鸟瞰图中绘制驾驶场景。

cep = birdsEyePlot (“XLim”, 60 [0]);传奇(“隐藏”) olPlotter = outlinePlotter(bep);(位置、偏航、长度、宽度、originOffset color] = targetOutlines (egoVehicle);plotOutline (olPlotter、位置、偏航、长度、宽度、...“OriginOffset”originOffset,“颜色”、颜色)

图中包含一个axes对象。axes对象为空。

创建一个理想的视觉传感器

方法创建视觉传感器visionDetectionGenerator系统对象™。要生成理想的检测,设置DetectionProbability1FalsePositivesPerImage0,HasNoise

  • DetectionProbability = 1-只要目标不被遮挡,并且满足范围、速度和图像大小的限制,传感器总是对目标产生检测。

  • FalsePositivesPerImage = 0—传感器只对驾驶场景中的真实目标进行检测。

  • HasNoise = false-传感器不添加随机噪声报告的位置和速度的目标。然而,objectDetection传感器返回的对象将测量噪声值设置为如果添加的噪声方差HasNoise真正的.有了这些噪声值,就可以使用multiObjectTracker.这种技术对分析机动滞后很有用,不需要运行耗时的蒙特卡罗模拟。

idealSensor = visionDetectionGenerator (...“SensorIndex”, 1...“UpdateInterval”,场景。SampleTime,...“SensorLocation”(0.75 * egoVehicle。轴距0),...“高度”, 1.1,...“节”0,...“intrinsic”cameraIntrinsics(800, 240年[320],[480]640),...“BoundingBoxAccuracy”, 50岁,...为了便于说明,将噪声调大。“ProcessNoiseIntensity”5,...“MaxRange”现年60岁的...“DetectionProbability”, 1...“FalsePositivesPerImage”0,...“HasNoise”假的,...“ActorProfiles”actorProfiles(场景))
idealSensor = visionDetectionGenerator with properties: SensorIndex: 1 UpdateInterval: 0.0100 SensorLocation:[2.1000 0]高度:1.1000偏摆:0俯仰:0滚动:0 innerics: [1x1 cameraIntrinsics] DetectorOutput: 'Objects only' FieldOfView: [43.6028 33.3985] MaxRange: 60 MaxSpeed: 100 MaxAllowedOcclusion: 0.5000 MinObjectImageSize: [15 15] DetectionProbability: 1 FalsePositivesPerImage: 0显示所有属性

绘制理想视觉传感器的覆盖区域。

传奇(“显示”) caPlotter = coverageAreaPlotter(cep,“DisplayName的”“覆盖范围”“FaceColor”“蓝”);mountPosition = idealSensor.SensorLocation;范围= idealSensor.MaxRange;取向= idealSensor.Yaw;fieldOfView = idealSensor.FieldOfView (1);plotCoverageArea (caPlotter mountPosition、范围、定位、fieldOfView);

图中包含一个axes对象。axes对象包含一个patch类型的对象。此对象表示覆盖区域。

模拟理想的视觉检测

获取目标的位置。位置在自我交通工具的坐标里。

gTruth = targetPoses (egoVehicle);

生成时间戳视觉检测。的单元格数组返回这些检测objectDetection对象。

时间= scenario.SimulationTime;依据= idealSensor (gTruth、时间);

检查第一(最左)检测的测量值和测量噪声方差。即使检测是理想的,因此没有增加随机噪声MeasurementNoise属性显示值,就像检测确实有噪声一样。

依据{1}。测量
ans =6×131.0000 -11.2237 0000
依据{1}。MeasurementNoise
ans =6×61.5427 -0.5958 0000 -0.5958 0.2422 0000 00 100.0000 0000 00 0.5398 -0.1675 0000 -0.1675 0.1741 0000 000 100.0000

绘制测量噪声协方差的2西格玛等高线的理想检测和椭圆。

pos = cell2mat (cellfun (@ (d) d.Measurement(1:2)相同,...“UniformOutput”、假));x =重塑(cell2mat (cellfun (@ (d) d.MeasurementNoise(1:2, 1:2),精细,...“UniformOutput”假)”,2,2,[]);绘图机= trackPlotter (cep,“DisplayName的”“理想的检测”...“MarkerEdgeColor”“蓝”“MarkerFaceColor”“蓝”);σ= 2;plotTrack(绘图仪、pos、σ^ 2 *浸)

图中包含一个axes对象。axis对象包含两个类型为patch、line的对象。这些物体代表覆盖区域,理想探测。

模拟噪声检测进行比较

基于理想传感器的特性创建一个噪声传感器。

noisySensor =克隆(idealSensor);(noisySensor) noisySensor发布。HasNoise = true;

将驾驶场景重置到原始状态。

重启(场景)

从噪声检测中收集统计信息。

numMonte = 1 e3;pos = [];itr = 1:numMonte time = scenario.SimulationTime;依据= noisySensor (gTruth、时间);%保存噪声测量pos = [pos; cell2mat (cellfun (@ (d) d.Measurement(1:2)相同,“UniformOutput”、假));推进(场景);结束

绘制噪声检测图。

绘图机= detectionPlotter (cep,“DisplayName的”噪声检测的...“标记”“。”“MarkerEdgeColor”“红色”“MarkerFaceColor”“红色”);plotDetection(绘图仪、pos)

图中包含一个axes对象。axis对象包含三个类型为patch、line的对象。这些对象代表覆盖区域,理想检测,噪声检测。

算法

视觉传感器模拟一个单眼相机,产生二维相机图像。为了将这些2-D图像的坐标投影到用于驾驶场景的3-D世界坐标中,传感器算法假设z-目标图像边界框底边缘所有图像点的位置(高度)在地面上。定义地面的平面是由视觉检测发生器的高度属性定义的,它定义了单目相机在地平面以上的偏移量。通过这种投影,生成的图像中物体的垂直位置与它们在道路上方的高度密切相关。然而,如果道路不平坦,物体的高度与传感器的高度不一致,那么传感器报告的检测不准确。有关显示此行为的示例,请参见模型视觉传感器检测

扩展功能

版本历史

介绍了R2017a