Камеры и 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 Pi | UVC, V4L2, OpenCV |
| Механика | компактная, но шлейф легко повредить | кабель толще, штекер нужно фиксировать |
| Совместимость | зависит от платы, сенсора и образа Linux | UVC-камеры обычно проще проверить |
| Питание | через камерный разъём | через 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-устройства не отваливаются при движении. |
Практика
Для доступной камеры составьте карточку испытания: тип подключения, поддерживаемое разрешение, формат, частота кадров, устойчивое имя устройства и действие робота при пропаже кадра. Выполните не меньше трёх запусков, включая перезагрузку компьютера, и сравните результаты.
Работа выполнена, если программа каждый раз выбирает нужную камеру, фиксирует возраст последнего кадра и переводит исполнительную часть в безопасное состояние при остановке видеопотока.
Проверьте себя
- Чем CSI-камера отличается от USB-камеры?
- Почему шлейф камеры подключают при отключённом питании?
- Зачем проверять формат и частоту кадров до запуска алгоритма?
- Почему
/dev/video0не стоит считать постоянным именем? - Что может произойти с USB-камерой при просадке питания?
- Почему свежесть кадра важна для движущегося робота?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
- CSI — интерфейс прямого подключения совместимой камеры к плате.
- UVC — стандартный класс USB-видеоустройств.
- Частота кадров — число кадров, получаемых за секунду.
- Задержка кадра — время от съёмки изображения до использования результата программой.
- Udev — механизм Linux, с помощью которого можно назначить устройству устойчивое имя.