visionDetectionGenerator

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

Описание

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

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

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

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

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

Создание

Описание

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)- 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.

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

пример

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

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

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

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

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

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

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

Position

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

Velocity

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

Roll

Угол вращения агента в виде действительного скаляра. Модули в градусах.

Pitch

Передайте угол агента в виде действительного скаляра. Модули в градусах.

Yaw

Угол отклонения от курса агента в виде действительного скаляра. Модули в градусах.

AngularVelocity

Скорость вращения (ω) агента в x - y - и z - направление в виде вектора с действительным знаком формы [ω x ω y ω z]. Модули в градусах в секунду.

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

Зависимости

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

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

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

Coordinates

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

  • В MATLAB® задайте эти расстояния с помощью 'XDistance' аргумент пары "имя-значение" laneBoundaries функция.

  • В Simulink® задайте эти расстояния с помощью параметра Distances from ego vehicle for computing boundaries (m) блока Scenario Reader.

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

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 соответствует маркировке, цвет которой полностью насыщается.

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Предметная классификация
ObjectAttributesДополнительная информация передала средству отслеживания
MeasurementParametersПараметры используются функциями инициализации нелинейного Кальмана, отслеживающего фильтры

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Тангаж, и 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.

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

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

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

Поле Описание
TimeВремя обнаружения маршрута
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

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

scenario = drivingScenario;

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

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

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

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

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

targetcar = vehicle(scenario,'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(scenario);

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

  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(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);

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