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

Камеры и USB-устройства

CSI-камера, одноплатный компьютер и USB-камера

Камера даёт роботу зрение: линию, метки, препятствия, детали или положение объекта. USB подключает не только камеры, но и лидары, геймпады, накопители, USB-UART адаптеры и другие устройства. Для Linux это разные классы устройств, но логика проверки похожа.

Коротко

Камера считается подключённой только после проверки всей цепочки: физический разъём, питание, драйвер, программный интерфейс, формат потока, частота кадров и поведение при сбое. Номер /dev/video0 не должен быть единственным способом узнать нужную камеру.

CSI и USB

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

USB-камера подключается как внешнее устройство. Если она поддерживает UVC, Linux обычно видит её как V4L2-устройство. Такой вариант проще переносить между компьютерами, но USB-кабель нужно закрепить от вибрации, а питание и пропускную способность проверить под нагрузкой.

СвойствоCSI-камераUSB-камера
Физическое подключениеFFC/FPC-шлейф в разъём камерыUSB-кабель в хост-порт
Программный путьlibcamera, Picamera2, rpicam-apps на Raspberry PiUVC, V4L2, OpenCV
Механикакомпактная, но шлейф легко повредитькабель толще, штекер нужно фиксировать
Совместимостьзависит от платы, сенсора и образа LinuxUVC-камеры обычно проще проверить
Питаниечерез камерный разъёмчерез USB или активный хаб

От устройства до кадра

Путь от камеры до кадра в памяти программы

Путь кадра состоит из нескольких уровней:

УровеньЧто проверяют
Разъём и кабельправильный шлейф, ориентация, полная посадка, отсутствие перегиба
Питаниекамера не отключается при движении робота и работе других USB-устройств
Драйвер ядраустройство обнаруживается и создаёт нужные интерфейсы
Камерный стекlibcamera, V4L2 или UVC видят сенсор и режимы
Формат потокаразрешение, частота кадров, формат пикселей или сжатие
Алгоритмполучает свежие кадры и не использует устаревшее изображение

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

Разрешение, формат и задержка

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

ПараметрЧто меняет
Разрешениебольше пикселей — больше данных и времени обработки
Частота кадровбольше кадров — выше нагрузка на интерфейс и CPU/GPU
Форматнесжатый поток проще обрабатывать, сжатый экономит USB, но требует декодирования
Экспозициявлияет на смаз и задержку при слабом освещении
Очередь кадровстарые кадры могут привести к запоздалой команде движения

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

Постоянное имя устройства

Имена /dev/video0, /dev/video1 назначаются при обнаружении устройств и могут поменяться после перезагрузки или перестановки USB-кабеля. Поэтому в проекте фиксируют способ отличить нужную камеру:

СпособКогда полезен
/dev/v4l/by-id/у камеры есть уникальный идентификатор
/dev/v4l/by-path/важно подключение к конкретному USB-порту
udev-правилонужны собственные устойчивые имена
проверка свойств устройстваиспользуется несколько похожих камер

Для USB-UART адаптеров действует та же идея: лучше постоянная ссылка из /dev/serial/by-id/, чем случайный /dev/ttyUSB0.

Питание и устойчивость USB

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

Что проверяют на стенде:

  • суммарный ток USB-устройств;
  • качество и длину кабелей;
  • работу камеры при включении моторов;
  • отсутствие перезапусков платы;
  • стабильность имён устройств после перезагрузки;
  • температуру и нагрузку при длительной обработке.

Что проверить перед заездом

ПроверкаЗачем она нужна
Камера обнаруживается после холодного стартаРобот не должен зависеть от ручного переподключения.
Выбран правильный видеорежимАлгоритм получает ожидаемый размер и формат кадра.
Имя устройства устойчивоПрограмма не открывает случайную камеру.
Потеря кадра обработанаСтарая команда движения не остаётся активной.
Кабель закреплёнВибрация не отключает камеру.
Питание выдерживает нагрузкуUSB-устройства не отваливаются при движении.

Практика

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

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

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

  1. Чем CSI-камера отличается от USB-камеры?
  2. Почему шлейф камеры подключают при отключённом питании?
  3. Зачем проверять формат и частоту кадров до запуска алгоритма?
  4. Почему /dev/video0 не стоит считать постоянным именем?
  5. Что может произойти с USB-камерой при просадке питания?
  6. Почему свежесть кадра важна для движущегося робота?
Ориентиры для самопроверки

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

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

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

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

  • CSI — интерфейс прямого подключения совместимой камеры к плате.
  • UVC — стандартный класс USB-видеоустройств.
  • Частота кадров — число кадров, получаемых за секунду.
  • Задержка кадра — время от съёмки изображения до использования результата программой.
  • Udev — механизм Linux, с помощью которого можно назначить устройству устойчивое имя.

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

Источники