6 марта 2009, 17:12 (5740 дней назад, №8761)Еще раз о танцах и современных технологиях - определение точных координат объектов в помещении.
Занимаясь, уже около полутора лет аргентинским танго, время от времени возникают мысли о применении в этой области различных технологий (думаю, это характерно для любого IT'шника). Очередная такая мысль даже дошла до этапа обсуждения и оценок способов реализации и затрат. На этом она пока и заглохла - ниже узнаете почему.
Сначала небольшое лирическое отступление для тех, кто не в теме:
В аргентинском танго партнёр ведёт партнёршу на все шаги и движения (т.е. она не знает заранее, каким будет следующее движение и не должна угадывать). Ведение партнёр осуществляет движениями/скрутками корпуса, которые передаются через руки и ощущаются партнёршей. Именно это (а не просто перемещение рук) ей воспринимается как ведение. К примеру, чтобы сделать вместе с партнёршей шаг вперед, партнёр сначала ведёт её на этот шаг и только после этого идёт сам (иначе наступит на ногу). Со стороны эта небольшая задержка практически незаметна. Направление ведения и собственные шаги совсем необязательно должны совпадать. Можно, к примеру, повести партнёршу в сторону или развернуть, а самому шагнуть на её место.
Естественно, чтобы всё это работало, да еще к обоюдному удовольствию, необходимы навыки и техника, которые очень плохо формализованы и, в результате, чтобы научиться прилично танцевать - партнёру нужно в среднем от двух лет интенсивных занятий, причём обязательно в паре (партнёрше обычно меньше).
Это было лирическое отступление. Теперь, к чему я клоню:
Идея была в том, чтобы отслеживать перемещение пары на танцполе, причём не просто пары, а 10-20 конкретных точек на теле партнёра и партнёрши - ноги, руки, корпус, голова.
Смысл в двух вещах: во-первых, можно сделать очень красивую визуализацию танца, во-вторых, что особенно интересно, открывается возможность очень эффективных тренировок, причем ряд достаточно нудных вещей можно тренировать без партнёра/партнёрши.
К примеру, возьмём то же ведение. Базовая вещь - научить партнёра сначала вести, потом шагать (а не наоборот). Решение тривиальное - отслеживаем, какие точки начали перемещаться раньше. Если, к примеру, колени начали перемещаться вперёд раньше, чем корпус - включаем сирену (или осуждающе бьём током в мозг :) Фактически, замена недовольного ворчания/визга партнёрши (при наступании ей на ноги или пинании коленками :)
Другой пример - баланс. Ходим, вращаемся и отслеживаем, чтобы несколько контрольных точек (на стопах-корпусе-голове) находились на вертикали, с небольшими допустимыми отклонениями.
Это, конечно, простые примеры. Можно сделать куда более хитро - попросить пошагать/потанцевать преподавателя или какого-нибудь более-менее знаменитого аргентинца, записать траектории всех точек на теле (с учётом изменения во времени), сгладить (взять несколько промежуточных точек, по ним заново построить кривые) и выбрать более-менее изолированный фрагмент - например, несколько шагов или поворот на ноге.
Далее, смотрим как перемещаются те же точки на ученике - и добиваемся, чтобы кривые получались похожими. Думаю, углубляться в математику тут не стоит - решения такого рода задач известны.
Вот такая вот мысль.
Но, как всегда, дьявол кроется в мелочах. В данном случае основная проблема - отслеживание перемещения множества точек по трём координатам с высокой точностью (1-2 сантиметра) .
Собственно, изначально мне показалось, что найдено красивое решение (из чего и пошли все дальнейшие рассуждения). Это решение основано на использовании 3D акселерометров (датчики ускорения). Сейчас появились достаточно дешевые хорошие железки , причем есть почти готовые - когда на одной плате размером в треть спичечного коробка смонтированы:
- трёхкоординатный акселерометр с цифровым выходом
- ZigBee (беспроводная связь в радиусе пары-тройки метров)
- микропроцессор, различная обвязка
Как все вы знаете (да, издеваюсь :) по ускорению можно двойным интегрированием получить координаты.
Таким образом, предполагалась следующая схема: развешиваем десяток таких датчиков-плат на человеке. В карман ему кладём устройство, которое будет с этих датчиков собирать информацию по ZigBee, упаковывать и передавать дальше на удаленный компьютер (10-15 метров), к примеру, через WiFi (там получается порядочно - каждую миллисекунду надо получать три координаты и плюс отсчет времени - грубо 64кб в секунду).
Во всей этой красоте есть существенный недостаток. Дело в том, что очень быстро будет накапливаться большая погрешность, которая предположительно превысит само изменение координат уже через секунды после начала измерений.
(на самом деле, одна из причин написания этого текста в том, чтобы это моё предположение кто-нибудь аргументированно опроверг :)
Это связано с двумя причинами:
1.Для танца характерны частые изменения направления и ускорений
2.Акселерометры будут реагировать на повороты (ускорение свободного падения и кориолисово ускорение). Чтобы это компенсировать, пришлось бы навешивать туда еще и гироскопы, у которых также будет накапливаться погрешность (единицы градусов в минуту).
Наверное некоторые из читающих в курсе, что существует такая вещь как инерциальные навигационные системы, которые используются в самолётах, баллистических и крылатых ракетах и т.п. вместо и в дополнение к спутниковым системам позиционирования. Там тоже акселерометры+гироскопы, только более точные. Так вот даже там (при достаточно равномерном перемещении!) за час полёта накапливается погрешность в районе 1-5 километров.
В итоге, если рассуждения верны, такое красивое решение не будет работать (точнее будет, но данные будут иметь весьма сомнительную ценность - годную разве что для красивой визуализации или распознавания характерных движений [1] ).
Другое дело, что с акселерометрами можно решить более узкую задачу - допустим, обучение тому же ведению (см. выше), оценивая только изменение ускорения в определенном направлении за короткий промежуток времени.
Были попытки продумать другие варианты. В принципе, все альтернативные решения основаны на измерении времени распространения сигнала от неподвижного источника до точки на теле. Наиболее простые подходы в этой области - инфракрасное излучение, свет, ультразвук - не годятся, т.к. требуют прямой видимости и, следовательно, максимум что можно - отслеживать координаты просто пары в пустом зале.
( живодёрские варианты с гамма-, рентгеновским и прочим жёстким электромагнитным излучением мы рассматривать по некоторым причинам не будем :)
Остаются старые добрые радиоволны, в районе единиц гигагерц. Первое что вспоминается - радиолокация. Представляется, что такое устройство будет слишком сложным, тем более с механической сканирующей частью которая не даст нужной скорости сканирования.
Второе - старый добрый GPS. Отпадает, ввиду 1) недостаточной точности (в базовом варианте). 2) в помещении спутниковый сигнал не принять.
Однако, ничто не мешает повторить функциональность спутников локально - в виде устройств внутри помещения. Т.е. ставим в комнате несколько передатчиков которые излучают сигналы, фазы которых точно синхронизированы.
Соответственно, приемникам на теле остаётся померять разность фаз между сигналами принимаемыми от разных передатчиков и координаты у нас в кармане.
Самому этим заниматься, понятно, не хочется. Поиски в Интернете показали, что подобные системы в природе существуют и известны под названием pseudolites. Более того, какие-то корейцы даже изготовили такую штуку, в рамках университетского исследования. Причем точность у них получилась как раз близкая к необходимой - 1..2см.
Понятно, впрочем, что мысль реализовать такую систему самостоятельно совсем не греет. Как по объему работ, так и по затратам времени/денег.
Существуют другие решения, но они слишком громоздкие (к примеру, обклейка человека полосками с целью непосредственно измерять их искривление) или требуют серьезной модификации помещения (например, чтобы фиксировать изменение емкости).
Короче, фантазия пока истощилась. Если у кого есть более умные идеи - делитесь.