visionDetectionGenerator

Сгенерируйте обнаружения видения для ведущего сценария

Описание

Система visionDetectionGenerator object™ генерирует обнаружения от монокулярного датчика камеры, смонтированного на автомобиле, оборудованном датчиком. На все обнаружения ссылаются к системе координат автомобиля, оборудованного датчиком или смонтированного автомобилем датчика. Можно использовать объект visionDetectionGenerator в сценарии, содержащем агентов и траектории, которые можно создать при помощи объекта drivingScenario. Используя статистический режим, генератор может моделировать действительные обнаружения с добавленным случайным шумом и также сгенерировать ложные сигнальные обнаружения. Кроме того, можно использовать объект visionDetectionGenerator создать вход к multiObjectTracker.

Сгенерировать визуальные обнаружения:

  1. Создайте объект visionDetectionGenerator и установите его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

sensor = visionDetectionGenerator
sensor = visionDetectionGenerator(cameraConfig)
sensor = visionDetectionGenerator(Name,Value)

Описание

sensor = visionDetectionGenerator создает объект генератора обнаружения видения со значениями свойств по умолчанию.

пример

sensor = visionDetectionGenerator(cameraConfig) создает объект генератора обнаружения видения с помощью объекта настройки monoCamera, cameraConfig.

пример

sensor = visionDetectionGenerator(Name,Value) свойства наборов с помощью одной или нескольких пар "имя-значение". Например, visionDetectionGenerator('DetectionCoordinates','Sensor Cartesian','MaxRange',200) создает генератор обнаружения видения, который сообщает об обнаружениях в Декартовой системе координат датчика и имеет максимальную область значений обнаружения 200 метров. Заключите каждое имя свойства в кавычки.

Свойства

развернуть все

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и функция release разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Типы обнаружений сгенерированы датчиком, заданным как '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

Уникальный идентификатор датчика, заданный как положительное целое число. Это свойство отличает обнаружения, которые прибывают из различных датчиков в системе мультидатчика.

Пример 5

Типы данных: double

Необходимый временной интервал между обновлениями датчика, заданными как положительный действительный скаляр. Вызовы объектов drivingScenario генератор обнаружения видения в интервалах постоянного времени. Детектор видения генерирует новые обнаружения, с промежутками заданные свойством UpdateInterval. Значение свойства UpdateInterval должно быть целочисленным кратным интервал времени симуляции. Обновления, которые требуют от датчика между интервалами обновления, не содержат обнаружений. Модули находятся в секундах.

Пример 5

Типы данных: double

Местоположение центра датчика видения, заданного как [x y]. Свойства SensorLocation и Height задают координаты датчика видения относительно системы координат автомобиля, оборудованного датчиком. Значение по умолчанию соответствует датчику по ходу движения, смонтированному на инструментальной панели автомобиля. Модули исчисляются в метрах.

Пример: [4 0.1]

Типы данных: double

Высота датчика выше автомобиля основывает плоскость, заданную как положительный действительный скаляр. Значение по умолчанию соответствует датчику видения по ходу движения, смонтированному на инструментальной панели седана. Модули исчисляются в метрах.

Пример: 1.5

Типы данных: double

Угол отклонения от курса датчика видения, заданного как действительный скаляр. Угол отклонения от курса является углом между центральной линией автомобиля, оборудованного датчиком и осью вниз-области-значений датчика видения. Положительный угол отклонения от курса соответствует по часовой стрелке вращение при взгляде в положительном направлении z - ось системы координат автомобиля, оборудованного датчиком. Модули в градусах.

Пример 4

Типы данных: double

Передайте угол датчика видения, заданного как действительный скаляр. Угол подачи является углом между осью вниз-области-значений датчика видения и плоскостью x-y системы координат автомобиля, оборудованного датчиком. Положительный угол подачи соответствует по часовой стрелке вращение при взгляде в положительном направлении y - ось системы координат автомобиля, оборудованного датчиком. Модули в градусах.

Пример 3

Типы данных: double

