Привет Хабр! Это наш второй пост, он открывает серию технических публикаций. Мы решили рассказать подробнее про архитектуру CamIRa, используемые компоненты и технологии, а так же про то, как мы к этому пришли. Настала пора чем-то поделиться с сообществом, тем более уже много всего накопилось, с чем пришлось столкнуться в ходе реализации нашего первого прототипа. В этой статье мы расскажем, как прошли путь от простой программы с одним ИК-изображением, до полноценной облачной системы с личным кабинетом.
Заинтересованных просим под кат!
От появления идеи и до того, как она станет чем-то осязаемым, может пройти немало времени, на это бывает уходят месяцы, а иногда годы! Для того чтобы сократить эти самые годы хотя бы до месяца-двух, и существует прототипирование.
Сегодня доступно множество вещей для быстрого прототипирования, многие из которых доступны практически каждому. Это всевозможные одноплатные компьютеры и любительские платы с программируемыми микроконтроллерами: Raspberry Pi, Arduino, Intel Galileo и прочие. Для быстрого изготовления корпуса используется 3D печать.
Мы с самого начала владели этими инструментами, поэтому нам оставалось найти только подходящий ИК сенсор и собрать все воедино.
Подходящим для нас вариантом сенсора стал используемый в девайсе IR-Blue RHWorkshop Melexis MLX90620. Это довольно примитивный сенсор с матрицей 16х4, но уже подключенный к плате с Bluеtooth, и все исходные коды к нему доступны на GitHub. Для прототипирования самое то. Мы решили заказать готовый девайс, тем более, что заказать только сенсор у производителя оказалось гораздо сложнее.
Многие из читателей Хабра знают, как бывает сложно найти что-нибудь редкое в наших магазинах, приходится заказывать из-за «бугра», к тому же ждать недели, а то и месяцы (привет «Почте России»). Мы были готовы к этому и к многому другому от нашей родной почты, но даже не могли подумать, что может что-то случиться в службе доставки в аэропорту Лондона!
К тому моменту компания на кикстартере давно прошла, и остатки IR-Blue распродавались на сайте (RHWorkshop). Мы заказали один в сборе и один в виде набора компонентов для самостоятельной сборки, он чуть подешевле, и из него мы хотели использовать сам сенсор, даже выпаивать бы не пришлось.
По уверению продавца используемая им транспортная доставляет до Москвы за 14 дней. Продавец выслал нам трэкер, по нему мы увидели что посылка уже через пару дней после отправки из США попала в Лондон! «Отлично», подумали мы: какая скорость. После этого мы перестали следить за трэкером, расслабившись и решив, что все в порядке. Прошло 14 дней, посылки нет, отслеживаем трэкер, он показывает, что посылка все еще в Лондоне! Написали продавцу, так как он оформлял отправку, и только он может пнуть транспортную компанию. После недолгой переписки с ним выяснилось, что таможенники в Лондоне не согласны с объявленной ценой для такого типа посылок. И главное ничего не предпринимают, отослали бы обратно и все, а так просто не пропускают дальше, держат у себя! Обсудив ситуацию с продавцом, решили отозвать, перепаковать и послать двумя посылками. Пока шел процесс возврата, мы подумали, что увеличенный сбор за доставку платить не вариант, попросили вернуть деньги за набор компонентов, а послать только девайс в сборе.
Спустя две недели мы его получили. Устройство стабильно работало, но не отличалось качеством корпуса и его материалов. Впрочем, как и большинство продуктов с кикстартера. А вот ПО к нему безумно глючило и капризничало на разных телефонах и разных версиях Bluetooth. Нам с трудом удалось после длительных танцев с бубном получить картинку через родное ПО.
Поигравшись вдоволь с девайсом, накидали список компонентов для первого прототипа CamIRa:
-Raspberry Pi model B
-Arduino Uno
-Сервоприводы FS90 2 шт. fs90
-Кронштейн для сервомоторов 9g servo bracket
-RaspiCam raspicam
-Сенсор 16х4 Melexis MLX90620 в составе девайса IR-Blue
Мозгом устройства является Raspberry Pi. Общим управлением устройством, получением команд от сервера, получением видео от RaspiCam, взаимодействием с Arduino занимается Java-приложение, которое запущено на Малинке. За управление сервомоторами, а так же считывание данных с ИК-сенсора занимается Arduino (в первых версиях данные от сенсора получались напрямую по Bluetooth), которая управляется Малиной по UART/RS-232. Для этих целей пришлось даже разработать собственный текстовой протокол взаимодействия Raspberry-Arduino на базе RS-232.
В сборе все выглядит так:
Поверх разобранного девайса IR-Blue прикреплена RaspiCam с переходником для широкоугольного объектива, отпечатанным на 3D принтере. Все это установлено на кронштейн с сервомоторами и подключено к Arduino и Raspberry Pi. Кстати, нам пришлось делать свой велосипед с объективом, так как родной угол обзора (FOV) у камеры был 50 градусов, это даже меньше чем у ИК-сенсора. Инструкция по апгрейду есть на буржуйском сайте: wiki.raspberrytorte.com/index.php?title=Camera_Module_Lens_Modifcation. Небольшая загвоздка была в том, что держатели под объективы надо долго ждать с e-bay, и вдобавок расстояние между крепежными отверстиями держателей не соответствует расстоянию на плате RaspiCam. Поэтому по-быстрому была нарисована и распечатана 3D модель.
Всем желающим увеличить углы обзора RaspiCam, вот моделька переходника: file. Нужно распечатать на принтере, нарезать резьбу М12х0,5, с камеры пинцетом аккуратно выкрутить родной объектив, установить поверх переходник и вкрутить туда вот такие объективы тыц или тыц2. Наши опыты показали, что наибольший угол и наилучшее качество дает объектив Daiwon BL2120 [DW2162]. Получился FOV = 110 градусов, что вполне достаточно для обширного охвата комнаты 4х5 м2, плюс RaspiCam дает Full HD картинку.
Покончив с железом начали писать ПО для него. Изначально на изучение были взяты исходники программы IR-bluе для айфона с гитхаба. Но, как это часто бывает, разбираться в чужом коде сложнее, чем писать свой, поэтому код IR-blue использован не был. Вооружившись даташитом на датчик, приступили к разработке (к слову, чуть позже для обработки ИК-изображения был соблазн взять код проекта Хабра Пост, упоминавшегося в нашем первом посте, но, дабы не тратить время, исходники практически не были даже проинспектированы). Первая наша программа для этого «монстрика» выглядела так (это три пальца руки):
Впоследствии она легла в основу нашей служебной программы, в которой выполняется калибровка ИК-сенсоров и сервомотров. Спустя несколько недель работы окно программы стало выглядеть так:
На скриншоте программы изображение кружки с кипятком: сверху слева с сенсора в центральном положении, в центре – составное изображение за несколько перемещений сенсора (ИК снимок).
Постепенно отлаживая и тестируя функции напрямую с ПК, мы стали переносить функционал на сервер. Теперь Малина с сервером работает по HTTP/S (для потокового видео) и WebSockets/wss (для передачи команд). Серверная часть состоит из нескольких сервисов – видео-сервер и WebSocket-сервер (оба — собственные разработки на java, крутятся на Tomcat) развернуты на Azure (спасибо программе BizSpark), web-сервер с личным кабинетом – тоже Java приложение с использованием фреймворка Play!, набора Bootstrap+ jQuery и самописного JavaScript-а, развернуто на GAE.
В итоге общая архитектура взаимодействия выглядит так:
Ни скриншоте ниже виден результат работы устройства с сенсором 4x4 Omron D6T-44L-06 (Omron). В браузере в личном кабинете поверх потокового видео (online) накладывается термо-картинка.
В следующей статье мы подробнее расскажем про софтверную часть, в особенности про реализацию потокового видео с использованием RaspiCam, Raspberry Pi и различных библиотек конвертации и обработки потокового видео. Следующий пост будет полезен всем, кто хотел бы сделать из Малины полноценную систему видеонаблюдения. Если кто-то не знаком с нами, рекомендуем прочитать наш первый пост
Заинтересованных просим под кат!
Прототипирование
От появления идеи и до того, как она станет чем-то осязаемым, может пройти немало времени, на это бывает уходят месяцы, а иногда годы! Для того чтобы сократить эти самые годы хотя бы до месяца-двух, и существует прототипирование.
Сегодня доступно множество вещей для быстрого прототипирования, многие из которых доступны практически каждому. Это всевозможные одноплатные компьютеры и любительские платы с программируемыми микроконтроллерами: Raspberry Pi, Arduino, Intel Galileo и прочие. Для быстрого изготовления корпуса используется 3D печать.
Мы с самого начала владели этими инструментами, поэтому нам оставалось найти только подходящий ИК сенсор и собрать все воедино.
Покупка сенсора
Подходящим для нас вариантом сенсора стал используемый в девайсе IR-Blue RHWorkshop Melexis MLX90620. Это довольно примитивный сенсор с матрицей 16х4, но уже подключенный к плате с Bluеtooth, и все исходные коды к нему доступны на GitHub. Для прототипирования самое то. Мы решили заказать готовый девайс, тем более, что заказать только сенсор у производителя оказалось гораздо сложнее.
Многие из читателей Хабра знают, как бывает сложно найти что-нибудь редкое в наших магазинах, приходится заказывать из-за «бугра», к тому же ждать недели, а то и месяцы (привет «Почте России»). Мы были готовы к этому и к многому другому от нашей родной почты, но даже не могли подумать, что может что-то случиться в службе доставки в аэропорту Лондона!
К тому моменту компания на кикстартере давно прошла, и остатки IR-Blue распродавались на сайте (RHWorkshop). Мы заказали один в сборе и один в виде набора компонентов для самостоятельной сборки, он чуть подешевле, и из него мы хотели использовать сам сенсор, даже выпаивать бы не пришлось.
По уверению продавца используемая им транспортная доставляет до Москвы за 14 дней. Продавец выслал нам трэкер, по нему мы увидели что посылка уже через пару дней после отправки из США попала в Лондон! «Отлично», подумали мы: какая скорость. После этого мы перестали следить за трэкером, расслабившись и решив, что все в порядке. Прошло 14 дней, посылки нет, отслеживаем трэкер, он показывает, что посылка все еще в Лондоне! Написали продавцу, так как он оформлял отправку, и только он может пнуть транспортную компанию. После недолгой переписки с ним выяснилось, что таможенники в Лондоне не согласны с объявленной ценой для такого типа посылок. И главное ничего не предпринимают, отослали бы обратно и все, а так просто не пропускают дальше, держат у себя! Обсудив ситуацию с продавцом, решили отозвать, перепаковать и послать двумя посылками. Пока шел процесс возврата, мы подумали, что увеличенный сбор за доставку платить не вариант, попросили вернуть деньги за набор компонентов, а послать только девайс в сборе.
Спустя две недели мы его получили. Устройство стабильно работало, но не отличалось качеством корпуса и его материалов. Впрочем, как и большинство продуктов с кикстартера. А вот ПО к нему безумно глючило и капризничало на разных телефонах и разных версиях Bluetooth. Нам с трудом удалось после длительных танцев с бубном получить картинку через родное ПО.
Сборка
Поигравшись вдоволь с девайсом, накидали список компонентов для первого прототипа CamIRa:
-Raspberry Pi model B
-Arduino Uno
-Сервоприводы FS90 2 шт. fs90
-Кронштейн для сервомоторов 9g servo bracket
-RaspiCam raspicam
-Сенсор 16х4 Melexis MLX90620 в составе девайса IR-Blue
Мозгом устройства является Raspberry Pi. Общим управлением устройством, получением команд от сервера, получением видео от RaspiCam, взаимодействием с Arduino занимается Java-приложение, которое запущено на Малинке. За управление сервомоторами, а так же считывание данных с ИК-сенсора занимается Arduino (в первых версиях данные от сенсора получались напрямую по Bluetooth), которая управляется Малиной по UART/RS-232. Для этих целей пришлось даже разработать собственный текстовой протокол взаимодействия Raspberry-Arduino на базе RS-232.
В сборе все выглядит так:
Поверх разобранного девайса IR-Blue прикреплена RaspiCam с переходником для широкоугольного объектива, отпечатанным на 3D принтере. Все это установлено на кронштейн с сервомоторами и подключено к Arduino и Raspberry Pi. Кстати, нам пришлось делать свой велосипед с объективом, так как родной угол обзора (FOV) у камеры был 50 градусов, это даже меньше чем у ИК-сенсора. Инструкция по апгрейду есть на буржуйском сайте: wiki.raspberrytorte.com/index.php?title=Camera_Module_Lens_Modifcation. Небольшая загвоздка была в том, что держатели под объективы надо долго ждать с e-bay, и вдобавок расстояние между крепежными отверстиями держателей не соответствует расстоянию на плате RaspiCam. Поэтому по-быстрому была нарисована и распечатана 3D модель.
Всем желающим увеличить углы обзора RaspiCam, вот моделька переходника: file. Нужно распечатать на принтере, нарезать резьбу М12х0,5, с камеры пинцетом аккуратно выкрутить родной объектив, установить поверх переходник и вкрутить туда вот такие объективы тыц или тыц2. Наши опыты показали, что наибольший угол и наилучшее качество дает объектив Daiwon BL2120 [DW2162]. Получился FOV = 110 градусов, что вполне достаточно для обширного охвата комнаты 4х5 м2, плюс RaspiCam дает Full HD картинку.
Программная составляющая
Покончив с железом начали писать ПО для него. Изначально на изучение были взяты исходники программы IR-bluе для айфона с гитхаба. Но, как это часто бывает, разбираться в чужом коде сложнее, чем писать свой, поэтому код IR-blue использован не был. Вооружившись даташитом на датчик, приступили к разработке (к слову, чуть позже для обработки ИК-изображения был соблазн взять код проекта Хабра Пост, упоминавшегося в нашем первом посте, но, дабы не тратить время, исходники практически не были даже проинспектированы). Первая наша программа для этого «монстрика» выглядела так (это три пальца руки):
Впоследствии она легла в основу нашей служебной программы, в которой выполняется калибровка ИК-сенсоров и сервомотров. Спустя несколько недель работы окно программы стало выглядеть так:
На скриншоте программы изображение кружки с кипятком: сверху слева с сенсора в центральном положении, в центре – составное изображение за несколько перемещений сенсора (ИК снимок).
Постепенно отлаживая и тестируя функции напрямую с ПК, мы стали переносить функционал на сервер. Теперь Малина с сервером работает по HTTP/S (для потокового видео) и WebSockets/wss (для передачи команд). Серверная часть состоит из нескольких сервисов – видео-сервер и WebSocket-сервер (оба — собственные разработки на java, крутятся на Tomcat) развернуты на Azure (спасибо программе BizSpark), web-сервер с личным кабинетом – тоже Java приложение с использованием фреймворка Play!, набора Bootstrap+ jQuery и самописного JavaScript-а, развернуто на GAE.
В итоге общая архитектура взаимодействия выглядит так:
Ни скриншоте ниже виден результат работы устройства с сенсором 4x4 Omron D6T-44L-06 (Omron). В браузере в личном кабинете поверх потокового видео (online) накладывается термо-картинка.
В следующей статье мы подробнее расскажем про софтверную часть, в особенности про реализацию потокового видео с использованием RaspiCam, Raspberry Pi и различных библиотек конвертации и обработки потокового видео. Следующий пост будет полезен всем, кто хотел бы сделать из Малины полноценную систему видеонаблюдения. Если кто-то не знаком с нами, рекомендуем прочитать наш первый пост