visionDetectionGenerator
生成驾驶场景的视觉检测
描述
的visionDetectionGenerator
系统对象™从安装在自我车辆上的单目相机传感器生成检测。所有的检测都参照自我车辆或车载传感器的坐标系。您可以使用visionDetectionGenerator
对象在包含参与者和轨迹的场景中创建drivingScenario
对象。使用统计模式,发生器可以模拟添加随机噪声的真实检测,也可以产生虚警检测。此外,您可以使用visionDetectionGenerator
对象来创建对象的输入multiObjectTracker
.方法构建场景时驾驶场景设计师App,安装在自我车上的摄像头传感器输出为visionDetectionGenerator
对象。
产生视觉检测:
创建
visionDetectionGenerator
对象并设置其属性。调用带有参数的对象,就像调用函数一样。
要了解更多关于System对象如何工作的信息,请参见什么是系统对象?
创建
语法
描述
创建具有默认属性值的视觉检测生成器对象。传感器
= visionDetectionGenerator
控件创建视觉检测生成器对象传感器
= visionDetectionGenerator (cameraConfig
)monoCamera
配置对象,cameraConfig
.
属性
除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放
函数打开它们。
如果属性是可调,您可以随时更改其值。
有关更改属性值的更多信息,请参见在MATLAB中使用系统对象设计系统.
DetectorOutput
- - - - - -传感器产生的检测类型
“只将对象”
(默认)|“只道”
|“道与阻塞”
|车道和对象的
由传感器生成的检测类型,指定为“只将对象”
,“只道”
,“道与阻塞”
,或车道和对象的
.
当设置为
“只将对象”
,只检测参与者。当设置为
“只道”
,只检测到车道。当设置为
“道与阻塞”
,仅检测到车道,但相机视场中的行为体会削弱传感器检测车道的能力。当设置为
车道和对象的
,传感器产生物体检测和闭塞车道检测。
例子:“道与阻塞”
数据类型:字符
|字符串
SensorIndex
- - - - - -独特的传感器标识符
正整数
唯一传感器标识符,指定为正整数。这个特性区分了多传感器系统中来自不同传感器的检测。
例子:5
数据类型:双
UpdateInterval
- - - - - -传感器更新之间所需的时间间隔
0.1
|积极的真正的标量
传感器更新之间所需的时间间隔,指定为正实标量。的drivingScenario
对象以固定的时间间隔调用视觉检测生成器。方法定义的间隔内视觉检测器生成新的检测UpdateInterval
财产。的值UpdateInterval
属性必须是模拟时间间隔的整数倍。更新间隔之间从传感器请求的更新不包含检测。单位以秒为单位。
例子:5
数据类型:双
SensorLocation
- - - - - -传感器的位置
3.4 [0]
|(x, y)
向量
视觉传感器中心的位置,指定为(x, y)
.的SensorLocation
而且高度
属性定义了视觉传感器相对于自我车辆坐标系的坐标。默认值对应于安装在汽车仪表板上的前向传感器。单位是米。
例子:0.1 [4]
数据类型:双
高度
- - - - - -传感器离地高度
1.1
|积极的真正的标量
传感器高度高于车辆地面平面,指定为正实标量。默认值对应于安装在轿车仪表板上的前置视觉传感器。单位是米。
例子:1.5
数据类型:双
偏航
- - - - - -视觉传感器的偏航角度
0
|真正的标量
视觉传感器的偏航角度,指定为一个真实标量。偏航角是自我车辆的中心线与视觉传感器的下距轴之间的角度。正偏航角对应的顺时针旋转时,看的正方向z自我车辆坐标系的-轴。单位以度为单位。
例子:4
数据类型:双
球场
- - - - - -视觉传感器的俯仰角
0
|真正的标量
视觉传感器的俯仰角,指定为一个实标量。所述俯仰角是所述视觉传感器的下距轴与所述x - y自我车辆坐标系的平面。正螺距角对应顺时针旋转时,看的正方向y自我车辆坐标系的-轴。单位以度为单位。
例子:3.
数据类型:双
卷
- - - - - -滚动视角传感器
0
|真正的标量
视觉传感器的滚动角度,指定为实标量。滚动角度是视觉传感器的下距轴围绕的旋转角度x自我车辆坐标系的-轴。正面的滚转角度相当于顺时针方向的旋转x坐标系的-轴。单位以度为单位。
例子:4
数据类型:双
intrinsic
- - - - - -视觉传感器的固有标定参数
cameraIntrinsics([800 800],[320 240],[480 640])
(默认)|cameraIntrinsics
对象
视觉传感器的固有校准参数,具体为cameraIntrinsics
对象。
FieldOfView
- - - - - -视觉传感器的角视场
实值1乘2的正向量
此属性是只读的。
视觉传感器的角视场,指定为实值1乘2的正矢量,[azfov, elfov]
.视场定义了传感器图像的方位角和仰角范围。每个分量必须在0度到180度的区间内。视场是由视觉传感器的固有参数推导出来的。传感器角视场以外的目标不被检测到。单位以度为单位。
数据类型:双
MaxRange
- - - - - -最大探测距离
150
|积极的真正的标量
最大检测范围,指定为正实标量。传感器无法探测到超出这个范围的目标。单位是米。
例子:200
数据类型:双
MaxSpeed
- - - - - -最大可检测物体速度
One hundred.
(默认)|非负实数
可检测到的最大物体速度,指定为非负实标量。单位是米每秒。
例子:10.0
数据类型:双
MaxAllowedOcclusion
- - - - - -物体允许的最大遮挡
0.5
(默认)|(0 1]范围内的实标量
对象允许的最大遮挡,指定为范围[0 1]中的实标量。遮挡是一个物体的总表面积的一部分,不可见的传感器。值为1表示对象被完全遮挡。单位是无量纲。
例子:0.2
数据类型:双
DetectionProbability
- - - - - -检测概率
0.9
(默认)|正实标量小于等于1
探测到目标的概率,指定为小于或等于1的正实标量。这个量定义了传感器检测到可检测物体的概率。一个可检测的对象是满足最小可检测尺寸、最大范围、最大速度和最大允许遮挡约束的对象。
例子:0.95
数据类型:双
FalsePositivesPerImage
- - - - - -每张图像的误检数
0.1
(默认)|非负实数
视觉传感器为每个图像生成的错误检测数,指定为非负实标量。
例子:2
数据类型:双
MinObjectImageSize
- - - - - -可检测物体的最小图像大小
(15 15)
(默认)|1 × 2的正向量
视觉传感器在图像中检测到的对象的最小高度和宽度,指定为[minHeight, minWidth]
正的向量。物体的二维投影高度必须大于或等于minHeight
.物体的投影宽度必须大于或等于minWidth
.单位以像素为单位。
例子:30 [20]
数据类型:双
BoundingBoxAccuracy
- - - - - -边界框的准确性
5
(默认)|积极的真正的标量
边界框精度,指定为正实标量。这个量定义了检测器将边界框与目标匹配的精确度。单位以像素为单位。
例子:4
数据类型:双
ProcessNoiseIntensity
- - - - - -用于滤波位置和速度测量的噪声强度
5
(默认)|积极的真正的标量
用于滤波位置和速度测量的噪声强度,指定为正实标量。噪声强度定义了视觉传感器中使用的内恒速卡尔曼滤波器过程噪声的标准差。该滤波器使用分段常数白噪声加速模型对过程噪声进行建模。噪声强度通常与目标预期的最大加速度量级相同。单位为m/s2.
例子:2.5
数据类型:双
HasNoise
- - - - - -允许在视觉传感器测量中添加噪声
真正的
(默认)|假
允许向视觉传感器测量添加噪声,指定为真正的
或假
.将此属性设置为真正的
为传感器测量增加噪声。否则,测量没有噪声。即使你设置了HasNoise
来假
,对象仍然计算MeasurementNoise
每个检测的属性。
数据类型:逻辑
MaxNumDetectionsSource
- - - - - -报告的最大检测数量的来源
“汽车”
(默认)|“属性”
传感器报告的最大检测数的来源,指定为“汽车”
或“属性”
.当此属性设置为“汽车”
,传感器报告所有检测。当此属性设置为“属性”
时,传感器报告的检测次数不超过MaxNumDetections
财产。
数据类型:字符
|字符串
MaxNumDetections
- - - - - -报告的最大检测数
50
(默认)|正整数
传感器报告的最大检测数,指定为正整数。报告最接近传感器的检测结果。
依赖关系
要启用此属性,请设置MaxNumDetectionsSource
财产“属性”
.
数据类型:双
DetectionCoordinates
- - - - - -报告检测的坐标系统
“自我笛卡儿”
(默认)|传感器笛卡儿的
报告检测的坐标系统,指定为以下值之一:
“自我笛卡儿”
-检测报告在自我载具笛卡尔坐标系。传感器笛卡儿的
-检测报告在传感器笛卡尔坐标系。
数据类型:字符
|字符串
LaneUpdateInterval
- - - - - -车道检测更新之间所需的时间间隔
0.1
(默认)|积极的真正的标量
车道检测更新之间的所需时间间隔,指定为正实标量。的drivingScenario
对象以固定的时间间隔调用视觉检测生成器。视觉检测器按此属性定义的间隔生成新的车道检测,该属性必须是模拟时间间隔的整数倍。更新间隔之间从传感器请求的更新不包含车道检测。单位以秒为单位。
例子:0.4
数据类型:双
MinLaneImageSize
- - - - - -图像中的最小车道大小
20 [5]
(默认)|1×2实值向量
在考虑曲率后,传感器可以检测到的投影车道标记的最小尺寸,指定为1 × 2实值向量,[minHeight minWidth]
.车道标识必须超过这两个值才能被检测到。此属性仅在检测车道时使用。单位以像素为单位。
例子:(5、7)
数据类型:双
LaneBoundaryAccuracy
- - - - - -行车线界线的准确性
3.
|积极的真正的标量
车道边界的精确度,指定为正实标量。此属性定义车道传感器放置车道边界的精确度。单位以像素为单位。此属性仅在检测车道时使用。
MaxNumLanesSource
- - - - - -报告的最大车道数的来源
“属性”
(默认)|“汽车”
报告的最大车道数的来源,指定为“汽车”
或“属性”
.当指定为“汽车”
时,自动计算最大行车线数。当指定为“属性”
,可以使用MaxNumLanes
属性设置最大通道数或通道数。
数据类型:字符
|字符串
MaxNumLanes
- - - - - -报告的最大车道数
30.
(默认)|正整数
报告的最大通道数,指定为正整数。
依赖关系
要启用此属性,请设置MaxNumLanesSource
财产“属性”
.
数据类型:字符
|字符串
ActorProfiles
- - - - - -演员简介
结构|数组的结构
参与者配置文件,指定为结构或结构数组。每个结构都包含一个参与者的物理和雷达特征。
如果
ActorProfiles
是不是一个单一的结构,所有的参与者都传递到visionDetectionGenerator
对象使用此配置文件。如果
ActorProfiles
是一个数组,传入对象的每个参与者必须具有唯一的参与者配置文件。
要为您的驾驶场景生成结构数组,请使用actorProfiles
函数。该表显示了有效的结构字段。如果您不指定一个字段,该字段将被设置为其默认值。如果没有将参与者传递到对象中,则ActorID
字段不包括在内。
场 | 描述 |
---|---|
ActorID |
场景定义的参与者标识符,指定为正整数。 |
ClassID |
分类标识符,指定为非负整数。0 为未知或未赋值类的对象保留。 |
长度 |
actor的长度,指定为正实标量。默认值是4.7 .单位是米。 |
宽度 |
actor的宽度,指定为正实标量。默认值是1.8 .单位是米。 |
高度 |
actor的高度,指定为正实标量。默认值是1.4 .单位是米。 |
OriginOffset |
动作者的旋转中心与几何中心的偏移量,用[表示xyz实值向量。旋转中心,或原点,位于演员的底部中心。对于车辆来说,旋转中心是后轴中心下方的地面点。默认值是 |
RCSPattern |
行动者的雷达横截面图,指定为元素个数(RCSElevationAngles) ——- - - - - -元素个数(RCSAzimuthAngles) 实值矩阵。默认值是[10 10;10 10] .单位为分贝每平方米。 |
RCSAzimuthAngles |
方位角对应行RCSPattern ,指定为范围为[-180,180]的实数向量。默认值是(-180 180) .单位以度为单位。 |
RCSElevationAngles |
仰角对应行RCSPattern ,指定为范围为[- 90,90]的实值向量。默认值是(-90 90) .单位以度为单位。 |
使用
语法
描述
生成车道检测,lanedets
=传感器(laneboundaries
,时间
)lanedets
,从车道边界结构,laneboundaries
.
启用此语法集DetectionOutput
来“只道”
.类指定的间隔生成车道边界LaneUpdateInterval
财产。
生成车道检测,lanedets
=传感器(演员
,laneboundaries
,时间
)lanedets
,从车道边界结构,laneboundaries
.
若要启用此语法,请设置DetectionOutput
来“道与阻塞”
.类指定的间隔生成车道边界LaneUpdateInterval
财产。
[___,
也返回已报告的有效检测数,numValidDets
) =传感器(___)numValidDets
.
[___,
也返回一个逻辑值,numValidDets
isValidTime
) =传感器(___)isValidTime
,表示UpdateInterval
生成检测的时间已经过去了。
[
返回两个对象检测,依据
,numValidDets
,isValidTime
,lanedets
,numValidLaneDets
,isValidLaneTime
) =传感器(演员
,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
财产“只将对象”
,“道与阻塞”
,或车道和对象的
.
laneboundaries
- - - - - -车道边界
车道边界结构阵列
车道边界,指定为车道边界结构的数组。下表显示了每个结构的字段。
场 | 描述 |
|
车道边界坐标,指定为实值N3矩阵,N为车道边界坐标的个数。车道边界坐标定义了沿道路中心,在距离自我车辆指定纵向距离的边界上的点的位置。
这个矩阵还包括与自我载具零距离处的边界坐标。这些坐标位于自我车辆原点的左右,原点位于后桥中心下方。单位是米。 |
|
车道边界的每一行都有曲率坐标 矩阵,指定为实值N1的向量。N为车道边界坐标的个数。单位是弧度每米。 |
|
每一行的车道边界曲率的导数坐标 矩阵,指定为实值N1的向量。N为车道边界坐标的个数。单位是弧度每平方米。 |
|
初始车道边界航向角,指定为实标量。车道边界的朝向角度与自我车辆的朝向是相对的。单位以度为单位。 |
|
自我车辆位置从车道边界的横向偏移量,指定为实标量。对自我车辆左侧车道边界的偏移量为正。自我载体右侧的偏移量是负的。单位是米。在这幅图中,自我车辆距离左车道1.5米,距离右车道2.1米。 |
|
车道界线标记的类型,指定为以下值之一:
|
|
车道边界标记的饱和强度,指定为从0到1的实标量。的值 |
|
车道边界宽度,指定为正实标量。在双线车道标志中,两条线和线与线之间的间距使用相同的宽度。单位是米。 |
|
虚线中的虚线长度,指定为正实标量。在双线车道标志中,两条线的长度相同。 |
|
虚线中虚线之间的空格长度,指定为正实标量。在虚线双线车道标记中,两条线使用相同的空间。 |
依赖关系
要启用此参数,请设置DetectorOutput
财产“只道”
,“道与阻塞”
,或车道和对象的
.
数据类型:结构体
时间
- - - - - -当前仿真时间
积极的真正的标量
当前模拟时间,指定为正实标量。的drivingScenario
对象以固定的时间间隔调用视觉检测生成器。方法定义的间隔内视觉检测器生成新的检测UpdateInterval
财产。的值UpdateInterval
而且LanesUpdateInterval
属性必须是模拟时间间隔的整数倍。更新间隔之间从传感器请求的更新不包含检测。单位以秒为单位。
例子:10.5
数据类型:双
输出参数
依据
- - - - - -对象检测
单元阵列的objectDetection
对象
的单元格数组返回的对象检测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 ,从而产生了检测结果。对于误报,该值为负。 |
numValidDets
-检测次数
非负整数
返回的检测数,定义为非负整数。
当
MaxNumDetectionsSource
属性设置为“汽车”
,numValidDets
的长度依据
.当
MaxNumDetectionsSource
被设置为“属性”
,依据
单元格数组的长度是否由MaxNumDetections
财产。不超过MaxNumDetections
返回的检测数。如果检测数小于MaxNumDetections
,第一个numValidDets
的元素依据
持有有效的检测。剩下的元素依据
设置为默认值。
.
数据类型:双
isValidTime
-有效检测时间
0
|1
有效的检测时间,返回为0
或1
.isValidTime
是0
所指定的更新间隔之间请求检测更新时UpdateInterval
.
数据类型:逻辑
lanedets
-车道边界检测
车道边界检测结构
车道边界检测,作为数组结构返回。该结构的字段为:
车道边界检测结构
场 | 描述 |
时间 |
车道检测时间 |
SensorIndex |
传感器唯一标识符 |
LaneBoundaries |
的数组clothoidLaneBoundary 对象。 |
numValidLaneDets
-检测次数
非负整数
返回的车道检测数,定义为非负整数。
当
MaxNumLanesSource
属性设置为“汽车”
,numValidLaneDets
的长度lanedets
.当
MaxNumLanesSource
被设置为“属性”
,lanedets
单元格数组的长度是否由MaxNumLanes
财产。不超过MaxNumLanes
返回的车道检测数。如果检测数小于MaxNumLanes
,第一个numValidLaneDetections
的元素lanedets
保持有效的车道检测。剩下的元素lanedets
设置为默认值。
.
数据类型:双
isValidLaneTime
-有效的车道检测时间
0
|1
有效的车道检测时间,返回为0
或1
.isValidLaneTime
是0
所指定的更新间隔之间请求车道检测更新时LaneUpdateInterval
.
数据类型:逻辑
对象的功能
要使用对象函数,请将System对象指定为第一个输入参数。例如,释放名为obj
,使用以下语法:
发行版(obj)
例子
生成多个车辆的视觉检测
使用安装在自我车辆上的前向汽车视觉传感器生成检测。假设有两个目标车辆:
载体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)结束
从单目相机生成视觉检测
通过使用单目相机配置创建视觉传感器,并从该传感器生成检测。
指定相机的内在参数并创建一个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))
从自我车辆的角度获得目标车辆的姿态。使用这些姿势从传感器生成检测。
提出了= targetPoses (egoVehicle);[侦破,numValidDets] = visionSensor(姿势,scenario.SimulationTime);
显示(X,Y)有效检测的位置。对于每次检测,(X,Y的前两个值测量
字段。
为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);
运行仿真。
创建一个鸟瞰图和相关的绘图仪。
显示传感器覆盖区域。
显示车道标记。
获得道路上目标的地面真实姿态。
在前方60米内取得理想的行车界线点。
从理想的目标姿态和车道边界生成检测。
显示目标的轮廓。
当对象检测有效时显示对象检测。
车道检测有效时显示车道边界。
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,“颜色”、颜色)
创建一个理想的视觉传感器
方法创建视觉传感器visionDetectionGenerator
系统对象™。要生成理想的检测,设置DetectionProbability
来1
,FalsePositivesPerImage
来0
,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);
模拟理想的视觉检测
获取目标的位置。位置在自我交通工具的坐标里。
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 *浸)
模拟噪声检测进行比较
基于理想传感器的特性创建一个噪声传感器。
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)
算法
视觉传感器模拟一个单眼相机,产生二维相机图像。为了将这些2-D图像的坐标投影到用于驾驶场景的3-D世界坐标中,传感器算法假设z-目标图像边界框底边缘所有图像点的位置(高度)在地面上。定义地面的平面是由视觉检测发生器的高度属性定义的,它定义了单目相机在地平面以上的偏移量。通过这种投影,生成的图像中物体的垂直位置与它们在道路上方的高度密切相关。然而,如果道路不平坦,物体的高度与传感器的高度不一致,那么传感器报告的检测不准确。有关显示此行为的示例,请参见模型视觉传感器检测.
扩展功能
C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
对于独立部署,
visionDetectionGenerator
系统对象只支持万博1manbetx万博1manbetx仿真软件实时™目标。看到MATLAB代码生成中的系统对象(MATLAB编码器).
版本历史
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。