Угол вращения датчика видения, заданного как действительный скаляр. Угол вращения является углом вращения оси вниз-области-значений датчика видения вокруг x - ось системы координат автомобиля, оборудованного датчиком. Положительный угол вращения соответствует по часовой стрелке вращение при взгляде в положительном направлении x - ось системы координат. Модули в градусах.

Пример 4

Типы данных: double

Внутренние калибровочные параметры датчика видения, заданного как объект cameraIntrinsics.

Это свойство доступно только для чтения.

Угловое поле зрения датчика видения, заданного как с действительным знаком 1 2 вектор положительных значений, [azfov,elfov]. Поле зрения задает азимут и степени повышения изображения датчика. Каждый компонент должен лечь в интервале от 0 градусов до 180 градусов. Поле зрения выведено от внутренних параметров датчика видения. Цели за пределами углового поля зрения датчика не обнаруживаются. Модули в градусах.

Типы данных: double

Максимальная область значений обнаружения, заданная как положительный действительный скаляр. Датчик не может обнаружить цель вне этой области значений. Модули исчисляются в метрах.

Пример: 200

Типы данных: double

Максимальная обнаруживаемая объектная скорость, заданная как неотрицательный действительный скаляр. Модули исчисляются в метрах в секунду.

Пример: 10.0

Типы данных: double

Максимальное позволенное поглощение газов объекта, заданного как действительный скаляр в области значений [0 1]. Поглощение газов является частью общей площади поверхности объекта, не видимого к датчику. Значение каждый указывает, что объект полностью закрывается. Модули являются безразмерными.

Пример: 0.2

Типы данных: double

Вероятность обнаружения цели, заданной как положительный действительный скаляр, меньше чем или равный 1. Это количество задает вероятность, что датчик обнаруживает обнаруживаемый объект. detectable object является объектом, который удовлетворяет минимальный обнаруживаемый размер, максимальную область значений, максимальную скорость и максимальные позволенные ограничения поглощения газов.

Пример: 0.95

Типы данных: double

Количество ложных обнаружений, которые датчик видения генерирует для каждого изображения, заданного как неотрицательный действительный скаляр.

Пример 2

Типы данных: double

Минимальная высота и ширина объекта, который датчик видения обнаруживает в изображении, заданном как вектор [minHeight,minWidth] положительных значений. 2D спроектированная высота объекта должна быть больше, чем или равной minHeight. Спроектированная ширина объекта должна быть больше, чем или равной minWidth. Модули находятся в пикселях.

Пример: [30 20]

Типы данных: double

Точность ограничительной рамки, заданная как положительный действительный скаляр. Это количество задает точность, которой детектор может совпадать с ограничительной рамкой к цели. Модули находятся в пикселях.

Пример 4

Типы данных: double

Шумовая интенсивность используется для фильтрации положения и скоростных измерений, заданных как положительный действительный скаляр. Шумовая интенсивность задает стандартное отклонение шума процесса внутреннего Фильтра Калмана постоянной скорости, используемого в датчике видения. Фильтр моделирует шум процесса использование кусочно-постоянной белой шумовой ускоряющей модели. Шумовая интенсивность обычно имеет порядок максимального ускоряющего значения, ожидаемого для цели. Модули находятся в m/s2.

Пример: 2.5

Типы данных: double

Позвольте добавить шум в измерения датчика видения, заданные как true или false. Установите это свойство на true добавлять шум в измерения датчика. В противном случае измерения не имеют никакого шума. Даже если вы устанавливаете HasNoise на false, объект все еще вычисляет свойство MeasurementNoise каждого обнаружения.

Типы данных: логический

Источник максимального количества обнаружений, о которых сообщает датчик, заданный как 'Auto' или 'Property'. Когда это свойство установлено в 'Auto', датчик сообщает обо всех обнаружениях. Когда это свойство установлено в 'Property', датчик сообщает не больше, чем о количестве обнаружений, заданных свойством MaxNumDetections.

Типы данных: char | string

