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

Обычная камера сообщает, какого цвета или яркости каждый участок изображения. Камера глубины добавляет ещё одно наблюдение: оценку расстояния для пикселей. Робот может не только заметить коробку, но и проверить, насколько близко она находится и где её поверхность расположена в пространстве.
Карта глубины похожа на изображение, но значение пикселя означает не цвет, а измеренную дистанцию. Цветовой кадр и глубина остаются разными потоками данных: у них могут отличаться разрешение, поле зрения, момент съёмки и система координат. Чтобы использовать их вместе, нужны калибровка, синхронизация и проверка пропущенных измерений.
Зачем это нужно
Робот видит на цветном кадре два одинаковых серых прямоугольника. Один может быть маленькой коробкой рядом, а второй — большой стеной дальше. По одной яркости это не всегда понятно. Карта глубины добавляет геометрическую подсказку.
С её помощью алгоритм может:
- остановиться перед препятствием, занимающим опасную область;
- отделить ближайший предмет от фона;
- оценить ширину и высоту объекта в метрах после калибровки;
- построить облако трёхмерных точек;
- проверить, есть ли перед колесом ступенька или свободное место;
- передать манипулятору примерную координату детали для захвата.
Камера глубины не делает эти решения автоматически. Она выдаёт измерения, а программа выбирает область интереса, отбрасывает недостоверные значения и формулирует условие действия.
Главная идея
Одна сцена может породить несколько согласованных, но не одинаковых представлений.
| Поток | Что хранит пиксель | Для чего подходит | Чего в нём нет |
|---|---|---|---|
цветное изображение RGB | компоненты цвета | распознавание меток, формы, цвета | расстояния само по себе |
| инфракрасное изображение | интенсивность ИК-излучения | работа алгоритма глубины, контроль засветки и текстуры | готовой геометрии само по себе |
| карта глубины | число в единицах устройства, переводимое в длину | расстояние, выделение ближней области | достоверного значения в каждом пикселе |
| облако точек | координаты X, Y, Z, иногда цвет | геометрия сцены, плоскости, объёмы | гарантированно плотной и безошибочной поверхности |
Путь данных удобно читать так:
сцена -> оптическое измерение -> карта глубины -> проверка качества -> геометрический признак -> действие робота
Число в карте нельзя трактовать, пока неизвестны формат и масштаб. Например, в формате Z16 RealSense хранится беззнаковое 16-битное число, а длина получается умножением на масштаб конкретного устройства. Нулевое значение в этом формате обозначает отсутствие глубины, а не объект в нулевой точке. У другого API правила могут отличаться, поэтому формат проверяют по документации драйвера.
В некоторых системах значением пикселя служит координата Z вдоль оптической оси, в других — расстояние вдоль луча до поверхности. Эти величины совпадают только в центре изображения. Перед вычислениями нужно проверить определение, принятое камерой и её SDK.
Как камера получает глубину
Камера глубины — название результата, а не одного физического принципа. Несколько технологий могут выдавать похожую матрицу чисел.
| Метод | Что наблюдает система | Что требуется | Типичные причины пропусков или ошибок |
|---|---|---|---|
| пассивное стерео | смещение одной детали между левой и правой камерами | две откалиброванные камеры и различимая текстура | однотонная поверхность, повторяющийся рисунок, малая разница между кадрами |
| активное ИК-стерео | стереосмещение, дополненное точечным ИК-рисунком | две камеры и проектор | яркий внешний ИК-свет, взаимное влияние проекторов, слабое отражение |
| структурированный свет | деформацию заранее известного проецируемого рисунка | проектор и камера, откалиброванные как система | внешняя засветка, блеск, прозрачность, тени рисунка |
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— метод оценки расстояния по времени пролёта или фазе модулированного света.- Внутренние параметры — фокусные расстояния, главная точка и модель искажений камеры.
- Внешние параметры — поворот и смещение между системами координат сенсоров.
- Депроекция — преобразование пикселя и глубины в трёхмерную точку.
- Облако точек — набор трёхмерных координат измеренных участков сцены.
- Невалидный пиксель — позиция, для которой камера не смогла выдать допустимую глубину.
Связанные темы
- Камеры — как получается обычный кадр и зачем нужны экспозиция, разрешение и калибровка.
- Лидары — как робот получает набор расстояний сканированием луча.
- Фильтрация данных с датчиков — как фильтровать, синхронизировать и объединять измерения.
- Ограничения сложных сенсоров — как освещение, поверхности, частота и вычисления влияют на результат.