Тир на Raspberry, версия 2.0

в 9:31, , рубрики: diy или сделай сам, linux, opencv, Raspberry Pi

Тир на Raspberry, версия 2.0 - 1
Статья о дальнейшем улучшении прошлой версии тира geektimes.ru/post/255350
Пользоваться тиром дома быстро наскучило, поэтому, на радость коллегам, он был установлен на работе. Однако после непродолжительной эксплуатации был выявлен ряд недостатков:

  • «игрушечность» и непрактичность пистолета
  • необходимость кропотливой калибровки
  • пропуски выстрелов
  • перспективные искажения камеры и вследствие — значительные погрешности
  • система подсчета очков без округления

Все это было исправлено в новой версии.

Перво-наперво пистолет был заменен на увесистый и солидный — страйкбольный:
Тир на Raspberry, версия 2.0 - 2

Был удален ствол и установлен лазер.
Тир на Raspberry, версия 2.0 - 3

Вместо arduino была собрана простая схема управления. Так как контакты в пистолете только на замыкание, пришлось изощряться:
Тир на Raspberry, версия 2.0 - 4

Изначально мотор пистолета не отключал — он работал с имитацией отдачи и громким хлопком выстрела. Но, не смотря на бурный восторг стреляющих, от данной опции пришлось отказаться, так как она отвлекала коллег по работе.

Мишени были добавлены маркеры для калибровки:

Изображение кликабельно

Тир на Raspberry, версия 2.0 - 5

Алгоритм поиска маркеров сделал простой, но достаточно надежный. Сначала выполняется поиск всех углов на изображении. Затем происходит поиск углов, у которых рядом четыре соседа и проверка, что линии, их соединяющие, образуют угол не менее 45 градусов. По найденным углам мишени однократно строится матрица преобразования из перспективного пространства в пространство абстрактной мишени.
Тир на Raspberry, версия 2.0 - 6

30 кадров в секунду от USB камеры не устраивали, по этому камера была заменена на аппаратную. Заодно, малинка была заменена на Raspberry Pi 2. После этого получилось добиться частоты обновления порядка 80 кадров в секунду, что полностью решило проблему пропусков выстрелов. Так же улучшил алгоритм поиска пятна лазера. Теперь изображение предварительно размывается для усреднения и используется для компенсации разницы яркостей в пределах кадра. Это позволило тиру работать при любом освещении.
Тир на Raspberry, версия 2.0 - 7

Так же программа была переписана с питона на C++. Для ее сборки на малинке требуется собранный OpenCV. Исходники здесь github.com/DIMOSUS/Laser-shoting-2.0
Теперь тир вновь радует коллег. Мой персональный рекорд 92 из 100 с 10 метров.
Тир на Raspberry, версия 2.0 - 8

Автор: DIMOSUS

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js