Этот пример показывает, как смоделировать и моделировать вывод автомобильного датчика видения для различных ведущих сценариев. Генерация синтетических обнаружений видения важна для тестирования и проверки отслеживания и алгоритмов сплава датчика в угловых случаях или когда оборудование датчика недоступно. Этот пример анализирует различия между измерениями видения и наземным положением истины автомобиля и скоростью для сценария прямого предупреждения столкновения (FCW), передающего сценария автомобиля и сценария спуска выступа.
В этом примере вы генерируете обнаружения видения программно. Можно также сгенерировать обнаружения при помощи приложения Driving Scenario Designer. Для примера смотрите Сборку Ведущий Сценарий и Сгенерируйте Синтетические Обнаружения.
Автомобили, которые содержат функции продвинутой системы помощи водителю (ADAS) или разработаны, чтобы быть полностью автономными обычно, полагаются на несколько типов датчиков. Эти датчики включают гидролокатор, радар, лазерный дальномер и видение. Надежное решение включает алгоритм сплава датчика, чтобы объединить сильные места через различные типы датчиков, включенных в систему. Для получения дополнительной информации о сплаве датчика синтетических обнаружений от системы ADAS мультидатчика, смотрите, что Fusion Датчика Использует Синтетические Данные о Радаре и Видении.
При использовании синтетических обнаружений для тестирования и проверки отслеживания и алгоритмов сплава датчика, важно понять, как сгенерированные обнаружения моделируют уникальные показатели производительности датчика. Каждый вид автомобильного датчика обеспечивает определенный набор достоинств и недостатков, которые способствуют сплавленному решению. Этот пример представляет некоторые важные показатели производительности автомобильных датчиков видения и показывает, как производительность датчика моделируется при помощи синтетических обнаружений.
Этот пример использует visionDetectionGenerator
, чтобы сгенерировать синтетические обнаружения датчика видения. visionDetectionGenerator
моделирует следующие показатели производительности автомобильных датчиков видения:
Сильные места
Хорошая боковая точность положения и скорости
Об одном обнаружении сообщают на цель
Слабые места
Плохая продольная точность положения и скорости
Неспособность обнаружить закрытые цели
Продольные смещения для поднятых целей
FCW управление сценарием
Создайте сценарий тестирования прямого предупреждения столкновения (FCW), который используется, чтобы проиллюстрировать, как измерить положение цели с автомобильным датчиком видения. Сценарий состоит из движущегося автомобиля, оборудованного датчиком, и стационарный целевой автомобиль поместил 75 метров в будущем. Автомобиль, оборудованный датчиком имеет начальную скорость 50 км/ч прежде, чем применить ее тормоза, чтобы достигнуть постоянного замедления 3 m/s^2. Автомобиль затем прибывает в полную остановку 1 метр перед задним бампером целевого автомобиля.
rng default; initialDist = 75; % m finalDist = 1; % m initialSpeed = 50; % kph brakeAccel = 3; % m/s^2 [scenario, egoCar] = helperCreateSensorDemoScenario('FCW', initialDist, initialSpeed, brakeAccel, finalDist);
Датчик видения по ходу движения
Создайте датчик видения по ходу движения, смонтированный на переднем лобовом стекле автомобиля, оборудованного датчиком, 1,1 м над землей. Датчик передается вниз 1 степень к дороге и генерирует измерения каждые 0,1 секунды. Камера датчика имеет 480 640 пиксельная матрица формирования изображений и фокусное расстояние 800 пикселей. Датчик может определить местоположение объектов в одном изображении с точностью до 5 пикселей и имеет максимальную область значений обнаружения 150 м. Свойство ActorProfiles
задает физические размерности автомобилей, замеченных датчиком видения в симуляции.
visionSensor = visionDetectionGenerator(... 'SensorIndex', 1, ... 'UpdateInterval', 0.1, ... 'SensorLocation', [0.75*egoCar.Wheelbase 0], ... 'Height', 1.1, ... 'Pitch', 1, ... 'Intrinsics', cameraIntrinsics(800, [320 240], [480 640]), ... 'BoundingBoxAccuracy', 5, ... 'MaxRange', 150, ... 'ActorProfiles', actorProfiles(scenario))
visionSensor = visionDetectionGenerator with properties: SensorIndex: 1 UpdateInterval: 0.1000 SensorLocation: [2.1000 0] Height: 1.1000 Yaw: 0 Pitch: 1 Roll: 0 Intrinsics: [1x1 cameraIntrinsics] DetectorOutput: 'Objects only' FieldOfView: [43.6028 33.3985] MaxRange: 150 MaxSpeed: 50 MaxAllowedOcclusion: 0.5000 MinObjectImageSize: [15 15] DetectionProbability: 0.9000 FalsePositivesPerImage: 0.1000 Use get to show all properties
Симуляция обнаружений видения
Моделируйте датчик видения, измеряющий положение целевого автомобиля путем усовершенствования времени симуляции сценария. Датчик видения генерирует обнаружения от истинного целевого положения (положение, скорость и ориентация) выраженный в координатном кадре автомобиля, оборудованного датчиком.
Датчик видения сконфигурирован, чтобы сгенерировать обнаружения в 0,1 вторых интервалах, который сопоставим с частотой обновления типичных автомобильных датчиков видения. Однако, чтобы точно смоделировать движение автомобилей, симуляция сценария совершенствуется каждую 0.01 секунды. Датчик возвращает логический флаг, isValidTime
, который верен, когда датчик видения достигает своего необходимого интервала обновления, указывая, что этот шаг времени симуляции сгенерирует обнаружения.
% Create display for FCW scenario [bep, figScene] = helperCreateSensorDemoDisplay(scenario, egoCar, visionSensor); metrics = struct; % Initialize struct to collect scenario metrics while advance(scenario) % Update vehicle positions gTruth = targetPoses(egoCar); % Get target positions in ego vehicle coordinates % Generate time-stamped vision detections time = scenario.SimulationTime; [dets, ~, isValidTime] = visionSensor(gTruth, time); if isValidTime % Update Bird's-Eye Plot with detections and road boundaries helperUpdateSensorDemoDisplay(bep, egoCar, visionSensor, dets); % Collect vision detections and ground truth for offline analysis metrics = helperCollectScenarioMetrics(metrics, gTruth, dets); end % Take a snapshot for the published example helperPublishSnapshot(figScene, time>=6); end
По длительности теста FCW расстояние целевого автомобиля от автомобиля, оборудованного датчиком охватывает широкий спектр значений. Путем сравнения измеренных продольных и боковых положений датчика видения целевого автомобиля к наземному положению истины целевого автомобиля можно наблюдать точность измеренных положений датчика.
Используйте helperPlotSensorDemoDetections
, чтобы построить продольные и боковые ошибки положения как различие между измеренным положением, о котором сообщает датчик видения и наземной истиной целевого автомобиля. Наземная ссылка истины для целевого автомобиля является точкой на земле непосредственно ниже центра задней оси целевого автомобиля, которая составляет 1 метр перед бампером автомобиля.
helperPlotSensorDemoDetections(metrics, 'position', 'reverse range', [-6 6]); % Show rear overhang of target vehicle tgtCar = scenario.Actors(2); rearOverhang = tgtCar.RearOverhang; subplot(1,2,1); hold on; plot(-rearOverhang*[1 1], ylim, 'k'); hold off; legend('Error', '2\sigma noise', 'Rear overhang');
Датчик видения преобразовывает положение цели в изображении камеры к продольным и боковым позициям в системе координат автомобиля, оборудованного датчиком. Датчик делает это преобразование путем предположения, что обнаруженные точки в изображении лежат на плоской дороге, которая является при том же повышении как автомобиль, оборудованный датчиком.
Продольные измерения положения
Для настройки датчика видения по ходу движения продольные измерения положения выведены, в основном, от вертикального размещения цели в изображении камеры.
Вертикальное положение объекта в изображении строго коррелируется к высоте объекта выше дороги, но это слабо коррелируется к расстоянию объекта от камеры. Эта слабая корреляция вызывает монокулярное видение продольные ошибки положения датчика стать большой, когда объект переезжает от датчика. Продольные ошибки положения в предыдущем графике слева показывают, как продольные ошибки датчика быстро увеличиваются, когда целевой автомобиль далек от датчика. Продольный шум измерения датчика составляет меньше чем 1 метр, когда наземная область значений истины к целевому автомобилю составляет меньше чем 30 метров, но растет больше чем до 5 метров в областях значений вне 70 метров от автомобиля, оборудованного датчиком.
Продольные ошибки положения также показывают-1метровое смещение между долготой, измеренной датчиком видения и наземным положением истины цели.-1метровое смещение указывает, что датчик последовательно измеряет цель, чтобы быть ближе к автомобилю, оборудованному датчиком, чем наземное положение истины целевого автомобиля. Вместо того, чтобы аппроксимировать цель как одну точку на пробеле, датчик видения моделирует физические размерности корпуса автомобиля. Для сценария FCW датчик видения просматривает тыльную сторону целевого автомобиля.-1метровое смещение в обнаружениях, сгенерированных с этой стороны, соответствует заднему нависающему краю автомобиля. Задний нависающий край автомобиля задает расстояние между тыльной стороной автомобиля и ее задней осью, которая является, где наземная ссылка истины расположена.
Боковые измерения положения
Для настройки датчика видения по ходу движения боковое положение выведено от горизонтального местоположения цели в изображении камеры.
В отличие от продольного положения, боковое положение объекта строго коррелируется к его горизонтальной позиции в изображении датчика видения. Эта сильная корреляция производит точные боковые измерения положения, которые не ухудшаются быстро с расстоянием объекта от датчика. Боковые ошибки положения в предыдущем графике справа медленно растут с областью значений. Шум измерения, о котором сообщает датчик, остается ниже 0,2 метров к наземной области значений истины 70 метров.
Создайте ведущий сценарий с двумя целевыми автомобилями (ведущий автомобиль и проезжающий мимо автомобиль), чтобы проиллюстрировать точность видения продольные и боковые скоростные измерения датчика. Ведущий автомобиль помещается 40 метров перед автомобилем, оборудованным датчиком и перемещается с той же скоростью. Проезжающий мимо автомобиль запускается в левом маршруте вместе с автомобилем, оборудованным датчиком, передает автомобиль, оборудованный датчиком и объединяет в правильный маршрут только позади ведущего автомобиля. Этот маневр слияния генерирует продольные и боковые скоростные компоненты, позволяя вам сравнить точность датчика по этим двум измерениям.
Поскольку ведущий автомобиль непосредственно перед датчиком, он имеет чисто продольный скоростной компонент. Проезжающий мимо автомобиль имеет скоростной профиль и с продольными и с боковыми скоростными компонентами. Эти компоненты изменение как автомобиль передают автомобиль, оборудованный датчиком и перемещаются в правильный маршрут позади ведущего автомобиля. Сравнение измеренных продольных и боковых скоростей датчика целевых автомобилей к их наземным скоростям истины иллюстрирует способность датчика видения наблюдать оба из этих скоростных компонентов.
% Create passing scenario leadDist = 40; % m speed = 50; % kph passSpeed = 70; % kph mergeFract = 0.55; % Merge 55% into right lane [scenario, egoCar] = helperCreateSensorDemoScenario('Passing', leadDist, speed, passSpeed, mergeFract);
Настройка скоростных измерений датчика видения
Датчик видения не может определить скорость объекта от одного изображения. Чтобы оценить скорость, датчик видения сравнивает перемещение объекта между повторными изображениями. Извлеченные целевые положения из повторных изображений обрабатываются при помощи фильтра сглаживания. В дополнение к оценке скорости этот фильтр производит сглаживавшую оценку положения. Чтобы настроить объем сглаживания, которое применяет фильтр, можно установить интенсивность шума процесса датчика. Шум процесса датчика должен собираться быть порядка максимального ускоряющего значения, ожидаемого от цели, которая должна быть обнаружена датчиком.
Возьмите датчик видения, используемый в предыдущем разделе, и сконфигурируйте его, чтобы сгенерировать оценки положения и скорости от фильтра сглаживания с интенсивностью шума процесса 5 m/s^2.
% Configure vision sensor's noise intensity used by smoothing filter release(visionSensor); visionSensor.ProcessNoiseIntensity = 5; % m/s^2 % Use actor profiles for the passing car scenario visionSensor.ActorProfiles = actorProfiles(scenario);
Используйте helperRunSensorDemoScenario
, чтобы моделировать движение эго и целевых автомобилей. Эта функция также собирает моделируемые метрики, как был ранее сделан для FCW ведущий сценарий.
snapTime = 5.9; % Simulation time to take snapshot for publishing
metrics = helperRunSensorDemoScenario(scenario, egoCar, visionSensor, snapTime);
Используйте helperPlotSensorDemoDetections
, чтобы построить продольные и боковые ошибки датчика видения скорости как различие между измеренной скоростью, о которой сообщает датчик и наземной истиной целевого автомобиля.
helperPlotSensorDemoDetections(metrics, 'velocity', 'time', [-25 25]); subplot(1,2,1); legend('Lead car error', 'Lead car 2\sigma noise', 'Pass car error', 'Pass car 2\sigma noise');
Продольные скоростные измерения
Датчики видения по ходу движения измеряют продольную скорость путем сравнения, как продольные измерения положения датчика изменяются между интервалами обновления датчика. Поскольку продольные ошибки положения датчика растут с областью значений, продольные ошибки скорости также вырастут с увеличивающимся целевым диапазоном.
Продольные ошибки скорости из передающего сценария автомобиля показывают в предыдущем графике слева. Поскольку ведущий автомобиль поддерживает постоянное расстояние от датчика видения, его ошибки (отображенный как красные точки) показывают тот же шум измерения в сценарии. Однако расстояние проезжающего мимо автомобиля от датчика не является постоянным, но это расстояние увеличения, когда автомобиль передает датчик и перемещается к ведущему автомобилю. Продольные ошибки проезжающего мимо автомобиля скорости (отображенный как желтые точки) являются небольшими, когда это сначала вводит поле зрения датчика в 2 секунды. Проезжающий мимо автомобиль близко к датчику видения в этой точке в сценарии. От 2 секунд до 6 секунд проезжающий мимо автомобиль переезжает от автомобиля, оборудованного датчиком и приближается к ведущему автомобилю. Его продольные ошибки скорости растут как его расстояние от увеличений датчика. Если проезжающий мимо автомобиль объединяет в правильный маршрут позади ведущего автомобиля, это поддерживает постоянное расстояние от датчика, и его шум измерения остается постоянным.
Боковые скоростные измерения
Датчики видения по ходу движения измеряют боковую скорость путем сравнения, как боковые измерения положения датчика изменяются между интервалами обновления датчика. Поскольку боковые ошибки положения датчика строго не коррелируются с диапазоном цели от датчика, боковые ошибки скорости также покажут мало зависимости от целевого диапазона.
Боковые ошибки скорости из передающего сценария автомобиля показывают в предыдущем графике справа. Ошибки от ведущего автомобиля (красные точки) и проезжающего мимо автомобиля (желтые точки) имеют почти тот же шум измерения для целого сценария. Боковые ошибки проезжающего мимо автомобиля скорости, о которых сообщают, показывают мало изменения, когда оно переезжает от датчика.
Обнаружение целей с частичным поглощением газов
В предыдущих скоростных диаграммах погрешностей ведущий автомобиль (красные точки) надежно обнаруживается в течение первых 6 секунд сценария. Проезжающий мимо автомобиль (желтые точки) обнаруживается в 2 секунды, когда он сначала вводит поле зрения камеры. Обнаружения затем сгенерированы на обоих из целевых автомобилей до 6 секунд. В 6 секунд проезжающий мимо автомобиль объединяет в правильный маршрут и перемещения между автомобилем, оборудованным датчиком и ведущим автомобилем. Для остатка от сценария проезжающий мимо автомобиль частично закрывает представление датчика видения ведущего автомобиля. 55% тыльной стороны ведущего автомобиля закрываются, оставляя только 45% видимыми датчику для обнаружения. Это закрытое представление ведущего автомобиля препятствует тому, чтобы датчик нашел автомобиль в изображении камеры и сгенерировал обнаружения.
Способность датчика видения обеспечить надежные обнаружения строго зависит от свободного представления объекта, который она обнаруживает. В плотном трафике видимость автомобилей в сценарии может измениться быстро как расстояния между изменением автомобилей, и автомобили приближаются и из маршрутов. Эта неспособность поддержать обнаружение на затрудненных целях ставит проблему к отслеживанию алгоритмов, обрабатывающих обнаружения датчика видения.
Повторно выполните передающий сценарий автомобиля с датчиком видения, который может обнаружить цели с целых 60% просматриваемой закрытой области цели.
% Configure vision sensor to support maximum occlusion of 60% release(visionSensor); visionSensor.MaxAllowedOcclusion = 0.6; % Run simulation and collect detections and ground truth for offline analysis metrics = helperRunSensorDemoScenario(scenario, egoCar, visionSensor); % Plot longitudinal and lateral velocity errors helperPlotSensorDemoDetections(metrics, 'velocity', 'time', [-25 25]); subplot(1,2,1); legend('Lead car error', 'Lead car 2\sigma noise', 'Pass car error', 'Pass car 2\sigma noise');
В предыдущем графике ошибки скорости показывают для обоих ведущий автомобиль (красные точки) и проезжающий мимо автомобиль (желтые точки). Та же ошибочная производительность наблюдается как прежде, но теперь обнаружения на ведущем автомобиле сохраняются после того, как проезжающий мимо автомобиль объединил позади него в 6 секунд. Путем корректировки максимального позволенного поглощения газов можно смоделировать чувствительность датчика видения, чтобы предназначаться для поглощения газов.
Вертикальное местоположение объекта в изображении камеры строго коррелируется к его высоте выше дороги. Поскольку монокулярный датчик видения генерирует продольные измерения положения от вертикального местоположения объектов в изображении его камеры, большие ошибки могут возникнуть для целей при различных повышениях от автомобиля, оборудованного датчиком. Когда объект изменяет повышение, датчик неправильно интерпретирует вертикальное смещение в изображении камеры как изменение в продольном положении объекта.
Запустите сценарий FCW снова со стационарным целевым автомобилем, помещенным в местоположение на 2 метра ниже, чем исходное положение автомобиля, оборудованного датчиком. Автомобиль, оборудованный датчиком убывает маленький выступ, когда он приближается к целевому автомобилю. Когда автомобиль, оборудованный датчиком убывает выступ, вертикальное местоположение целевого автомобиля в изменениях образа камеры, вводя смещение в измеренном продольном положении датчика.
% Create FCW hill descent scenario initialDist = 75; % m finalDist = 1; % m initialSpeed = 50; % kph brakeAccel = 3; % m/s^2 [scenario, egoCar] = helperCreateSensorDemoScenario('FCW', initialDist, initialSpeed, brakeAccel, finalDist, false, 2); % Use actor profiles for the FCW hill descent scenario release(visionSensor); visionSensor.ActorProfiles = actorProfiles(scenario); % Run simulation and collect detections and ground truth for offline analysis snapTime = 3; % Simulation time to take snapshot for publishing metrics = helperRunSensorDemoScenario(scenario, egoCar, visionSensor, snapTime, true);
Постройте ошибки положения, сгенерированные для целевого автомобиля, когда автомобиль, оборудованный датчиком убывает маленький выступ.
helperPlotSensorDemoDetections(metrics, 'position', 'reverse range', [-6 6;0 80]); subplot(1,2,1); xlim([-10 60]); ylim([0 80]); legend('Error', '2\sigma noise');
Предыдущие графики показывают продольные ошибки положения (слева) и боковые ошибки положения (справа) для сценария спуска выступа. Обратите внимание на то, что в продольной диаграмме погрешностей положения, пределы ошибочной оси были увеличены, чтобы разместить большое смещение, вызванное повышением цели относительно датчика камеры, когда автомобиль, оборудованный датчиком убывает выступ.
Автомобиль, оборудованный датчиком начинает свой спуск, когда это на расстоянии в 75 метров от целевого автомобиля. Поскольку автомобиль, оборудованный датчиком передается вниз, когда он убывает выступ, цель появляется в поднятом положении около верхней части изображения камеры. Когда автомобиль, оборудованный датчиком убывает выступ, местоположение целевого автомобиля в перемещениях камеры изображений от верхней части изображения и пересекает строку горизонта. Для монокулярных датчиков видения цели, расположенные около строки горизонта в изображении камеры, сопоставлены с положениями, которые очень далеки от датчика. (По определению точки на строке горизонта расположены в бесконечности.) Датчик видения не генерирует обнаружения для объектов, появляющихся выше горизонта в изображении камеры, потому что эти точки не сопоставляют с местоположениями на поверхности дороги.
Большие изменения в продольном положении автомобиля как его местоположение в изображении переезжают от горизонта, также заставляют фильтр сглаживания датчика генерировать большие продольные оценки скорости. Датчик отклоняет обнаружения со скоростями, превышающими его свойство MaxSpeed
. Эти большие продольные скорости, произведенные повышением цели также, препятствуют тому, чтобы датчик генерировал обнаружения, когда целевой автомобиль около горизонта камеры.
Когда автомобиль, оборудованный датчиком приблизительно в 40 метрах от целевого автомобиля, расположение изображения целевого автомобиля пересекло строку горизонта, и оценки датчика скорости удовлетворяют ее макс. ограничение скорости. На этом расстоянии датчик видения начинает генерировать обнаружения от целевого автомобиля. Отображение целевых местоположений около горизонта камеры к точкам на дороге, далекой от датчика, объясняет большие продольные ошибки, смоделированные монокулярным датчиком видения, когда это начинает обнаруживать целевой автомобиль. Продольное смещение продолжает уменьшаться, когда автомобиль, оборудованный датчиком приближается к нижней части выступа, и местоположение цели переезжает от строки горизонта в изображении камеры. В конце спуска автомобиля, оборудованного датчиком цель при том же повышении как автомобиль, оборудованный датчиком. Только-1метровое смещение, соответствующее заднему нависающему краю целевого автомобиля, присутствует. Боковые ошибки положения датчика не показывают смещения, потому что подача автомобиля, оборудованного датчиком, когда это убывает выступ, не изменяет горизонтальное местоположение цели в изображении камеры.
Способность датчика видения обнаружить объект в изображении его камеры зависит от количества пикселей, которые объект занимает в изображении. Когда размер объекта в изображении является большим (сотни пикселей), датчик может легко идентифицировать объект и сгенерировать обнаружение. Однако, когда размер объекта в изображении является небольшим (десятки пикселей), датчик не может найти его и не сгенерирует обнаружение. Спроектированный размер объекта на матрице формирования изображений камеры является функцией и физического размера объекта и его расстояния от камеры. Поэтому, когда автомобиль расположен дальше от камеры, чем у пешехода, и автомобиль и пешеходная сила есть подобные размеры в изображении камеры. Это означает, что датчик видения обнаружит большие объекты (автомобили) в более длинных областях значений, чем меньшие объекты (пешеходы).
Запустите сценарий FCW снова и со стационарным автомобилем и с пешеходом 75 метров перед датчиком. Этот сценарий иллюстрирует различие в области значений обнаружения датчика для этих двух объектов. Автомобиль, оборудованный датчиком, стационарный автомобиль и пешеход все размещаются в то же повышение.
% Create FCW test scenario initialDist = 75; % m finalDist = 1; % m initialSpeed = 50; % kph brakeAccel = 3; % m/s^2 [scenario, egoCar] = helperCreateSensorDemoScenario('FCW', initialDist, initialSpeed, brakeAccel, finalDist, true); % Use actor profiles for the FCW hill descent scenario release(visionSensor); visionSensor.ActorProfiles = actorProfiles(scenario); % Run simulation and collect detections and ground truth for offline analysis snapTime = 5; % Simulation time to take snapshot for publishing metrics = helperRunSensorDemoScenario(scenario, egoCar, visionSensor, snapTime);
Постройте ошибки положения, сгенерированные для целевого автомобиля и пешехода из сценария FCW.
helperPlotSensorDemoDetections(metrics, 'position', 'reverse range', [-6 6]); legend('Car error','Car 2\sigma noise', 'Pedestrian error', 'Pedestrian 2\sigma noise');
Предыдущие графики показывают продольные ошибки положения (слева) и боковые ошибки положения (справа) сгенерированные обнаружениями датчика видения целевого автомобиля и пешехода. Ошибки от обнаружений для целевого автомобиля (отображенный красным) сгенерированы к самой дальней области значений, включенной в этот тест (75 м), но ошибки для пешехода (отображенный желтым) не появляются, пока автомобиль, оборудованный датчиком не достиг расстояния приблизительно 30 м. Это различие в областях значений обнаружения происходит из-за различия в размерах этих двух объектов.
Датчик прекращает генерировать обнаружения от пешехода в областях значений меньше чем 12 м. В этой области значений смещение пешехода от оптической оси камеры перемещает пешехода за пределами горизонтального поля зрения камеры. Поскольку целевой автомобиль непосредственно перед камерой, это остается в центре в изображении камеры для целого теста FCW.
Некоторые датчики видения могут обнаружить объекты с меньшими размерами изображения, позволив датчикам обнаружить объекты в более длинных областях значений. В предыдущем сценарии обнаружение датчика пешехода ограничивается шириной пешехода (0,45 м), который является намного более узким, чем ширина автомобиля (1,8 м). Чтобы увеличить область значений обнаружения датчика для пешеходов к 40 м, вычислите ширину пешехода в изображении камеры, когда это будет на уровне 40 м.
Найдите физическую ширину смоделированной для пешехода
profiles = actorProfiles(scenario);
pedWidth = profiles(3).Width
% Compute width of pedestrian in camera's image in pixels at 40 meters from ego vehicle
cameraRange = 40-visionSensor.SensorLocation(1);
focalLength = visionSensor.Intrinsics.FocalLength(1);
pedImageWidth = focalLength*pedWidth/cameraRange
pedWidth = 0.4500 pedImageWidth = 9.4987
На уровне 40 м у пешехода есть ширина 9,5 пикселей в изображении камеры. Установите минимальную ширину объекта датчика видения совпадать с шириной пешехода на уровне 40 м.
% Configure sensor to detect pedestrians out to a range of 40 m
release(visionSensor);
visionSensor.MinObjectImageSize(2) = pedImageWidth
visionSensor = visionDetectionGenerator with properties: SensorIndex: 1 UpdateInterval: 0.1000 SensorLocation: [2.1000 0] Height: 1.1000 Yaw: 0 Pitch: 1 Roll: 0 Intrinsics: [1x1 cameraIntrinsics] DetectorOutput: 'Objects only' FieldOfView: [43.6028 33.3985] MaxRange: 150 MaxSpeed: 50 MaxAllowedOcclusion: 0.6000 MinObjectImageSize: [15 9.4987] DetectionProbability: 0.9000 FalsePositivesPerImage: 0.1000 Use get to show all properties
Запустите сценарий снова и постройте ошибки положения показать пересмотренные области значений обнаружения для автомобиля и пешехода.
% Run simulation and collect detections and ground truth for offline analysis metrics = helperRunSensorDemoScenario(scenario, egoCar, visionSensor); % Plot position errors for the target vehicle and pedestrian helperPlotSensorDemoDetections(metrics, 'position', 'reverse range', [-6 6]); legend('Car error','Car 2\sigma noise', 'Pedestrian error', 'Pedestrian 2\sigma noise');
Предыдущие графики показывают продольные ошибки положения (слева) и боковые ошибки положения (справа) для датчика видения, сконфигурированного, чтобы поддержать пешеходное обнаружение к области значений 40 м. Автомобиль (отображенный красным) все еще обнаруживается к самой дальней тестовой области значений, но теперь обнаружения на пешеходе (отображенный желтым) сгенерированы к 40 м от датчика.
Генератор обнаружения видения может также быть сконфигурирован, чтобы обнаружить маршруты. Воссоздайте 2D маршрут ведущий сценарий с ведущим автомобилем и проезжающим мимо автомобилем, чтобы проиллюстрировать точность видения измерения контура маршрута датчика. Этот тот же маневр слияния используется к поглощению газов маркировок маршрута.
% Create passing scenario leadDist = 40; % m speed = 50; % kph passSpeed = 70; % kph mergeFract = 0.55; % Merge 55% into right lane [scenario, egoCar] = helperCreateSensorDemoScenario('Passing', leadDist, speed, passSpeed, mergeFract);
Настройка измерений контура маршрута датчика видения
Сконфигурируйте датчик видения, используемый в предыдущем разделе, и сконфигурируйте его, чтобы сгенерировать оценки положения и скорости от фильтра сглаживания с интенсивностью шума процесса 5 m/s^2.
% Configure vision sensor to detect both lanes and objects release(visionSensor); visionSensor.DetectorOutput = 'lanes and objects'; % Use actor profiles for the passing car scenario visionSensor.ActorProfiles = actorProfiles(scenario);
Используйте helperRunSensorDemoScenario
, чтобы моделировать движение эго и целевых автомобилей.
snapTime = 5.9; % Simulation time to take snapshot for publishing
helperRunSensorDemoScenario(scenario, egoCar, visionSensor, snapTime);
Как видно вышеупомянутого, детектор по умолчанию видит контуры маршрута приблизительно к 45 метрам, когда подарено незакрытое представление. Можно изменить intrinsics детектора, чтобы наблюдать его эффект.
% show camera intrinsics
visionSensor.Intrinsics
ans = cameraIntrinsics with properties: FocalLength: [800 800] PrincipalPoint: [320 240] ImageSize: [480 640] RadialDistortion: [0 0] TangentialDistortion: [0 0] Skew: 0 IntrinsicMatrix: [3x3 double]
% increase the focal length and observe its effect.
release(visionSensor);
visionSensor.Intrinsics = cameraIntrinsics([1200 1200],[320 240],[480 640])
helperRunSensorDemoScenario(scenario, egoCar, visionSensor, snapTime);
visionSensor = visionDetectionGenerator with properties: SensorIndex: 1 UpdateInterval: 0.1000 SensorLocation: [2.1000 0] Height: 1.1000 Yaw: 0 Pitch: 1 Roll: 0 Intrinsics: [1x1 cameraIntrinsics] DetectorOutput: 'Lanes and objects' FieldOfView: [29.8628 22.6199] MaxRange: 150 MaxSpeed: 50 MaxAllowedOcclusion: 0.6000 MinObjectImageSize: [15 9.4987] MinLaneImageSize: [20 3] DetectionProbability: 0.9000 FalsePositivesPerImage: 0.1000 Use get to show all properties
Изменение фокусного расстояния от 800 пикселей до 1 200 и в x-и в направлениях Y масштабирует камеру, позволяя ему обнаружить к дальнейшим областям значений.
Этот пример продемонстрировал, как смоделировать вывод автомобильных датчиков видения с помощью синтетических обнаружений. В частности, это представило как модель visionDetectionGenerator
:
Обеспечивает точные боковые измерения положения и скорости по большим расстояниям, но ограничил продольную точность в больших расстояниях
Предельное обнаружение согласно физическим размерностям цели и поглощению газов цели другими объектами в сценарии
Включает продольные смещения для целей, расположенных при различных повышениях, чем автомобиль, оборудованный датчиком
Настраивает объект и обнаружения маршрута из-за монокулярной камеры intrinsics.