Перейти к основному содержимому

Камеры глубины

Камера глубины показывает обычный кадр и карту расстояний

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

Коротко

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

Зачем это нужно

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

С её помощью алгоритм может:

  • остановиться перед препятствием, занимающим опасную область;
  • отделить ближайший предмет от фона;
  • оценить ширину и высоту объекта в метрах после калибровки;
  • построить облако трёхмерных точек;
  • проверить, есть ли перед колесом ступенька или свободное место;
  • передать манипулятору примерную координату детали для захвата.

Камера глубины не делает эти решения автоматически. Она выдаёт измерения, а программа выбирает область интереса, отбрасывает недостоверные значения и формулирует условие действия.

Главная идея

Одна сцена может породить несколько согласованных, но не одинаковых представлений.

ПотокЧто хранит пиксельДля чего подходитЧего в нём нет
цветное изображение RGBкомпоненты цветараспознавание меток, формы, цветарасстояния само по себе
инфракрасное изображениеинтенсивность ИК-излученияработа алгоритма глубины, контроль засветки и текстурыготовой геометрии само по себе
карта глубинычисло в единицах устройства, переводимое в длинурасстояние, выделение ближней областидостоверного значения в каждом пикселе
облако точеккоординаты X, Y, Z, иногда цветгеометрия сцены, плоскости, объёмыгарантированно плотной и безошибочной поверхности

Путь данных удобно читать так:

сцена -> оптическое измерение -> карта глубины -> проверка качества -> геометрический признак -> действие робота

Число в карте нельзя трактовать, пока неизвестны формат и масштаб. Например, в формате Z16 RealSense хранится беззнаковое 16-битное число, а длина получается умножением на масштаб конкретного устройства. Нулевое значение в этом формате обозначает отсутствие глубины, а не объект в нулевой точке. У другого API правила могут отличаться, поэтому формат проверяют по документации драйвера.

Глубина или дальность?

В некоторых системах значением пикселя служит координата Z вдоль оптической оси, в других — расстояние вдоль луча до поверхности. Эти величины совпадают только в центре изображения. Перед вычислениями нужно проверить определение, принятое камерой и её SDK.

Как камера получает глубину

Камера глубины — название результата, а не одного физического принципа. Несколько технологий могут выдавать похожую матрицу чисел.

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

Это не рейтинг «лучше — хуже». Рабочий метод выбирают по расстоянию, размеру объекта, движению, освещению, доступной вычислительной мощности и требованиям безопасности. Даже две камеры одного принципа могут иметь разные диапазоны, поля зрения и правила выдачи недостоверных пикселей.

Пассивное стерео, структурированный свет и ToF получают глубину разными способами

Пассивное и активное стерео

Стереосистема смотрит на сцену из двух точек. После калибровки и ректификации соответствующие детали ищут вдоль согласованных строк. Разница горизонтальных координат называется диспаратностью d.

В упрощённой идеальной модели:

Z = f × B / d

где Z — глубина, f — фокусное расстояние в пикселях, B — расстояние между оптическими центрами камер, а d — диспаратность в пикселях. Если f = 600 px, B = 0,05 m, d = 30 px, модель даёт Z = 1 m.

Из формулы видно: маленькая ошибка диспаратности сильнее влияет на далёкие объекты, где сама диспаратность мала. В реальной программе используют параметры калибровки и функции SDK, а не измеряют базу линейкой и не подставляют число из рекламной таблицы.

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

Структурированный свет

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

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

Камера ToF

ToF расшифровывается как time of flight, «время пролёта». Активный излучатель освещает сцену модулированным светом, а матрица приёмников оценивает задержку по фазовому сдвигу принятого сигнала. Каждый канал получает информацию о дистанции без поиска одинаковой детали на двух обычных кадрах.

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

Как из пикселя получается точка

У карты глубины есть координаты пикселя (u, v) и значение Z. Для перехода к трёхмерной точке нужны внутренние параметры камеры:

X = (u - cₓ) × Z / fₓ
Y = (v - cᵧ) × Z / fᵧ
Z = Z