О максимальном количестве обнаружений сообщает датчик, заданный как положительное целое число. Об обнаружениях, самых близких к датчику, сообщают.

Зависимости

Чтобы включить это свойство, установите свойство MaxNumDetectionsSource на 'Property'.

Типы данных: double

Система координат обнаружений, о которых сообщают, заданных как одно из этих значений:

  • 'Ego Cartesian' — Об обнаружениях сообщают в Декартовой системе координат автомобиля, оборудованного датчиком.

  • 'Sensor Cartesian' — Об обнаружениях сообщают в Декартовой системе координат датчика.

Типы данных: char | string

Необходимый временной интервал между обновлениями обнаружения маршрута, заданными как положительный действительный скаляр. Вызовы объектов drivingScenario генератор обнаружения видения в интервалах постоянного времени. Детектор видения генерирует новые обнаружения маршрута, с промежутками заданные этим свойством, которое должно быть целочисленным кратным интервал времени симуляции. Обновления, которые требуют от датчика между интервалами обновления, не содержат обнаружений маршрута. Модули находятся в секундах.

Пример: 0.4

Типы данных: double

Минимальный размер спроектированного маршрута, отмечающего, который может быть обнаружен датчиком после составления искривления, задал как 1 2 вектор с действительным знаком, [minHeight minWidth]. Маркировки маршрута должны превысить оба из этих значений, которые будут обнаружены. Это свойство используется только при обнаружении маршрутов. Модули находятся в пикселях.

Пример: [5,7]

Типы данных: double

Точность контуров маршрута, заданных как положительный действительный скаляр. Это свойство задает точность, с которой датчик маршрута может поместить контур маршрута. Модули находятся в пикселях. Это свойство используется только при обнаружении маршрутов.

Источник максимального количества маршрутов, о которых сообщают, заданных как 'Auto' или 'Property'. Когда задано как 'Auto', максимальное количество маршрутов вычисляется автоматически. Когда задано как 'Property', используйте свойство MaxNumLanes определить максимальный номер или маршруты.

Типы данных: char | string

Максимальное количество маршрутов, о которых сообщают, заданных как положительное целое число.

Зависимости

Чтобы включить это свойство, установите свойство MaxNumLanesSource на 'Property'.

Типы данных: char | string

Профили агента, заданные как структура или как массив структур. Каждая структура содержит физические характеристики и радарные характеристики агента.

  • Если 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]. Модули в градусах.

Для полных определений полей структуры смотрите функции vehicle и actor.

Использование

Синтаксис

dets = sensor(actors,time)
lanedets = sensor(laneboundaries,time)
lanedets = sensor(actors,laneboundaries,time)
[___,numValidDets] = sensor(___)
[___,numValidDetsisValidTime] = sensor(___)
[dets,numValidDets,isValidTime,lanedets,numValidLaneDets,isValidLaneTime] = sensor(actors,laneboundaries,time)

Описание

пример

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.

[___,numValidDetsisValidTime] = sensor(___) также возвращает логическое значение, isValidTime, указывая, что время UpdateInterval, чтобы сгенерировать обнаружения протекло.

пример

[dets,numValidDets,isValidTime,lanedets,numValidLaneDets,isValidLaneTime] = sensor(actors,laneboundaries,time) возвращает оба обнаружения объектов, dets и обнаружения маршрута lanedets. Этот синтаксис также возвращает количество допустимых обнаружений маршрута, о которых сообщают, numValidLaneDets, и флаг, isValidLaneTime, указывая, протекло ли необходимое время симуляции, чтобы сгенерировать обнаружения маршрута.

Чтобы включить этот синтаксис, установите DetectionOutput на 'Lanes and objects'.

Входные параметры

развернуть все

Положения агента сценария, заданные как структура или массив структур. Каждая структура соответствует агенту. Можно сгенерировать эту структуру с помощью функции actorPoses. Можно также создать эти структуры вручную. Таблица показывает поля что объектное использование, чтобы сгенерировать обнаружения. Все другие поля проигнорированы.

