Хабрахабр

StereoPi — наша железка для изучения компьютерного зрения, дронов и роботов

Всем привет!
Сегодня я бы хотел рассказать вам о нашей новой железке на базе Raspberry Pi Compute Module, предназначенной для изучения компьютерного зрения и установки на роботов и дронов. По сути это «умная» стереокамера — она поддерживает работу с двумя камерами одновременно, имеет в качестве «сердца» настоящую малину и, самое важное – работает со стоковой версией Raspbian.
Вот как выглядит собранное решение, с установленными двумя камерами и Pi Compute модулем.

Вам нужно только скопировать наш файлик dtblob.bin для того, чтобы включить поддержку двух камер.
Это означает, что вы можете использовать привычные raspivid, raspistill и другие утилиты для работы с изображениями и видео.
Для справки, поддержка режима стерео появилась в Raspbian аж в 2014 году, одновременно с выходом первой версии Raspberry Pi Compute. image
Устройство работает со стоковой версией Raspbian. Вы можете посмотреть историю разработки поддержки стереорежима на форуме Raspberry.

Перед описанием технических деталей позвольте показать вам несколько реальных примеров работы устройства.

1. Захват изображения

Код:

raspistill -3d sbs -w 1280 -h 480 -o 1.jpg

и вы получаете следующее:
image
Вы можете скачать оригинальное захваченное изображение вот тут.

2. Захват видео

Код:

raspivid -3d sbs -w 1280 -h 480 -o 1.h264

и вы получаете следующее:
image
Вы можете скачать оригинальный видеофайл (конвертирован в mp4) по этой ссылке.

3. Использование Python и OpenCV для построения карты глубин

image
В этом случае я использовал слегка модифицированный код из предыдущего проекта 3Dberry (https://github.com/realizator/3dberry-turorial).

Для получения этих картинок и видео мы использовали вот такую пару камер:

image

Для установки на дронов чаще используем широкоугольные (160 градусов), вот такие:

image

Теперь чуть подробнее про саму железку.

Технические детали

Вид спереди:
image

Вид сверху:
image

Больше никаких втыканий-вытыканий MicroUSB провода для ребута по питанию! Основные характеристики:
Размеры: 90x40 mm
Камеры: 2 x CSI 15 lanes cable
GPIO: 40 classic Raspberry PI GPIO
USB: 2 x USB type A, 1 USB on a pins
Ethernet: RJ45
Память: Micro SD (for CM3 Lite), у остальных NAND (flash)
Монитор: HDMI out
Питание: 5V DC
Поддерживаемые малины: Raspberry Pi Compute Module 3, Raspberry Pi CM 3 Lite, Raspberry Pi CM 1
Типы поддерживаемых камер: Raspberry Pi camera OV5647, Raspberry Pi camera Sony IMX 219, HDMI In (одиночный режим)
Для прошивки NAND: MicroUSB connector
Выключатель питания: Да-да, это он.

Немножко истории

Вообще затея сама появилась еще в 2015 году. Первая версия родилась в конце 2015 года. Некоторые знают, что у нашей команды есть «пунктик» на удаленном управлении разными механическими штуковинами, поэтому в первом релизе на борту был установлен дополнительный чип, дававший нам 16 PWM выходов — для руления сервами, моторчиками и прочими полезностями.

image

Железка прекрасно справлялась с захватом, сжатием и стримом видео, но в конце концов мы уперлись именно в процессор. К тому моменту на рынке была только первая версия Compute модуля, на борту которой стоял старый процессор от самой первой распберри. А для роботостроителей основной хотелкой стало построение карты пространства по карте глубин и SLAM — тут процессора не хватало совсем. Например, её уже не хватало для одновременно стрима h264 пилоту и RTMP стрима на сервер.

image

Они сразу «перепрыгнули» с первой версии на третью, поставив процессор от третьей Raspberry. У тут на тебе — выходит версия Compute Module 3. Тот факт, что Compute Module 3 был на миллиметр шире нас не смутил. Теперь его мощности уже было достаточно, чтобы что-то обсчитывать на лету.
Однако оказалось что поколения вроде как и совместимы, а вроде как и не очень. А вот требования к питанию серьезно поменялись.

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

Что исправлено во втором поколении

Выбор тут простой: если нужно только транслировать видео — прекрасно хватает первой малины. Добавили поддержку Compute Module 3
У нас переключаемая схема питания, так что при желании можно работать и с первой малиной. А нужно посчитать что-то посерьезнее (несколько видео либо компьютерное зрение) — ставим третью. В качестве бонуса идет её почти в три раза меньшее энергопотребление и тепловыделение.

На Compute Module 1 это проблем не вызывало — проц грелся слабо, и узкого места между платами ему хватало для нормлаьного охлаждения. Развернули модуль «чипами от платы»
В первой версии перепутали тип разъема SoDIMM на плате, в результате компьют-модуль вставал чипами «к мамке». С третьим такой фокус бы не прокатил, поэтому мы «перевернули» коннектор, что повлекло за собой переразводку всей платы с чистого листа.

Мы попытались привесить туда MicroSD как второй накопитель, но столкнулись с большим головняком по его поддержке. Штатная поддержка MicroSD
Первый компьют-модуль по умолчанию имел встроенную FLASH на борту и с микросд работать не умел. В итоге на текущей ревизии мы сделали разводку как на референсной devboard от малины. Общение с кернельщиками на малиновом форуме показало, что проблема непростая (при загрузке модуль рандомно выбирал NAND или MicroSD для бута). Если версия не Lite или первый модуль — микросд недоступна. Если Compute Module Lite — без встроенной NAND — работаем с микросд как в обычной малине.

Мелочь, но после множества установок в корпуса выяснилось несколько проблем.
Переместили коннекторы камер наверх и разнесли на 65 мм
В первой версии коннекторы были направлены вдоль плоскости платы.

  • Из коннекторов торчит шлейф камеры, который желательно не гнуть (особенно синюю армированную часть). Это тупо занимало ненужное место в корпусе и мешало установке.
  • Коннекторы были совсем рядом — это мешало работать со шлейфами.
  • Камеры в корпусе обычно стоят на 65 мм стереобазу, а шлейфы на плате были рядом. Получается что каждый шлейф приходилось неестественно изгибать — надломы, разрывы, выскакивание из коннекторов.

Чаще всего хватает и программных PWM малины. Убрали чип и дополнительные 16 PWM.
Проанализировав множество последних проектов поняли, что фича эта неактуальна.

🙂 Добавили выключатель питания.
Те кто хоть немного работал с малиной понимают о чем речь.

Если их втыкать в разъемы на плате — имеем торчащий далеко наружу модуль. Добавили третий USB на пинах сбоку
В наших малиновых проектах нам часто нужны USB донглы на борту. Оставался один вариант — пайка проводками напрямую к малине. Попытка воспользоваться USB удлинителем еще больше усугубляет проблему. Добавленные нами боковые пины позволяют сделать простой удлинитель и расположить USB донгл (чаще WiFi или 4G) прямо вдоль платы, и всё это хозяйство прекрасно помещается в компактный корпус.

Спасибо за внимание и готов ответить на вопросы. Вот такую вот историю я хотел вам сегодня поведать.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»