Тир на Raspberry, версия 2.0
Статья о дальнейшем улучшении прошлой версии тира geektimes.ru/post/255350
Пользоваться тиром дома быстро наскучило, поэтому, на радость коллегам, он был установлен на работе. Однако после непродолжительной эксплуатации был выявлен ряд недостатков:
- «игрушечность» и непрактичность пистолета
- необходимость кропотливой калибровки
- пропуски выстрелов
- перспективные искажения камеры и вследствие — значительные погрешности
- система подсчета очков без округления
Все это было исправлено в новой версии.
Перво-наперво пистолет был заменен на увесистый и солидный — страйкбольный:
Был удален ствол и установлен лазер.
Вместо arduino была собрана простая схема управления. Так как контакты в пистолете только на замыкание, пришлось изощряться:
Изначально мотор пистолета не отключал — он работал с имитацией отдачи и громким хлопком выстрела. Но, не смотря на бурный восторг стреляющих, от данной опции пришлось отказаться, так как она отвлекала коллег по работе.
Мишени были добавлены маркеры для калибровки:
Алгоритм поиска маркеров сделал простой, но достаточно надежный. Сначала выполняется поиск всех углов на изображении. Затем происходит поиск углов, у которых рядом четыре соседа и проверка, что линии, их соединяющие, образуют угол не менее 45 градусов. По найденным углам мишени однократно строится матрица преобразования из перспективного пространства в пространство абстрактной мишени.
30 кадров в секунду от USB камеры не устраивали, по этому камера была заменена на аппаратную. Заодно, малинка была заменена на Raspberry Pi 2. После этого получилось добиться частоты обновления порядка 80 кадров в секунду, что полностью решило проблему пропусков выстрелов. Так же улучшил алгоритм поиска пятна лазера. Теперь изображение предварительно размывается для усреднения и используется для компенсации разницы яркостей в пределах кадра. Это позволило тиру работать при любом освещении.
Так же программа была переписана с питона на C++. Для ее сборки на малинке требуется собранный OpenCV. Исходники здесь github.com/DIMOSUS/Laser-shoting-2.0
Теперь тир вновь радует коллег. Мой персональный рекорд 92 из 100 с 10 метров.