На Rockchip RV1103 собрали недорогую плату стереозрения с Linux

Автор блога rootkitlabs.com рассказал, как собрал недорогую и простую плату стереозрения со встроенными вычислениями и поддержкой Linux. В основе плата на Rockchip RV1103: это одноядерная система на кристалле (SoC) с ARM Cortex-A7 на 1,1 ГГц, 64 МБ оперативной памяти DDR2 и шиной MIPI CSI-2 в корпусе QFN-88. К плате подключены две камеры с драйвером OV9281. Автор видит применение в робототехнике: например, для Arduino, которому нужны обход препятствий или навигация. После включения плата передаёт данные по последовательному порту, а можно использовать её и сама по себе, как обычную плату на Linux. В ролике в статье показаны захват изображения и расчёт глубины прямо на устройстве.
Плата. Хватило недорогой четырёхслойной печатной платы. Первая ревизия почти получилась, но с ошибками: автор заказал не тот SoC, и его пришлось менять; отверстия под крепления объективов просверлены диаметром 1,8 мм вместо 2,2 мм; резисторы на 1 кОм для светодиодов оказались слишком малы, и светодиоды светили неприятно; дорожка питания 0,9 В вышла слишком тонкой, хотя, по словам автора, работала нормально.
Ядро, загрузчик и ОС. Образ системы собран через Buildroot: он объединяет загрузчик, ядро и пользовательскую часть в файл sdcard.img, который записывают на SD-карту, вставляют в плату и загружаются. Не всё нужное есть в основной ветке ядра: драйверы Rockchip MIPI, аппаратные ускорители и ряд других ключевых компонентов взяты из пакета поддержки платы от производителя (vendor BSP), а Buildroot умеет работать с ядрами вне основного дерева. Цепочка загрузки: BootROM, затем TPL (бинарный файл Rockchip, настраивает контроллер DRAM), SPL (грузит U-Boot), U-Boot (основной загрузчик, запускает ядро), Linux и система инициализации. После простой настройки Buildroot автор получил консоль по последовательному порту, а затем перешёл на SSH, используя порт USB-C как Ethernet-адаптер.
Программная часть. Камеры доступны через Video4Linux2 как узлы /dev/videoX, и на каждую камеру их приходится по 11: video0, обычный захват видео, video1-3, другие идентификаторы потоков, video4-7, масштабирователи, video8-10, вспомогательные инструменты. Управление камерой (выдержка и другие параметры) идёт через /dev/v4l-subdevX. «Видеодвижок Rockchip» (Rockchip Video Engine) доступен как /dev/rve, а работать с ним нужно через проприетарную библиотеку librve.a. Пользовательское приложение настраивает камеры, забирает кадры из /dev/videoX и отправляет их в /dev/rve.
Как считается глубина. В видеодвижок входит аппаратный блок SAD (сумма абсолютных разностей). Для двух одинаковых картинок 2×2 пикселя SAD равна нулю, а чем больше различие, тем больше сумма. Большие изображения делятся на небольшие фрагменты (патчи), и сравнение выполняется по всему кадру. Стереосопоставление блоков по SAD сравнивает вертикальную колонку патчей после горизонтального сдвига. Две камеры разнесены по горизонтали на расстояние, которое называется базой. Одно изображение остаётся неподвижным, другое сдвигается, и при совпадении блоков найденный сдвиг и есть значение глубины. Совпадение на раннем сдвиге означает далёкий объект, на более позднем, близкий.
Что дальше. Автор хочет продать несколько плат и получить отзывы. Он предлагает оставить адрес электронной почты: если запишутся больше 20 человек, он закажет ещё 10 плат со всеми исправлениями и выставит их на продажу. Это не предзаказ, и записываться просят только тех, кто всерьёз хочет поддержать проект. При достаточном интересе следующим этапом будут чистка программной части, оптимизация изображений, а также реализация SLAM и YOLO.
Ключевые факты
- Плата построена на Rockchip RV1103: одноядерный ARM Cortex-A7 на 1,1 ГГц, 64 МБ DDR2, корпус QFN-88, две камеры с драйвером OV9281, Linux собран через Buildroot.
- Глубину считает аппаратный SAD-блок (сумма абсолютных разностей) в «видеодвижке» Rockchip, доступ к нему идёт через проприетарную librve.a; часть драйверов взята из vendor BSP.
- В первой ревизии печатной платы были ошибки: не тот SoC, отверстия под объективы 1,8 мм вместо 2,2 мм, слишком малые по номиналу резисторы светодиодов (1 кОм), тонкая дорожка 0,9 В.
- Если запишутся больше 20 человек, автор закажет ещё 10 исправленных плат на продажу; это не предзаказ.
- При достаточном интересе автор планирует доработку софта, оптимизацию изображений, SLAM и YOLO.
Почему это важно
Проект показывает, что стереозрение с расчётом глубины на самом устройстве можно построить на недорогом чипе с одним ядром Cortex-A7 и 64 МБ памяти, если задействовать аппаратный блок SAD, а не считать всё на процессоре. Для любителей железа это ещё и подробный разбор полного пути: от печатной платы и цепочки загрузки до Video4Linux2 и ускорителя Rockchip.
Кому это важно
Энтузиастам робототехники и встраиваемых систем, которым нужен модуль восприятия глубины для Arduino-проектов (обход препятствий, навигация). Также тем, кто собирает образы Linux через Buildroot и сталкивается с ядрами и драйверами вендора вне основной ветки.
Как это применить
По замыслу автора, плата после включения передаёт данные по последовательному порту, так что её можно подключить к микроконтроллеру. Либо её используют как самостоятельную плату на Linux: консоль по serial или SSH через USB-C в режиме Ethernet-адаптера. Купить плату пока нельзя: автор предлагает записаться по электронной почте, и только при более чем 20 записавшихся закажет 10 плат. Цена в тексте не названа.
Можно ли доверять
Это личный блог автора, описывающего собственный проект; материал написан от первого лица. Показана демонстрация в видео, но в тексте нет цифр частоты кадров, дальности или точности измерения глубины, нет сравнения с другими стереоплатами и не указана база между камерами. Ссылок на исходный код или схемы в тексте нет. Поэтому реальные характеристики пока оценить нельзя.
Риски и подводные камни
Плата пока в виде единичных экземпляров первой ревизии с известными ошибками, а следующая партия зависит от числа желающих, сроки не названы. Работа опирается на проприетарную библиотеку librve.a и код вендора (BSP), что ограничивает открытость и переносимость решения. Планы по SLAM и YOLO условны: автор оговаривает, что они появятся только при достаточном интересе.
«Я собрал недорогую простую плату стереозрения со встроенными вычислениями и поддержкой Linux.»
— автор блога rootkitlabs.com