Сгенерируйте обнаружения зрения для сценария вождения
The visionDetectionGenerator
Система object™ генерирует обнаружения от монокулярного датчика камеры, установленного на автомобиль , оборудованный датчиком. Все обнаружения ссылаются на систему координат автомобиля , оборудованного датчиком или датчика, установленного на транспортном средстве. Можно использовать visionDetectionGenerator
объект в сценарии, содержащем актёров и траектории, которые можно создать с помощью drivingScenario
объект. Используя статистический режим, генератор может симулировать реальные обнаружения с добавлением случайного шума, а также генерировать ложные обнаружения предупреждений. В сложение можно использовать visionDetectionGenerator
объект, чтобы создать вход в multiObjectTracker
. При построении сценариев с помощью приложения Driving Scenario Designer, датчики камеры, установленные на автомобиль , оборудованный датчиком, выводятся следующим visionDetectionGenerator
объекты.
Чтобы сгенерировать визуальные обнаружения:
Создайте visionDetectionGenerator
Объекту и установите его свойства.
Вызывайте объект с аргументами, как будто это функция.
Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».
создает объект генератора обнаружения видения со значениями свойств по умолчанию.sensor
= visionDetectionGenerator
создает объект генератора обнаружения зрения с помощью sensor
= visionDetectionGenerator(cameraConfig
)monoCamera
объект строения, cameraConfig
.
устанавливает свойства с помощью одной или нескольких пар "имя-значение". Для примера, sensor
= visionDetectionGenerator(Name,Value
)visionDetectionGenerator('DetectionCoordinates','Sensor Cartesian','MaxRange',200)
создает генератор обнаружения зрения, который сообщает о обнаружениях в Декартовой системе координат датчика и имеет максимальную область значений обнаружения 200 метров. Заключайте каждое имя свойства в кавычки.
Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release
функция разблокирует их.
Если свойство настраивается, можно изменить его значение в любой момент.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.
DetectorOutput
- Типы обнаружений, генерируемых датчиком'Objects only'
(по умолчанию) | 'Lanes only'
| 'Lanes with occlusion'
| 'Lanes and objects'
Типы обнаружений, генерируемых датчиком, заданные как 'Objects only'
, 'Lanes only'
, 'Lanes with occlusion'
, или 'Lanes and objects'
.
Когда установлено значение 'Objects only'
Обнаруживаются только актёры.
Когда установлено значение 'Lanes only'
Обнаруживаются только полосы.
Когда установлено значение 'Lanes with occlusion'
обнаруживаются только дорожки, но актёры в поле зрения камеры могут ухудшить способность датчика обнаруживать дорожки.
Когда установлено значение 'Lanes and objects'
датчик генерирует как обнаружение объектов, так и обнаружение окклюдированных маршрутов.
Пример: 'Lanes with occlusion'
Типы данных: char
| string
SensorIndex
- Уникальный идентификатор датчикаУникальный идентификатор датчика, заданный как положительное целое число. Это свойство отличает обнаружения, которые поступают от разных датчиков в мультисенсорной системе.
Пример: 5
Типы данных: double
UpdateInterval
- Необходимый временной интервал между обновлениями датчика0.1
| положительный действительный скалярНеобходимый временной интервал между обновлениями датчика, заданный как положительный действительный скаляр. The drivingScenario
объект вызывает генератор обнаружения зрения через регулярные временные интервалы. Детектор зрения генерирует новые обнаружения с интервалами, заданными UpdateInterval
свойство. Значение UpdateInterval
свойство должно быть целым числом, кратным временному интервалу симуляции. Обновления, запрошенные у датчика между интервалами обновления, не содержат обнаружений. Модули указаны в секундах.
Пример: 5
Типы данных: double
SensorLocation
- Расположение датчика[3.4 0]
| [x y]
векторРасположение центра датчика зрения, заданное как [x y]
. The SensorLocation
и Height
свойства определяют координаты датчика зрения относительно системы координат автомобиль , оборудованный датчиком. Значение по умолчанию соответствует переднему датчику, установленному на транспортное средство приборной панели. Модули измерения указаны в метрах.
Пример: [4 0.1]
Типы данных: double
Height
- Высота датчика над плоскостью земли1.1
| положительный действительный скалярВысота датчика над плоскостью земли транспортного средства, заданная как положительный действительный скаляр. Значение по умолчанию соответствует переднему датчику зрения, установленному на приборной панели седана. Модули измерения указаны в метрах.
Пример: 1.5
Типы данных: double
Yaw
- Угол рыскания датчика зрения0
| действительный скалярУгол рыскания датчика зрения, заданный как действительный скаляр. Угол рыскания является углом между центральной линией автомобиля , оборудованного датчиком и осью нижнего диапазона датчика зрения. Положительный угол рыскания соответствует повороту по часовой стрелке при взгляде в положительном направлении оси z системы координат автомобиль , оборудованный датчиком. Модули указаны в степенях.
Пример: -4
Типы данных: double
Pitch
- Угол тангажа датчика зрения0
| действительный скалярУгол тангажа датчика зрения, заданный как действительный скаляр. Угол тангажа является углом между осью нижнего диапазона датчика зрения и плоскостью x-y системы координат автомобиля , оборудованного датчиком. Положительный угол тангажа соответствует повороту по часовой стрелке при взгляде в положительном направлении оси y системы координат автомобиль , оборудованный датчиком. Модули указаны в степенях.
Пример: 3
Типы данных: double
Roll
- Угол наклона датчика зрения0
| действительный скалярУгол крена датчика зрения, заданный как действительный скаляр. Угол крена является углом поворота оси нижнего диапазона датчика зрения вокруг x оси системы координат автомобиль , оборудованный датчиком. Положительный угол крена соответствует повороту по часовой стрелке при взгляде в положительном направлении оси x системы координат. Модули указаны в степенях.
Пример: -4
Типы данных: double
Intrinsics
- Собственные калибровочные параметры датчика зренияcameraIntrinsics([800 800],[320 240],[480 640])
(по умолчанию) | cameraIntrinsics
объектСобственные калибровочные параметры датчика зрения, заданные как cameraIntrinsics
объект.
FieldOfView
- Угловое поле зрения датчика зренияЭто свойство доступно только для чтения.
Угловое поле зрения датчика зрения, заданное как действительный вектор 1 на 2 положительных значений, [azfov,elfov]
. Поле зрения задает азимут и пределы повышения изображения датчика. Каждый компонент должен лежать в интервале от 0 степеней до 180 степеней. Поле зрения определяется внутренними параметрами датчика зрения. Цели вне углового поля зрения датчика не обнаруживаются. Модули указаны в степенях.
Типы данных: double
MaxRange
- Максимальная область значений обнаружения150
| положительный действительный скалярМаксимальная область значений обнаружения, заданный как положительный действительный скаляр. Датчик не может обнаружить цель за пределами этой области значений. Модули измерения указаны в метрах.
Пример: 200
Типы данных: double
MaxSpeed
- Максимальная обнаруживаемая скорость объекта100
(по умолчанию) | неотрицательным вещественным скаляромМаксимальная обнаруживаемая скорость объекта, заданная как неотрицательный действительный скаляр. Модули указаны в метрах в секунду.
Пример: 10.0
Типы данных: double
MaxAllowedOcclusion
- Максимально допустимая окклюзия объекта0.5
(по умолчанию) | действительный скаляр в области значений (0 1]Максимально допустимая окклюзия объекта, заданная как действительный скаляр в области значений [0 1]. Окклюзия является частью общей площади поверхности объекта, не видимой датчику. Значение единицы указывает, что объект полностью закрыт. Модули безразмерны.
Пример: 0.2
Типы данных: double
DetectionProbability
- Вероятность обнаружения0.9
(по умолчанию) | положительный действительный скаляр, меньше или равный 1Вероятность обнаружения цели, заданная как положительный действительный скаляр, меньше или равный 1. Эта величина определяет вероятность того, что датчик обнаруживает обнаруживаемый объект. A detectable object является объектом, который удовлетворяет минимальному обнаруживаемому размеру, максимальной области значений, максимальной скорости и максимально допустимым ограничениям окклюзии.
Пример: 0.95
Типы данных: double
FalsePositivesPerImage
- Количество ложных обнаружений на изображение0.1
(по умолчанию) | неотрицательным вещественным скаляромКоличество ложных обнаружений, которые генерирует датчик зрения для каждого изображения, заданное как неотрицательный действительный скаляр.
Пример: 2
Типы данных: double
MinObjectImageSize
- Минимальный размер изображения обнаруживаемого объекта[15 15]
(по умолчанию) | вектор 1 на 2 положительных значенийМинимальная высота и ширина объекта, который обнаруживает датчик зрения в изображении, заданные как [minHeight,minWidth]
вектор положительных значений. 2-D проекционная высота объекта должна быть больше или равной minHeight
. Проективная ширина объекта должна быть больше или равной minWidth
. Модули указаны в пикселях.
Пример: [30 20]
Типы данных: double
BoundingBoxAccuracy
- Точность ограничивающего прямоугольника5
(по умолчанию) | положительный действительный скалярТочность ограничивающего прямоугольника, заданная как положительный действительный скаляр. Эта величина определяет точность, с которой детектор может соответствовать ограничивающему прямоугольнику с целью. Модули указаны в пикселях.
Пример: 4
Типы данных: double
ProcessNoiseIntensity
- Интенсивность шума, используемая для фильтрации измерений положения и скорости5
(по умолчанию) | положительный действительный скалярИнтенсивность шума, используемая для фильтрации измерений положения и скорости, заданная как положительный действительный скаляр. Интенсивность шума определяет стандартное отклонение технологического шума внутреннего фильтра Калмана с постоянной скоростью, используемого в датчике зрения. Фильтр моделирует шум процесса с помощью кусочно-постоянной модели ускорения белого шума. Интенсивность шума обычно составляет порядок максимальной величины ускорения, ожидаемой для цели. Модули измерения указаны в м/с2.
Пример: 2.5
Типы данных: double
HasNoise
- Позволяет добавить шум к измерениям датчика зренияtrue
(по умолчанию) | false
Включите добавление шума к измерениям датчика зрения, заданным как true
или false
. Установите это свойство на true
чтобы добавить шум к измерениям датчика. В противном случае измерения не имеют шума. Даже если вы задаете HasNoise
на false
объект все еще вычисляет MeasurementNoise
свойство каждого обнаружения.
Типы данных: logical
MaxNumDetectionsSource
- Источник максимального количества зарегистрированных обнаружений'Auto'
(по умолчанию) | 'Property'
Источник максимального количества обнаружений, сообщаемых датчиком, указанный как 'Auto'
или 'Property'
. Когда для этого свойства задано значение 'Auto'
, датчик сообщает обо всех обнаружениях. Когда для этого свойства задано значение 'Property'
, датчик сообщает не больше, чем количество обнаружений, заданных MaxNumDetections
свойство.
Типы данных: char
| string
MaxNumDetections
- Максимальное количество зарегистрированных обнаружений50
(по умолчанию) | положительное целое числоМаксимальное количество обнаружений, сообщенных датчиком, заданное в виде положительного целого числа. Сообщается об обнаружениях, ближайших к датчику.
Чтобы включить это свойство, установите MaxNumDetectionsSource
свойство к 'Property'
.
Типы данных: double
DetectionCoordinates
- Система координат сообщаемых обнаружений'Ego Cartesian'
(по умолчанию) | 'Sensor Cartesian'
Система координат сообщаемых обнаружений, заданная в качестве одного из следующих значений:
'Ego Cartesian'
- Обнаружения регистрируются в Декартовой системе координат автомобиль , оборудованный датчиком.
'Sensor Cartesian'
- Обнаружения регистрируются в Декартовой системе координат датчика.
Типы данных: char
| string
LaneUpdateInterval
- Необходимый временной интервал между обновлениями обнаружения маршрута0.1
(по умолчанию) | положительный действительный скалярНеобходимый временной интервал между обновлениями обнаружения маршрута, заданный как положительный действительный скаляр. The drivingScenario
объект вызывает генератор обнаружения зрения через регулярные временные интервалы. Детектор зрения генерирует новые обнаружения маршрута через интервалы, заданные этим свойством, которые должны быть целым числом, кратным временному интервалу симуляции. Обновления, запрошенные у датчика между интервалами обновления, не содержат обнаружений маршрута. Модули указаны в секундах.
Пример: 0.4
Типы данных: double
MinLaneImageSize
- Минимальный размер маршрута на изображении[20 5]
(по умолчанию) | вектор с реальным значением 1 на 2Минимальный размер проективной разметки маршрута, которая может быть обнаружена датчиком после учета кривизны, заданный как вектор с реальным значением 1 на 2, [minHeight minWidth]
. Маркировка маршрута должна превышать оба этих значения, которые должны быть обнаружены. Это свойство используется только при обнаружении полос движения. Модули указаны в пикселях.
Пример: [5,7]
Типы данных: double
LaneBoundaryAccuracy
- Точность контуров маршрута3
| положительный действительный скалярТочность контуров маршрута, заданная как положительный действительный скаляр. Это свойство определяет точность, с которой датчик маршрута может разместить контур маршрута. Модули указаны в пикселях. Это свойство используется только при обнаружении полос движения.
MaxNumLanesSource
- Источник максимального количества сообщаемых полос движения'Property'
(по умолчанию) | 'Auto'
Источник максимального количества сообщаемых полос движения, указанный как 'Auto'
или 'Property'
. Если задано как 'Auto'
, максимальное количество полос вычисляется автоматически. Если задано как 'Property'
, используйте MaxNumLanes
свойство, чтобы задать максимальное количество или полосы.
Типы данных: char
| string
MaxNumLanes
- Максимальное количество сообщаемых полос движения30
(по умолчанию) | положительное целое числоМаксимальное количество зарегистрированных полос в виде положительного целого числа.
Чтобы включить это свойство, установите MaxNumLanesSource
свойство к 'Property'
.
Типы данных: char
| string
ActorProfiles
- Профили актёраПрофили актёра, заданные как структура или как массив структур. Каждая структура содержит физические и радиолокационные характеристики актёра.
Если ActorProfiles
является единой структурой, все актёры перешли в visionDetectionGenerator
Объект используете этот профиль.
Если ActorProfiles
является массивом, каждый актёр, переданный в объект, должен иметь уникальный профиль актёра.
Чтобы сгенерировать массив структур для вашего сценария вождения, используйте actorProfiles
функция. В таблице показаны допустимые структурные поля. Если вы не задаете поле, это поле устанавливается на его значение по умолчанию. Если в объект не передаются актёры, то ActorID
поле не включено.
Область | Описание |
---|---|
ActorID | Определяемый сценарием идентификатор актёра, заданный как положительное целое число. |
ClassID | Идентификатор классификации, заданный как неотрицательное целое число. 0 зарезервирован для объекта неизвестного или неназначенного класса. |
Length | Длина актёра, заданная как положительный действительный скаляр. Значение по умолчанию является 4.7 . Модули измерения указаны в метрах. |
Width | Ширина актёра, заданная как положительный действительный скаляр. Значение по умолчанию является 1.8 . Модули измерения указаны в метрах. |
Height | Высота актёра, заданная как положительный действительный скаляр. Значение по умолчанию является 1.4 . Модули измерения указаны в метрах. |
OriginOffset | Смещение вращательного центра актёра от его геометрического центра, заданное как [x
y z] вектор с реальным значением. Центр вращения, или
источник, расположен в нижнем центре актёра. Для транспортных средств центр вращения является точкой на земле под центром задней оси. Значение по умолчанию является [0 0 0] |
RCSPattern | Радиолокационные шаблоны поперечного сечения актёра, заданные как numel(RCSElevationAngles) -by- numel(RCSAzimuthAngles) матрица с реальным значением. Значение по умолчанию является [10 10; 10 10] . Модули указаны в децибелах на квадратный метр. |
RCSAzimuthAngles | Азимутальные углы, соответствующие строкам RCSPattern , заданный как вектор вещественных значений в области значений [-180, 180]. Значение по умолчанию является [-180 180] . Модули указаны в степенях. |
RCSElevationAngles | Углы возвышения, соответствующие строкам RCSPattern , заданный как вектор вещественных значений в области значений [-90, 90]. Значение по умолчанию является [-90 90] . Модули указаны в степенях. |
Полные определения структурных полей см. в разделе actor
и vehicle
функций.
создает визуальные обнаружения, dets
= sensor(actors
,time
)dets
, от измерений датчика, выполненных из actors
в текущей симуляции time
. Объект может генерировать обнаружения датчиков для нескольких актёров одновременно. Не включать автомобиля , оборудованного датчиком в качестве одного из актёров.
Чтобы включить этот синтаксис, задайте DetectionOutput
на 'Objects only'
.
генерирует обнаружения маршрута, lanedets
= sensor(laneboundaries
,time
)lanedets
, от краевых конструкций маршрута, laneboundaries
.
Чтобы включить этот синтаксис набора DetectionOutput
на 'Lanes only'
. Детектор маршрута генерирует контуры маршрута с интервалами, заданными LaneUpdateInterval
свойство.
генерирует обнаружения маршрута, lanedets
= sensor(actors
,laneboundaries
,time
)lanedets
, от краевых конструкций маршрута, laneboundaries
.
Чтобы включить этот синтаксис, задайте DetectionOutput
на 'Lanes with occlusion'
. Детектор маршрута генерирует контуры маршрута с интервалами, заданными LaneUpdateInterval
свойство.
[___,
также возвращает количество зарегистрированных допустимых обнаружений, numValidDets
]
= sensor(___)numValidDets
.
[___,
также возвращает логическое значение, numValidDets
isValidTime
]
= sensor(___)isValidTime
, что указывает на то, что UpdateInterval
Прошло время для генерации обнаружений.
[
возвращает оба обнаружения объектов, dets
,numValidDets
,isValidTime
,lanedets
,numValidLaneDets
,isValidLaneTime
] = sensor(actors
,laneboundaries
,time
)dets
, и обнаружения маршрута lanedets
. Этот синтаксис также возвращает количество зарегистрированных допустимых обнаружений маршрута numValidLaneDets
, и флаг, isValidLaneTime
, что указывает, прошло ли необходимое время симуляции для генерации обнаружений маршрута.
Чтобы включить этот синтаксис, задайте DetectionOutput
на 'Lanes and objects'
.
actors
- Сценарные положения актёраПоложения актёра сценария, заданные как структура или массив структур. Каждая структура соответствует актёру. Вы можете сгенерировать эту структуру с помощью actorPoses
функция. Можно также создать эти структуры вручную. Таблица показывает поля, которые объект использует для генерации обнаружений. Все другие поля игнорируются.
Область | Описание |
---|---|
ActorID | Определяемый сценарием идентификатор актёра, заданный как положительное целое число. |
Position | Положение актёра, заданное как действительный вектор вида [x y z]. Модули измерения указаны в метрах. |
Velocity | Скорость (<reservedrangesplaceholder9>) актера в x - y - и z - направления, определенные как вектор с реальным знаком формы [<<reservedrangesplaceholder5> <reservedrangesplaceholder4> <reservedrangesplaceholder3> <reservedrangesplaceholder2> <reserved angesplaceholder1> <reservedrangesplaceholder0> ]. Модули указаны в метрах в секунду. |
Roll | Угол крена актёра, заданный как действительный скаляр. Модули указаны в степенях. |
Pitch | Угол тангажа актёра, заданный как действительный скаляр. Модули указаны в степенях. |
Yaw | Угол рыскания актёра, заданный как реальный скаляр. Модули указаны в степенях. |
AngularVelocity | Скорость вращения (<reservedrangesplaceholder9>) актера в x - y - и z - направления, определенные как вектор с реальным знаком формы [<<reservedrangesplaceholder5> <reservedrangesplaceholder4> <reservedrangesplaceholder3> <reservedrangesplaceholder2> <reserved angesplaceholder1> <reservedrangesplaceholder0> ]. Модули указаны в степенях в секунду. |
Полные определения структурных полей см. в разделе actor
и vehicle
функций.
Чтобы включить этот аргумент, установите DetectorOutput
свойство к 'Objects only'
, 'Lanes with occlusion'
, или 'Lanes and objects'
.
laneboundaries
- контуры маршрутаКонтуры маршрута, заданные как массив контурных структур маршрута. В таблице показаны поля для каждой структуры.
Область | Описание |
| Координаты контура маршрута, заданные как матрица с реальным N -by-3, где N - количество координат контура маршрута. Координаты контура маршрута определяют положение точек на контур на заданных продольных расстояниях от автомобиля , оборудованного датчиком, вдоль центра дороги.
Эта матрица также включает координаты контура на нулевом расстоянии от автомобиля , оборудованного датчиком. Эти координаты расположены слева и справа от источника автомобиля , оборудованного датчиком, который расположен под центром задней оси. Модули измерения указаны в метрах. |
| Краевая кривизна маршрута в каждой строке Coordinates матрица, заданная как вектор с реальным N -by-1. N - количество координат контура маршрута. Модули указаны в радианах на метр. |
| Производная краевой кривизны маршрута в каждой строке Coordinates матрица, заданная как вектор с реальным N -by-1. N - количество координат контура маршрута. Модули указаны в радианах на квадратный метр. |
| Начальный угол рыскания контура маршрута, заданный как действительный скаляр. Угол рыскания контура маршрута соответствует курсу автомобиля , оборудованного датчиком. Модули указаны в степенях. |
| Расстояние между контуром маршрута и автомобиля , оборудованного датчиком положением задается как действительный скаляр. Смещение к контуру маршрута слева от автомобиля , оборудованного датчиком положительно. Смещение вправо от автомобиля , оборудованного датчиком отрицательное. Модули измерения указаны в метрах. |
| Тип разметки контура маршрута, заданный как одно из следующих значений:
|
| Сила насыщения разметки контура маршрута, заданная как действительный скаляр от 0 до 1. Значение |
| Контур маршрута, заданная как положительный действительный скаляр. В двухлинейном маркере маршрута одинаковая ширина используется для обеих линий и для пространства между линиями. Модули измерения указаны в метрах. |
| Длина штриха в штриховых линиях, заданная как положительный действительный скаляр. В двухлинейном маркере маршрута для обеих линий используется одинаковая длина. |
| Длина пространства между штрихами в штриховых линиях, заданная как положительный действительный скаляр. В штриховом двухлинейном маркере маршрута для обеих линий используется одно и то же пространство. |
Чтобы включить этот аргумент, установите DetectorOutput
свойство к 'Lanes only'
, 'Lanes with occlusion'
, или 'Lanes and objects'
.
Типы данных: struct
time
- Текущее время симуляцииВремя симуляции тока, заданное как положительный действительный скаляр. The drivingScenario
объект вызывает генератор обнаружения зрения через регулярные временные интервалы. Детектор зрения генерирует новые обнаружения с интервалами, заданными UpdateInterval
свойство. Значения UpdateInterval
и LanesUpdateInterval
свойства должны быть целым числом, кратным временному интервалу симуляции. Обновления, запрошенные у датчика между интервалами обновления, не содержат обнаружений. Модули указаны в секундах.
Пример: 10.5
Типы данных: double
dets
- Обнаружения объектовobjectDetection
объектыОбнаружения объектов, возвращенные как массив ячеек objectDetection
объекты. Каждый объект содержит следующие поля:
Свойство | Определение |
---|---|
Time | Время измерения |
Measurement | Измерения объекта |
MeasurementNoise | Матрица ковариации шума измерения |
SensorIndex | Уникальный идентификатор датчика |
ObjectClassID | Классификация объектов |
ObjectAttributes | Трекеру передана дополнительная информация |
MeasurementParameters | Параметры, используемые функциями инициализации нелинейных фильтров отслеживания Калмана |
Measurement
, MeasurementNoise
, и MeasurementParameters
сообщаются в системе координат, заданной DetectionCoordinates
свойство visionDetectionGenerator
.
Измерение
DetectionCoordinates Свойство | Координаты шума измерений и измерений |
---|---|
'Ego Cartesian' | [x;y;z;vx;vy;vz] |
'Sensor Cartesian' |
MeasurementParameters
Параметр | Определение |
---|---|
Frame | Перечисленный тип, указывающий на систему координат, используемую для сообщения измерений. Когда Frame установлено в 'rectangular' обнаружения сообщаются в Декартовых координатах. Когда Frame задан 'spherical' , о обнаружениях сообщают в сферических координатах. |
OriginPosition | 3-D векторы смещение источника датчика от автомобиля , оборудованного датчиком источника. Вектор получают из SensorLocation и Height свойства, указанные в visionDetectionGenerator . |
Orientation | Ориентация системы координат датчика зрения относительно системы координат автомобиль , оборудованный датчиком. Ориентация определяется из Yaw , Pitch , и Roll свойства visionDetectionGenerator . |
HasVelocity | Указывает, содержат ли измерения компоненты скорости или уровня области значений. |
ObjectAttributes
Признак | Определение |
---|---|
TargetIndex | Идентификатор актёра, ActorID , который сгенерировал обнаружение. Для ложных предупреждений это значение отрицательно. |
numValidDets
- Количество обнаруженийКоличество возвращенных обнаружений, заданное как неотрицательное целое число.
Когда MaxNumDetectionsSource
для свойства задано значение 'Auto'
, numValidDets
задается как длина dets
.
Когда MaxNumDetectionsSource
установлено в 'Property'
, dets
- массив ячеек с длиной, определяемой MaxNumDetections
свойство. Не более MaxNumDetections
возвращено количество обнаружений. Если количество обнаружений меньше MaxNumDetections
, первый numValidDets
элементы dets
хранить допустимые обнаружения. Остальные элементы dets
устанавливаются на значение по умолчанию.
.
Типы данных: double
isValidTime
- Допустимое время обнаружения0
| 1
Допустимое время обнаружения, возвращаемое как 0
или 1
. isValidTime
является 0
когда обновления обнаружения запрашиваются в моменты времени, которые находятся между интервалами обновления, заданными UpdateInterval
.
Типы данных: logical
lanedets
- Обнаружение контуров маршрутаОбнаружения контуров маршрута, возвращенные как структуры массива. Полями структуры являются:
Структура обнаружения контуров маршрута
Область | Описание |
Time | Время обнаружения маршрута |
SensorIndex | Уникальный идентификатор датчика |
LaneBoundaries | Массив clothoidLaneBoundary объекты. |
numValidLaneDets
- Количество обнаруженийКоличество возвращенных обнаружений маршрута, заданное как неотрицательное целое число.
Когда MaxNumLanesSource
для свойства задано значение 'Auto'
, numValidLaneDets
задается как длина lanedets
.
Когда MaxNumLanesSource
установлено в 'Property'
, lanedets
- массив ячеек с длиной, определяемой MaxNumLanes
свойство. Не более MaxNumLanes
возвращено количество обнаружений маршрута. Если количество обнаружений меньше MaxNumLanes
, первый numValidLaneDetections
элементы lanedets
удержание допустимых обнаружений маршрута. Остальные элементы lanedets
устанавливаются на значение по умолчанию.
.
Типы данных: double
isValidLaneTime
- Допустимое время обнаружения маршрута0
| 1
Допустимое время обнаружения маршрута, возвращаемое как 0
или 1
. isValidLaneTime
является 0
когда обновления обнаружения маршрута запрашиваются в моменты времени, которые находятся между интервалами обновления, заданными LaneUpdateInterval
.
Типы данных: logical
Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj
, используйте следующий синтаксис:
release(obj)
visionDetectionGenerator
isLocked | Определите, используется ли системный объект |
Сгенерируйте обнаружения с помощью направленного вперед автомобильного датчика зрения, установленного на автомобиль , оборудованный датчиком. Предположим, что существует два целевых транспортного средства:
Транспортное средство 1 находится непосредственно перед автомобилем , оборудованным датчиком и движется с той же скоростью.
Транспортное средство 2 транспортных средств движется быстрее, чем автомобиль , оборудованный датчиком на 12 км/ч в левой полосе.
Все положения, скорости и измерения соответствуют автомобилю , оборудованному датчиком. Запустите симуляцию в течение десяти шагов.
dt = 0.1; car1 = struct('ActorID',1,'Position',[100 0 0],'Velocity', [5*1000/3600 0 0]); car2 = struct('ActorID',2,'Position',[150 10 0],'Velocity',[12*1000/3600 0 0]);
Создайте автомобильный датчик зрения, имеющий смещение местоположения от автомобиля , оборудованного датчиком. По умолчанию расположение датчика находится в (3,4,0) метрах от центра транспортного средства и в 1,1 метрах от наземной плоскости.
sensor = visionDetectionGenerator('DetectionProbability',1, ... 'MinObjectImageSize',[5 5],'MaxRange',200,'DetectionCoordinates','Sensor Cartesian'); tracker = multiObjectTracker('FilterInitializationFcn',@initcvkf, ... 'ConfirmationParameters',[3 4],'NumCoastingUpdates',6);
Создавайте визуальные обнаружения для актёров, не являющихся эго, когда они перемещаются. Обнаружения выхода образуют массив ячеек. Извлеките только информацию о положении из обнаружений, чтобы передать в multiObjectTracker
, который ожидает только информацию о положении. Обновите трекер для каждого нового набора обнаружений.
simTime = 0; nsteps = 10; for k = 1:nsteps dets = sensor([car1 car2],simTime); n = size(dets,1); for k = 1:n meas = dets{k}.Measurement(1:3); dets{k}.Measurement = meas; measmtx = dets{k}.MeasurementNoise(1:3,1:3); dets{k}.MeasurementNoise = measmtx; end [confirmedTracks,tentativeTracks,allTracks] = updateTracks(tracker,dets,simTime); simTime = simTime + dt; car1.Position = car1.Position + dt*car1.Velocity; car2.Position = car2.Position + dt*car2.Velocity; end
Использование birdsEyePlot
для создания служебного представления обнаружений. Постройте график зоны покрытия датчика. Извлечь положения x и y целей путем преобразования Measurement
поля ячейки в массив MATLAB ®. Затем постройте график обнаружений с помощью birdsEyePlot
функций.
BEplot = birdsEyePlot('XLim',[0 220],'YLim',[-75 75]); caPlotter = coverageAreaPlotter(BEplot,'DisplayName','Vision Coverage Area'); plotCoverageArea(caPlotter,sensor.SensorLocation,sensor.MaxRange, ... sensor.Yaw,sensor.FieldOfView(1)) detPlotter = detectionPlotter(BEplot,'DisplayName','Vision Detections'); detPos = cellfun(@(d)d.Measurement(1:2),dets,'UniformOutput',false); detPos = cell2mat(detPos')'; if ~isempty(detPos) plotDetection(detPlotter,detPos) end
Создайте датчик зрения с помощью монокулярного строения камеры и сгенерируйте обнаружения от этого датчика.
Задайте собственные параметры камеры и создайте monoCamera
объект из этих параметров. Камера установлена на верхнюю часть автомобиля , оборудованного датчиком на высоте 1,5 метра над землей и тангажом 1 степени к земле.
focalLength = [800 800];
principalPoint = [320 240];
imageSize = [480 640];
intrinsics = cameraIntrinsics(focalLength,principalPoint,imageSize);
height = 1.5;
pitch = 1;
monoCamConfig = monoCamera(intrinsics,height,'Pitch',pitch);
Создайте генератор обнаружения зрения с помощью монокулярного строения камеры.
visionSensor = visionDetectionGenerator(monoCamConfig);
Сгенерируйте сценарий вождения с автомобиль , оборудованный датчиком и двумя целевыми автомобилями. Положение первого целевого автомобиля на 30 метров непосредственно перед автомобилем , оборудованным датчиком. Расположите второй целевой автомобиль на 20 метров перед автомобиль , оборудованный датчиком, но смещите налево на 3 метра.
scenario = drivingScenario; egoVehicle = vehicle(scenario,'ClassID',1); targetCar1 = vehicle(scenario,'ClassID',1,'Position',[30 0 0]); targetCar2 = vehicle(scenario,'ClassID',1,'Position',[20 3 0]);
Используйте график птичьего глаза, чтобы отобразить контуры транспортного средства и зону покрытия датчика.
figure bep = birdsEyePlot('XLim',[0 50],'YLim',[-20 20]); olPlotter = outlinePlotter(bep); [position,yaw,length,width,originOffset,color] = targetOutlines(egoVehicle); plotOutline(olPlotter,position,yaw,length,width); caPlotter = coverageAreaPlotter(bep,'DisplayName','Coverage area','FaceColor','blue'); plotCoverageArea(caPlotter,visionSensor.SensorLocation,visionSensor.MaxRange, ... visionSensor.Yaw,visionSensor.FieldOfView(1))
Получите положения целевых автомобилей с точки зрения автомобиля , оборудованного датчиком. Используйте эти положения, чтобы сгенерировать обнаружения от датчика.
poses = targetPoses(egoVehicle); [dets,numValidDets] = visionSensor(poses,scenario.SimulationTime);
Отображение (X, Y) позиций допустимых обнаружений. Для каждого обнаружения (X, Y) положения являются первыми двумя значениями Measurement
поле.
for i = 1:numValidDets XY = dets{i}.Measurement(1:2); detXY = sprintf('Detection %d: X = %.2f meters, Y = %.2f meters',i,XY); disp(detXY) end
Detection 1: X = 19.09 meters, Y = 2.79 meters Detection 2: X = 27.81 meters, Y = 0.08 meters
Создайте сценарий вождения, содержащий автомобиль , оборудованный датчиком и целевое транспортное средство, перемещающееся по трехполосной дороге. Обнаружите контуры маршрута с помощью генератора обнаружения зрения.
scenario = drivingScenario;
Создайте трехполосную дорогу с помощью спецификаций маршрута.
roadCenters = [0 0 0; 60 0 0; 120 30 0];
lspc = lanespec(3);
road(scenario,roadCenters,'Lanes',lspc);
Укажите, что автомобиль , оборудованный датчиком следует по центральной полосе движения со скоростью 30 м/с.
egovehicle = vehicle(scenario,'ClassID',1);
egopath = [1.5 0 0; 60 0 0; 111 25 0];
egospeed = 30;
smoothTrajectory(egovehicle,egopath,egospeed);
Укажите, что целевое транспортное средство перемещается перед автомобилем , оборудованным датчиком со скоростью 40 м/с и меняет полосы движения рядом с автомобилем , оборудованным датчиком.
targetcar = vehicle(scenario,'ClassID',1);
targetpath = [8 2; 60 -3.2; 120 33];
targetspeed = 40;
smoothTrajectory(targetcar,targetpath,targetspeed);
Отображение графика погони для 3-D вида сценария позади автомобиля , оборудованного датчиком.
chasePlot(egovehicle)
Создайте генератор обнаружения зрения, который обнаруживает полосы движения и объекты. Тангаж датчика указывает на одну степень вниз.
visionSensor = visionDetectionGenerator('Pitch',1.0); visionSensor.DetectorOutput = 'Lanes and objects'; visionSensor.ActorProfiles = actorProfiles(scenario);
Запустите симуляцию.
Создайте график птичьего глаза и связанные с ним плоттеры.
Отобразите зону покрытия датчика.
Отобразите разметку маршрута.
Получить основную истину положения целей на дороге.
Получить идеальные краевые точки маршрута до 60 м вперед.
Сгенерируйте обнаружения от идеальных целевых положений и контуров маршрута.
Отображение контура цели.
Отображать обнаружения объектов, когда обнаружение объектов допустимо.
Отображение контура маршрута при действии обнаружения маршрута.
bep = birdsEyePlot('XLim',[0 60],'YLim',[-35 35]); caPlotter = coverageAreaPlotter(bep,'DisplayName','Coverage area', ... 'FaceColor','blue'); detPlotter = detectionPlotter(bep,'DisplayName','Object detections'); lmPlotter = laneMarkingPlotter(bep,'DisplayName','Lane markings'); lbPlotter = laneBoundaryPlotter(bep,'DisplayName', ... 'Lane boundary detections','Color','red'); olPlotter = outlinePlotter(bep); plotCoverageArea(caPlotter,visionSensor.SensorLocation,... visionSensor.MaxRange,visionSensor.Yaw, ... visionSensor.FieldOfView(1)); while advance(scenario) [lmv,lmf] = laneMarkingVertices(egovehicle); plotLaneMarking(lmPlotter,lmv,lmf) tgtpose = targetPoses(egovehicle); lookaheadDistance = 0:0.5:60; lb = laneBoundaries(egovehicle,'XDistance',lookaheadDistance,'LocationType','inner'); [obdets,nobdets,obValid,lb_dets,nlb_dets,lbValid] = ... visionSensor(tgtpose,lb,scenario.SimulationTime); [objposition,objyaw,objlength,objwidth,objoriginOffset,color] = targetOutlines(egovehicle); plotOutline(olPlotter,objposition,objyaw,objlength,objwidth, ... 'OriginOffset',objoriginOffset,'Color',color) if obValid detPos = cellfun(@(d)d.Measurement(1:2),obdets,'UniformOutput',false); detPos = vertcat(zeros(0,2),cell2mat(detPos')'); plotDetection(detPlotter,detPos) end if lbValid plotLaneBoundary(lbPlotter,vertcat(lb_dets.LaneBoundaries)) end end
Сгенерируйте обнаружения от идеального датчика зрения и сравните эти обнаружения с таковыми от шумного датчика. Идеальный датчик - это тот, который всегда генерирует обнаружения, без ложных срабатываний и без добавленного случайного шума.
Создайте сценарий вождения
Создайте сценарий вождения, в котором автомобиль , оборудованный датчиком расположен перед диагональным массивом целевых автомобилей. С помощью этого строения можно позже построить график шумовых ковариаций измерений обнаруженных целей, не закрывая целевые автомобили друг друга.
scenario = drivingScenario; egoVehicle = vehicle(scenario,'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 = numel(x); for m = 1:numTgts vehicle(scenario,'ClassID',1,'Position',[x(m) y(m) 0]); end
Постройте график сценария вождения на графике птичьего глаза.
bep = birdsEyePlot('XLim',[0 60]); legend('hide') olPlotter = outlinePlotter(bep); [position,yaw,length,width,originOffset,color] = targetOutlines(egoVehicle); plotOutline(olPlotter,position,yaw,length,width, ... 'OriginOffset',originOffset,'Color',color)
Создайте идеальный датчик зрения
Создайте датчик зрения при помощи visionDetectionGenerator
Системные object™. Чтобы сгенерировать идеальные обнаружения, установите DetectionProbability
на 1
, FalsePositivesPerImage
на 0
, и HasNoise
на false
.
DetectionProbability = 1
- Датчик всегда генерирует обнаружения для цели, пока цель не окклюдирована и соответствует ограничениям области значений, скорости и размера изображения.
FalsePositivesPerImage = 0
- Датчик генерирует обнаружения только от реальных целей в сценарии вождения.
HasNoise = false
- Датчик не добавляет случайного шума в указанное положение и скорость цели. Однако objectDetection
объекты, возвращенные датчиком, имеют значения шума измерения, установленные на отклонение шума, которая была бы добавлена, если бы HasNoise
были true
. С помощью этих значений шума можно обработать идеальные обнаружения с помощью multiObjectTracker
. Этот метод полезен для анализа задержки маневра без необходимости запускать длительные симуляции Монте-Карло.
idealSensor = visionDetectionGenerator( ... 'SensorIndex',1, ... 'UpdateInterval',scenario.SampleTime, ... 'SensorLocation',[0.75*egoVehicle.Wheelbase 0], ... 'Height',1.1, ... 'Pitch',0, ... 'Intrinsics',cameraIntrinsics(800,[320 240],[480 640]), ... 'BoundingBoxAccuracy',50, ... % Make the noise large for illustrative purposes 'ProcessNoiseIntensity',5, ... 'MaxRange',60, ... 'DetectionProbability',1, ... 'FalsePositivesPerImage',0, ... 'HasNoise',false, ... 'ActorProfiles',actorProfiles(scenario))
idealSensor = visionDetectionGenerator with properties: SensorIndex: 1 UpdateInterval: 0.0100 SensorLocation: [2.1000 0] Height: 1.1000 Yaw: 0 Pitch: 0 Roll: 0 Intrinsics: [1x1 cameraIntrinsics] DetectorOutput: 'Objects only' FieldOfView: [43.6028 33.3985] MaxRange: 60 MaxSpeed: 100 MaxAllowedOcclusion: 0.5000 MinObjectImageSize: [15 15] DetectionProbability: 1 FalsePositivesPerImage: 0 Show all properties
Постройте график зоны покрытия идеального датчика зрения.
legend('show') caPlotter = coverageAreaPlotter(bep,'DisplayName','Coverage area','FaceColor','blue'); mountPosition = idealSensor.SensorLocation; range = idealSensor.MaxRange; orientation = idealSensor.Yaw; fieldOfView = idealSensor.FieldOfView(1); plotCoverageArea(caPlotter,mountPosition,range,orientation,fieldOfView);
Симулируйте идеальные обнаружения зрения
Получить положения целей. Положения указаны в автомобиль , оборудованный датчиком координатах.
gTruth = targetPoses(egoVehicle);
Сгенерируйте обнаружение видения с временной меткой. Эти обнаружения возвращаются как массив ячеек objectDetection
объекты.
time = scenario.SimulationTime; dets = idealSensor(gTruth,time);
Проверьте отклонение шума измерений и измерений первого (крайнего левого) обнаружения. Несмотря на то, что обнаружение идеально и, следовательно, не имеет добавленного случайного шума, MeasurementNoise
свойство показывает значения, как если бы обнаружение имело шум.
dets{1}.Measurement
ans = 6×1
31.0000
-11.2237
0
0
0
0
dets{1}.MeasurementNoise
ans = 6×6
1.5427 -0.5958 0 0 0 0
-0.5958 0.2422 0 0 0 0
0 0 100.0000 0 0 0
0 0 0 0.5398 -0.1675 0
0 0 0 -0.1675 0.1741 0
0 0 0 0 0 100.0000
Постройте график идеальных обнаружений и эллипсов для контура 2-сигмы ковариации шума измерения.
pos = cell2mat(cellfun(@(d)d.Measurement(1:2)',dets, ... 'UniformOutput',false)); cov = reshape(cell2mat(cellfun(@(d)d.MeasurementNoise(1:2,1:2),dets, ... 'UniformOutput',false))',2,2,[]); plotter = trackPlotter(bep,'DisplayName','Ideal detections', ... 'MarkerEdgeColor','blue','MarkerFaceColor','blue'); sigma = 2; plotTrack(plotter,pos,sigma^2*cov)
Симулируйте шумные обнаружения для сравнения
Создайте шумный датчик, основанный на свойствах идеального датчика.
noisySensor = clone(idealSensor); release(noisySensor) noisySensor.HasNoise = true;
Верните сценарий вождения в его исходное состояние.
restart(scenario)
Собирайте статистику от шумных обнаружений.
numMonte = 1e3; pos = []; for itr = 1:numMonte time = scenario.SimulationTime; dets = noisySensor(gTruth,time); % Save noisy measurements pos = [pos;cell2mat(cellfun(@(d)d.Measurement(1:2)',dets,'UniformOutput',false))]; advance(scenario); end
Постройте график шумных обнаружений.
plotter = detectionPlotter(bep,'DisplayName','Noisy detections', ... 'Marker','.','MarkerEdgeColor','red','MarkerFaceColor','red'); plotDetection(plotter,pos)
Указания и ограничения по применению:
Для автономного развертывания, visionDetectionGenerator
Системный объект поддерживает только цели Simulink Real-Time™.
Смотрите Системные объекты в Генерации кода MATLAB (MATLAB Coder).
drivingRadarDataGenerator
| drivingScenario
| insSensor
| laneMarking
| lanespec
| lidarPointCloudGenerator
| monoCamera
| multiObjectTracker
| objectDetection
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.