Поле Описание
ActorID

Заданный сценарием идентификатор агента, заданный как положительное целое число. ActorID является обязательным полем.

Position

Положение агента, заданного как [x y z] вектор с действительным знаком. Position является обязательным полем. Модули исчисляются в метрах.

Velocity

Скорость (v) агента в x - y - и z - направления, заданные как [v x v y v z] вектор с действительным знаком. Можно задать или Speed или Velocity, но не обоих. Если bothVelocity и Speed не заданы, Velocity по умолчанию [0 0 0] используется. Модули исчисляются в метрах в секунду.

Speed

Скорость агента, заданного как действительный скаляр. Когда Speed задан, скорость агента выравнивается с x - ось агента в системе координат автомобиля, оборудованного датчиком. Можно задать или Speed или Velocity, но не обоих. Если и Velocity и Speed не заданы, Velocity по умолчанию [0 0 0] используется. Модули исчисляются в метрах в секунду.

Roll

Угол вращения агента, заданного как действительный скаляр. Если Roll не задан, значением по умолчанию является 0. Модули в градусах.

Pitch

Передайте угол агента, заданного как действительный скаляр. Если Pitch не задан, значением по умолчанию является 0.Units, в градусах.

Yaw

Угол отклонения от курса агента, заданного как действительный скаляр. Если Yaw не задан, значением по умолчанию является 0.Units, в градусах.

Для полных определений полей структуры смотрите функции vehicle и actor.

Зависимости

Чтобы включить этот аргумент, установите свойство DetectorOutput на 'Objects only', 'Lanes with occlusion' или 'Lanes and objects'.

Контуры маршрута, заданные как массив граничных структур маршрута. Таблица показывает поля для каждой структуры.

Поле Описание

Coordinates

Координаты контура маршрута, заданные как N с действительным знаком-by-3 матрица, где N является количеством контуров маршрута. Координаты контура маршрута задают положение точек на контуре на расстояниях, заданных аргументом пары "имя-значение" 'XDistance' функции laneBoundaries. Кроме того, набор граничных координат вставляются в матрицу на нулевом расстоянии. Модули исчисляются в метрах.

Curvature

Искривление контура маршрута в каждой строке матрицы Coordinates, заданной как N с действительным знаком-by-1 вектор. N является количеством контуров маршрута. Модули исчисляются в радианах на метр.

CurvatureDerivative

Производная искривления контура маршрута в каждой строке матрицы Coordinates, заданной как N с действительным знаком-by-1 вектор. N является количеством контуров маршрута. Модули исчисляются в радианах на квадратный метр.

HeadingAngle

Начальный контур маршрута направляющийся угол, заданный как действительный скаляр. Направляющийся угол контура маршрута относительно заголовка автомобиля, оборудованного датчиком. Модули в градусах.

LateralOffset

Расстояние от контура маршрута от положения автомобиля, оборудованного датчиком, заданного как действительный скаляр. Смещение к контуру маршрута слева от автомобиля, оборудованного датчиком положительно. Смещение справа от автомобиля, оборудованного датчиком отрицательно. Модули исчисляются в метрах.

BoundaryType

Тип маркировки контура маршрута, заданной как одно из этих значений:

  • 'Unmarked' — Никакой физический маркер маршрута не существует

  • 'Solid' — Одна неповрежденная строка

  • 'Dashed' — Одна строка пунктирных маркеров маршрута

  • 'DoubleSolid' — Две неповрежденных строки

  • 'DoubleDashed' — Две пунктирных линии

  • 'SolidDashed' — Сплошная линия слева и пунктирная линия справа

  • 'DashedSolid' — Пунктирная линия слева и сплошная линия справа

Strength

Сила маркировки контура маршрута, заданной как действительный скаляр от 0 до 1. Значение 0 соответствует маркировке, которая не видима. Значение 1 соответствует маркировке, которая абсолютно видима. Значения между 0 и 1 соответствуют частично видимым маркировкам.

