В этом примере показано, как смоделировать и симулировать выход автомобильного датчика видения для различных ведущих сценариев. Генерация синтетических обнаружений видения важна для тестирования и проверки отслеживания и алгоритмов сплава датчика в угловых случаях или когда оборудование датчика недоступно. Этот пример анализирует различия между измерениями видения и положением основной истины транспортного средства и скоростью для сценария прямого предупреждения столкновения (FCW), передающего сценария транспортного средства и сценария спуска выступа.
В этом примере вы генерируете обнаружения видения программно. Можно также сгенерировать обнаружения при помощи приложения Driving Scenario Designer. Для примера смотрите Сборку Ведущий Сценарий и Сгенерируйте Синтетические Обнаружения.
Транспортные средства, которые содержат функции продвинутой системы помощи водителю (ADAS) или спроектированы, чтобы быть полностью автономными обычно, используют несколько типов датчиков. Эти датчики включают гидролокатор, радар, лидар и видение. Надежное решение включает алгоритм сплава датчика, чтобы объединить сильные места через различные типы датчиков, включенных в систему. Для получения дополнительной информации о сплаве датчика синтетических обнаружений от системы ADAS мультидатчика, смотрите, что Fusion Датчика Использует Синтетические Данные о Радаре и Видении.
При использовании синтетических обнаружений для тестирования и проверки отслеживания и алгоритмов сплава датчика, важно изучить, как сгенерированные обнаружения моделируют уникальные показатели производительности датчика. Каждый вид автомобильного датчика обеспечивает определенный набор достоинств и недостатков, которые способствуют сплавленному решению. Этот пример представляет некоторые важные показатели производительности автомобильных датчиков видения и показывает, как производительность датчика моделируется при помощи синтетических обнаружений.
Этот пример использует visionDetectionGenerator
сгенерировать синтетические обнаружения датчика видения. visionDetectionGenerator
моделирует следующие показатели производительности автомобильных датчиков видения:
Сильные места
Хорошая боковая точность положения и скорости
Об одном обнаружении сообщают на цель
Слабые места
Плохая продольная точность положения и скорости
Неспособность обнаружить закрытые цели
Продольные смещения для поднятых целей
FCW управление сценарием
Создайте сценарий тестирования прямого предупреждения столкновения (FCW), который используется, чтобы проиллюстрировать, как измерить положение цели с автомобильным датчиком видения. Сценарий состоит из движущегося автомобиля, оборудованного датчиком, и стационарное целевое транспортное средство поместило 75 метров в будущем. Автомобиль, оборудованный датчиком имеет начальную скорость 50 км/ч прежде, чем применить ее тормоза, чтобы достигнуть постоянного замедления 3 м/с^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 м/с^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 м/с^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 метрам, когда подарено незакрытое представление. Можно изменить внутренние параметры детектора, чтобы наблюдать его эффект.
% 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
модель:
Обеспечивает точные боковые измерения положения и скорости по большим расстояниям, но ограничил продольную точность в больших расстояниях
Предельное обнаружение согласно физическим размерностям цели и поглощению газов цели другими объектами в сценарии
Включает продольные смещения для целей, расположенных при различных вертикальных изменениях, чем автомобиль, оборудованный датчиком
Настраивает объект и обнаружения маршрута из-за монокулярных внутренних параметров камеры.