Модели обнаружения датчика зрения

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

В этом примере вы генерируете обнаружения зрения программно. Можно также сгенерировать обнаружения с помощью приложения Driving Scenario Designer. Для получения примера смотрите Создание сценария вождения в интерактивном режиме и Генерация синтетических данных датчика.

Введение

Транспортные средства, которые содержат расширенные функции системы помощи драйверу (ADAS) или спроектированы, чтобы быть полностью автономными, обычно полагаются на несколько типов датчиков. Эти датчики включают гидролокатор, радар, лидар и зрение. Устойчивое решение включает алгоритм слияния датчиков, чтобы объединить сильные стороны между различными типами датчиков, входящих в систему. Для получения дополнительной информации о слиянии датчиков синтетических обнаружений из мультисенсорной системы ADAS, смотрите Sensor Fusion Using Synthetic Radar и Vision Data.

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

Модель датчика зрения

Этот пример использует 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: 100
       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');

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

Измерения продольного положения

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

Вертикальное положение объекта на изображении сильно коррелирует с высотой объекта над дорогой, но слабо коррелирует с расстоянием объекта от камеры. Эта слабая корреляция заставляет ошибки продольного положения монокулярного датчика зрения становиться большим, когда объект отходит от датчика. Ошибки продольного положения на предыдущем графике слева показывают, как продольные ошибки датчика быстро увеличиваются, когда целевое транспортное средство находится далеко от датчика. Шум продольного$2\sigma$ измерения датчика составляет менее 1 метра, когда основная истина области значений к целевому транспортному средству составляет менее 30 метров, но растет более чем до 5 метров на области значений за 70 метров от автомобиля , оборудованного датчиком.

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

Измерения бокового положения

Для строения датчика зрения, обращенного вперед, боковое положение определяется горизонтальным положением цели в изображении камеры.

В отличие от продольного положения, боковое положение объекта сильно коррелирует с его горизонтальным положением на изображении датчика зрения. Эта сильная корреляция производит точные измерения бокового положения, которые не ухудшаются быстро с расстоянием объекта от датчика. Ошибки бокового положения на предыдущем графике справа растут медленно с областью значений.$2\sigma$ Шум измерения, сообщаемый датчиком, остается ниже 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\sigma$ шум измерения во всем сценарии. Однако расстояние проезжающего автомобиля от датчика не является постоянным, но это расстояние увеличивается, когда автомобиль пропускает датчик и движется к ведущему автомобилю. Ошибки продольной скорости проходящего автомобиля (отображаемые как желтые точки) малы, когда он впервые входит в поле зрения датчика на 2 секунде. Проезжающий автомобиль близок к датчику зрения в этой точке сценария. От 2 секунд до 6 секунд проезжающая машина отходит от автомобиля , оборудованного датчиком и приближается к головной машине. Его продольная скорость ошибки расти как расстояние от увеличений датчика. Когда проезжающий автомобиль сливается в правую полосу позади головного автомобиля, он поддерживает постоянное расстояние от датчика, и его$2\sigma$ шум для измерения остается постоянным.

Поперечные скорости

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

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

Обнаружение целей с частичной окклюзией

На предыдущих графиках ошибки скорости головной автомобиль (красные точки) надежно обнаруживается в течение первых 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: 100
       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 м от датчика.

Измерения контуров маршрута и окклюзия маршрута

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

% 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: 100
       MaxAllowedOcclusion: 0.6000
        MinObjectImageSize: [15 9.4987]
          MinLaneImageSize: [20 3]

      DetectionProbability: 0.9000
    FalsePositivesPerImage: 0.1000

  Use get to show all properties

Изменение фокусного расстояния с 800 пикселей до 1200 в обоих направлениях x - и y - масштабирует камеру, позволяя ей обнаруживать в дальнейших областях значений.

Сводные данные

Этот пример продемонстрировал, как смоделировать выход автомобильных датчиков зрения с помощью синтетических обнаружений. В частности, в нем было представлено, как visionDetectionGenerator модель:

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

  • Ограничивает обнаружение в соответствии с физическими размерностями цели и окклюзией цели другими объектами в сценарии

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

  • Настраивает обнаружение объектов и маршрутов из-за монокулярных особенностей камеры.

См. также

Приложения

Объекты

Похожие темы