Перчатка. Про алгоритм распознавания.

Aug 12, 2013 22:57

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

Первоначальный алгоритм (написанный к Комкону и просуществовавший до лета) действовал следующим образом: с перчатки были сняты эталонные значения, по 18 каналам (6 акселерометров, по 3 оси с каждого). Далее в каждом канале производилось сравнение текущего значения с эталонным, если отклонение укладывалось в заданный диапазон, жест считался выполненным. В промежутке между жестами последовательности можно было делать что угодно, главное было не сделать неуместный жест, который перчатка бы знала. Все остальные положения игнорировались.
Данная версия была адекватна, при наличии одной перчатки: через некоторое время тренировок народ к ней приспосабливался и начинал делать знаки уверенно. К сожалению, при тиражировании это подход оказался неприменим: на разных перчатках положение датчиков немного, но различается, а увеличение допуска приводило к зашкаливающему количеству ложных срабатываний, которые рушили последовательность.

В следующей версии алгоритма было привнесено два важных изменения. Первое: перчатка обращала внимание только на осмысленные последовательности жестов, зато добавилось ограничение по времени. То есть, после выполнения жеста инициализации перчатка дает игроку время сделать жест силы, или жест инициации другого знака. Любые другие жесты игнорируются. После выполнения жеста силы ожидается жест исполнения того знака, инициация которого была проведена, или жест новой инициации.
Также была предпринята попытка уйти от ускорений и оперировать углом между эталонным и текущим значением. Эта идея не прижилась: несмотря на то, что она позволяла задавать отклонение не в условных единицах, а в градусах, сокращение метрики пространства с 18 до 6 крайне отрицательно сказалось на балансе между качеством распознания и ложными срабатываниями.

В третьей версии концепция осмысленных последовательностей сохранилась, но произошел возврат к ускорениям. Главным же отличием от первой версии стала статистика: вместо одного эталонного значения (один человек с одной перчаткой) было снято множество экспериментальных данных, как разные люди делают жесты в разных перчатках. Для группы показаний, относящихся к одному жесту мы строим гиперсферу, описывающие их (точнее, 80%). Центр этой сферы прошивается в перчатку как эталонное значение, а радиус - как допустимое отклонение (ну и 20% накидывается про запас). К слову, отклонение меряется не по каждой оси, а именно как длина вектора, т.е. от гиперкуба, который был в первой версии мы перешли к гиперсфере, которая дает меньше ложных срабатываний. Сейчас система выглядит доброй (Laellin даже считает, что слишком доброй), но зато робастной. Осталось проверить на игроках.

В качестве бонуса: первая дуэль на перчатках :)

firmware, alea, Крэйл, Отчет, Камилл, Перчатка

Previous post Next post
Up