fₓ, fᵧ — фокусные расстояния в пикселях, а cₓ, cᵧ — главная точка. Полная модель учитывает искажения объектива. SDK обычно предоставляет готовую операцию депроекции, потому что ручная формула легко ломается при другой модели искажений.

У цветной и глубинной камер могут быть разные оптические центры. Пиксель (200, 100) в одном потоке не обязан смотреть на тот же участок сцены в другом. Выравнивание преобразует координаты через известные внутренние и внешние параметры. На границах объектов после преобразования могут появиться пустоты: одна камера видит участок, который закрыт для другой.

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

Программа должна различать число и отсутствие числа

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

from statistics import median

depth_mm = [
[0, 835, 842, 0],
[828, 831, 4200, 839],
[0, 826, 834, 841],
]

valid = [
value
for row in depth_mm
for value in row
if 200 <= value <= 4000
]

if len(valid) >= 6:
obstacle_distance_m = median(valid) / 1000
print(round(obstacle_distance_m, 3))
else:
print("недостаточно данных")

Границы 200 и 4000 здесь относятся только к учебному набору. Для реальной камеры их выбирают по документации, режиму и испытанию. Вместе с медианой стоит сохранять долю валидных пикселей: число 0,83 m не должно выглядеть одинаково убедительным при 95% и при 5% заполнения области.

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

Примеры в роботе

Безопасная зона перед шасси

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

Выбор детали для манипулятора

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

Проверка края платформы

Камера установлена с наклоном вниз. На ровном полу ожидается полоса валидной глубины. Резкий разрыв может означать край, но также тень активного рисунка или отражающую поверхность. Алгоритм подтверждает событие на нескольких областях и кадрах, учитывает наклон корпуса по IMU и выбирает безопасную остановку при недостатке данных.

Что запомнить про камеру глубины

Карта глубины — измерительное изображение, а не раскрашенная фотография. Способ её получения влияет на ошибки. Для робота важны не только числовая дистанция, но и формат, масштаб, валидность, калибровка, временная метка и система координат. Переход к X, Y, Z не улучшает плохой исходный пиксель: сначала проверяют измерение, затем строят геометрию.

Практика

Задание 1. Потоки и координаты

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

Задание 2. Стереомодель

Для f = 720 px и B = 0,06 m рассчитайте глубину при нескольких значениях диспаратности. Затем добавьте к каждому значению ошибку в один пиксель и сравните изменение глубины на близком и далёком объекте. Сформулируйте вывод без готового универсального диапазона камеры.

Задание 3. Область остановки

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

Задание 4. Проверка материалов

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

Проверьте себя

  • Чем пиксель цветного изображения отличается от пикселя карты глубины?
  • Почему ноль в глубинном формате нельзя автоматически считать нулём метров?
  • Что такое диспаратность и как она связана с глубиной в идеальной стереомодели?
  • Зачем активному стерео ИК-проектор?
  • Чем принцип ToF отличается от поиска соответствий в стереопаре?
  • Какие параметры нужны для перехода от (u, v, Z) к (X, Y, Z)?
  • Почему одинаковые координаты пикселя в RGB и depth могут смотреть на разные точки?
  • Что кроме медианы нужно проверить перед командой движения?
Ориентиры для самопроверки

Сначала ответьте без подсказки. Ответ можно считать полным, если вы:

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

Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.

Словарь статьи

  • Карта глубины — матрица, где значение пикселя кодирует измеренную дистанцию по правилам конкретной системы.
  • Диспаратность — смещение соответствующей детали между изображениями стереопары.
  • База стереопары — расстояние между оптическими центрами двух камер.
  • Ректификация — преобразование стереокадров, упрощающее поиск соответствий по согласованным строкам.
  • Структурированный свет — измерение формы по искажению известного проецируемого рисунка.
  • ToF — метод оценки расстояния по времени пролёта или фазе модулированного света.
  • Внутренние параметры — фокусные расстояния, главная точка и модель искажений камеры.
  • Внешние параметры — поворот и смещение между системами координат сенсоров.
  • Депроекция — преобразование пикселя и глубины в трёхмерную точку.
  • Облако точек — набор трёхмерных координат измеренных участков сцены.
  • Невалидный пиксель — позиция, для которой камера не смогла выдать допустимую глубину.

Связанные темы

Источники