Width

Ширина контура маршрута, заданная как положительный действительный скаляр. В маркере маршрута двойной строки та же ширина используется для обеих строк и для пробела между строками. Модули исчисляются в метрах.

Length

Длина тире в пунктирных линиях, заданных как положительный действительный скаляр. В маркере маршрута двойной строки та же длина используется для обеих строк.

Space

Продолжительность пробела между тире в пунктирных линиях, заданных как положительный действительный скаляр. В пунктирном маркере маршрута двойной строки то же пространство используется для обеих строк.

Зависимости

Чтобы включить этот аргумент, установите свойство DetectorOutput на 'Lanes only', 'Lanes with occlusion' или 'Lanes and objects'.

Типы данных: struct

Текущее время симуляции, заданное как положительный действительный скаляр. Вызовы объектов drivingScenario генератор обнаружения видения в интервалах постоянного времени. Детектор видения генерирует новые обнаружения, с промежутками заданные свойством UpdateInterval. Значения свойств UpdateInterval и LanesUpdateInterval должны быть целочисленным кратным интервал времени симуляции. Обновления, которые требуют от датчика между интервалами обновления, не содержат обнаружений. Модули находятся в секундах.

Пример: 10.5

Типы данных: double

Выходные аргументы

развернуть все

Обнаружения объектов, возвращенные как массив ячеек объектов objectDetection. Каждый объект содержит эти поля:

СвойствоОпределение
TimeВремя измерения
MeasurementОбъектные измерения
MeasurementNoiseКовариационная матрица шума измерения
SensorIndexУникальный идентификатор датчика
ObjectClassIDПредметная классификация
MeasurementParametersПараметры используются функциями инициализации нелинейного Кальмана, отслеживающего фильтры
ObjectAttributesДополнительная информация передала средству отслеживания

О Measurement, MeasurementNoise и MeasurementParameters сообщают в системе координат, заданной свойством DetectionCoordinates visionDetectionGenerator.

Измерение

Свойство DetectionCoordinatesИзмерение и координаты шума измерения
'Ego Cartesian'[x;y;z;vx;vy;vz]
'Sensor Cartesian'

MeasurementParameters

ПараметрОпределение
Frame Перечислимый тип, указывающий на кадр раньше, сообщал об измерениях. Когда Frame установлен в 'rectangular', об обнаружениях сообщают в Декартовых координатах. Когда Frame является набором 'spherical', об обнаружениях сообщают в сферических координатах.
OriginPosition3-D векторное смещение источника датчика от источника автомобиля, оборудованного датчиком. Вектор выведен из свойств SensorLocation и Height, заданных в visionDetectionGenerator.
OrientationОриентация системы координат датчика видения относительно системы координат автомобиля, оборудованного датчиком. Ориентация выведена от Yaw, Pitch и свойств Roll visionDetectionGenerator.
HasVelocityУказывает, содержат ли измерения скорость или компоненты уровня области значений.

ObjectAttributes

АтрибутОпределение
TargetIndexИдентификатор агента, ActorID, который сгенерировал обнаружение. Для ложных предупреждений это значение отрицательно.

Количество обнаружений, возвращенных, заданных как неотрицательное целое число.

  • Когда свойство MaxNumDetectionsSource установлено в 'Auto', numValidDets установлен в длину dets.

  • Когда MaxNumDetectionsSource установлен в 'Property', dets является массивом ячеек с длиной, определенной свойством MaxNumDetections. Не больше, чем количество MaxNumDetections обнаружений возвращено. Если количество обнаружений - меньше, чем MaxNumDetections, первые элементы numValidDets dets содержат допустимые обнаружения. Остающиеся элементы dets установлены в значение по умолчанию.

.

Типы данных: double

Допустимое время обнаружения, возвращенное как 0 или 1. isValidTime является 0, когда обновления обнаружения время от времени требуют, которые являются между интервалами обновления, заданными UpdateInterval.

Типы данных: логический

Обнаружения контура маршрута, возвращенные как структуры массива. Поля структуры:

