visionDetectionGenerator

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

Описание

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

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

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

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

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

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

пример

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

пример

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

Свойства

расширить все

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в 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

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

Пример: 5

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

Расположение центра датчика зрения, заданное как [x y]. The 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. Эта величина определяет вероятность того, что датчик обнаруживает обнаруживаемый объект. A detectable object является объектом, который удовлетворяет минимальному обнаруживаемому размеру, максимальной области значений, максимальной скорости и максимально допустимым ограничениям окклюзии.

Пример: 0.95

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

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

Пример: 2

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

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

Пример: [30 20]

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

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

Пример: 4

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

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

Пример: 2.5

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

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

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

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

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

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

Зависимости

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

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

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

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

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

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

Необходимый временной интервал между обновлениями обнаружения маршрута, заданный как положительный действительный скаляр. The 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]. Модули указаны в степенях.

Полные определения структурных полей см. в разделе 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

Скорость (<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'.

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

ОбластьОписание

Coordinates

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

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

  • В Simulink®, задайте эти расстояния с помощью параметра Distances from ego vehicle for computing boundaries (m) блока Scenario Reader или параметра Distance from parent for computing lane boundaries блока Simulation 3D Vision Detection Generator.

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

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

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

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

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

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

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

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

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

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

.

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

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

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

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

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем 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

Figure contains an axes. The axes contains 2 objects of type patch, line. These objects represent Vision Coverage Area, Vision Detections.

Создайте датчик зрения с помощью монокулярного строения камеры и сгенерируйте обнаружения от этого датчика.

Задайте собственные параметры камеры и создайте 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))

Figure contains an axes. The axes contains an object of type patch. This object represents Coverage area.

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

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

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

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

Figure contains an axes. The axes is empty.

Создайте идеальный датчик зрения

Создайте датчик зрения при помощи 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);

Figure contains an axes. The axes contains an object of type patch. This object represents Coverage area.

Симулируйте идеальные обнаружения зрения

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

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)

Figure contains an axes. The axes contains 2 objects of type patch, line. These objects represent Coverage area, Ideal detections.

Симулируйте шумные обнаружения для сравнения

Создайте шумный датчик, основанный на свойствах идеального датчика.

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)

Figure contains an axes. The axes contains 3 objects of type patch, line. These objects represent Coverage area, Ideal detections, Noisy detections.

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

.
Введенный в R2017a