exponenta event banner

visionDetectionGenerator

Создание визуальных обнаружений для сценария вождения

Описание

visionDetectionGenerator Система object™ генерирует сигналы обнаружения от датчика монокулярной камеры, установленного на эго-транспортном средстве. Все обнаружения относятся к системе координат эго-транспортного средства или установленного на транспортном средстве датчика. Вы можете использовать visionDetectionGenerator объект в сценарии, содержащем актеры и траектории, которые можно создать с помощью drivingScenario объект. Используя статистический режим, генератор может моделировать реальные обнаружения с добавлением случайного шума, а также генерировать ложные аварийные обнаружения. Кроме того, можно использовать visionDetectionGenerator объект для создания входных данных в multiObjectTracker. При построении сценариев с помощью приложения Driving Script 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

Требуемый интервал времени между обновлениями датчика, указанный как положительный действительный скаляр. 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]. Окклюзия - это доля общей площади поверхности объекта, не видимого датчиком. Значение 1 указывает на то, что объект полностью закрыт. Единицы измерения безразмерны.

Пример: 0.2

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

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

Пример: 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

Требуемый интервал времени между обновлениями обнаружения полосы движения, указанный как положительный действительный скаляр. 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, заданная как действительный вектор вида [vx vy vz]. Единицы измерения в метрах в секунду.

Roll

Угол крена актера, заданный как действительный скаляр. Единицы измерения в градусах.

Pitch

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

Yaw

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

AngularVelocity

Угловая скорость (λ) актера в направлениях x -, y - и z, заданная как действительный вектор вида [startx starty ü z]. Единицы измерения в градусах в секунду.

Полные определения полей структуры см. в разделе actor и vehicle функции.

Зависимости

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

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

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

Coordinates

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

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

  • В Simulink ® задайте эти расстояния с помощью параметра «Расстояния от эго-транспортного средства» для вычисления границ (m) блока «Считыватель сценариев» или параметра «Расстояние от родителя» для вычисления границ полос движения блока «Генератор моделирования 3D обнаружения видения».

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

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

  • Транспортное средство 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