Структура обнаружения контура маршрута

Поле Описание
ВремяВремя обнаружения маршрута
SensorIndexУникальный идентификатор датчика
LaneBoundariesМассив объектов clothoidLaneBoundary.

Количество обнаружений маршрута, возвращенных, заданных как неотрицательное целое число.

  • Когда свойство MaxNumLanesSource установлено в 'Auto', numValidLaneDets установлен в длину lanedets.

  • Когда MaxNumLanesSource установлен в 'Property', lanedets является массивом ячеек с длиной, определенной свойством MaxNumLanes. Не больше, чем количество MaxNumLanes обнаружений маршрута возвращено. Если количество обнаружений - меньше, чем MaxNumLanes, первые элементы numValidLaneDetections lanedets содержат допустимые обнаружения маршрута. Остающиеся элементы lanedets установлены в значение по умолчанию.

.

Типы данных: double

Допустимое время обнаружения маршрута, возвращенное как 0 или 1. isValidLaneTime является 0, когда обновления обнаружения маршрута время от времени требуют, которые являются между интервалами обновления, заданными LaneUpdateInterval.

Типы данных: логический

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

isLockedОпределите, используется ли Системный объект
stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

развернуть все

Сгенерируйте обнаружения с помощью автомобильного датчика видения по ходу движения, смонтированного на автомобиле, оборудованном датчиком. Примите, что существует два целевых автомобиля:

  • Автомобиль 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);
targetCar1 = vehicle(scenario,'Position',[30 0 0]);
targetCar2 = vehicle(scenario,'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

Создайте ведущий сценарий, содержащий автомобиль, оборудованный датчиком и целевой автомобиль, перемещающийся вдоль трехполосной дороги. Обнаружьте контуры маршрута при помощи генератора обнаружения видения.

sc = drivingScenario;

Создайте трехполосную дорогу при помощи спецификаций маршрута.

roadCenters = [0 0 0; 60 0 0; 120 30 0];
lspc = lanespec(3);
road(sc,roadCenters,'Lanes',lspc);

Укажите, что автомобиль, оборудованный датчиком следует за центральным маршрутом на уровне 30 м/с.

egovehicle = vehicle(sc);
egopath = [1.5 0 0; 60 0 0; 111 25 0];
egospeed = 30;
trajectory(egovehicle,egopath,egospeed);

Укажите, что целевые перемещения автомобиля перед автомобилем, оборудованным датчиком на уровне 40 м/с и перестраиваются на другую полосу близко к автомобилю, оборудованному датчиком.

targetcar = vehicle(sc,'ClassID',2);
targetpath = [8 2; 60 -3.2; 120 33];
targetspeed = 40;
trajectory(targetcar,targetpath,targetspeed);

Отобразите график преследования для 3-D представления сценария из-за автомобиля, оборудованного датчиком.

chasePlot(egovehicle)

Создайте генератор обнаружения видения, который обнаруживает маршруты и объекты. Подача датчика указывает одну степень вниз.

visionSensor = visionDetectionGenerator('Pitch',1.0);
visionSensor.DetectorOutput = 'Lanes and objects';
visionSensor.ActorProfiles = actorProfiles(sc);

Запустите симуляцию.

  1. Создайте видимый с большого расстояния график и связанные плоттеры.

  2. Отобразите зону охвата датчика.

  3. Отобразите маркировки маршрута.

  4. Получите наземные положения истины целей на дороге.

  5. Получите идеальные граничные точки маршрута до 60 м вперед.

  6. Сгенерируйте обнаружения от идеальных целевых положений и контуров маршрута.

  7. Отобразите схему цели.

  8. Обнаружения экранного объекта, когда обнаружение объектов допустимо.

  9. Отобразите контур маршрута, когда обнаружение маршрута будет допустимо.

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(sc)
    [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,sc.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);

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,'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: 50
       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)

Расширенные возможности

Введенный в R2017a

Для просмотра документации необходимо авторизоваться на сайте