[Из песочницы] Применение МЭМС гироскопов и акселерометров для отслеживания движений тела человека
Отслеживание движений тела человека — это задача, которая с переменным успехом решается уже не одну тысячу лет. Когда-то я читал историю об одном древнегреческом ораторе Демосфене, у которого была нехорошая привычка поднимать плечо до уха, если он нервничал. Чтобы избавиться от этого, во время ежедневных тренировок он вешал над плечом свой меч, который очень неприятно колол, если плечо поднималось. В итоге оратор стал настолько знаменитым, что про него даже есть статья в Википедии.Другой хороший пример многие видели в фильмах про китайские боевые искусства. Например, кунг-фу панда сильно растопыривал локти во время выполнения приемов. Чтобы отследить этот момент он подкладывал лопухи в зону подмышек. Лопух падает — ученик получает нагоняй от мастера. Наверняка некоторым из нас родители обещали прикрутить палку к спине, если мы сутулились. Правда, эти угрозы никогда не выполнялись и поэтому действовали не очень убедительно.
Очень часто отслеживание движений требуется во время спортивных тренировок. Например, можно найти патент US3820783, в котором описывается тренажерное устройство, которое одновременно направляет спортсмена и не дает ему двигаться неправильно.Схема установки из патента US 3820783
Регистрация движения с помощью видеосъемкиВ середине 70-х годов появились системы, которые обрабатывали видеозапись движений, сделанную с нескольких точек. В результате появлялась математическая модель того или иного движения. Если посмотреть видео о том, как снимался фильм «Властелин колец», можно увидеть интересные эпизоды съемок движений Горлума. Двигался на самом деле человек в специальном костюме, а потом с помощью умного математического аппарата и программного обеспечения получился симпатичный лысенький персонаж.Видеофиксация движений имеет очевидные достоинства, но так как я хочу в этой статье описать альтернативное решение, то позволю себе немного покритиковать и приведу недостатки:
видеосъемку нужно вести с нескольких ракурсов; зачастую требуется размещение маркеров на теле; необходимо дорогостоящее аппаратное обеспечение (видеокамеры); нужны хорошие вычислительные мощности и соответствующий программный продукт для преобразования видео в модель движения человека; человек не может двигаться свободно на большие расстояния, иначе он неминуемо выйдет за пределы зоны видеосъемки; кроме объекта измерения нужен коллектив специалистов, то есть записать движение тела на утренней пробежке рядовому пользователю наврядли удастся. Измерение движений очень полезная штука не только в спорте. Применяется она также в промышленном проектировании — при разработке автомобилей, конвейеров, швейных машинок и многого другого. Такие системы уже существуют, например у фирмы Siemens — Jack (Human Simulation and Ergonomics). Как узнать, будет ли удобно водителю наживать кнопку включения кондиционера в проектируемом автомобиле? Можно, конечно, изготовить автомобиль, посадить человека и проверить. Но гораздо проще посадить виртуального человека в виртуальный автомобиль. Виртуальный автомобиль уже есть, так как все современные чертежные системы предусматривают разработку 3D моделей. Осталось только привязать движения модели человека к движениям его реального прототипа. Это можно сделать с помощью все той же видеофиксации движений или с помощью способа, о котором речь пойдет ниже.Умная одежда В этой статье хочу рассказать от том, как было бы замечательно, если бы можно было измерять движения, не ограничивая себя рамками съемочной площадки. Например, если бы измерительные функции были встроены в одежду. Вы ходите, бегаете, прыгаете, а одежда все записывает и потом воспроизводит ваши движения на экране смартфона, дает рекомендации и подсказывает, как бегать и не травмировать колени, сидеть и не сутулится, как правильно и без травм крутить педали на велосипеде.Оказывается, наука и техника уже предоставляют такие возможности. Конечно, речь пока не идет об умной повседневной одежде, но уже есть специальные костюмы, состоящие из носимых датчиков, которые на весьма неплохом уровне записывают движения тела. Такие костюмы делает фирма XSENS. Стоят они недешево, но по мере того как в каждой семье появляются десятки единиц вычислительной техники, дешевеют микросхемы и все больше становится интеллектуальных портативных систем. Мы семимильными шагами идем к светлому будущему. Не вдаваясь глубоко в технические подробности попробую рассказать, как же происходит запись движений, опишу работу и принцип действия основных узлов системы измерения движений на основе электронно-механических датчиков.
МЭМС По мере развития микроэлектроники появляются различные миниатюрные датчики. Отдельная группа таких датчиков называется МЭМС — микро электромеханические сенсоры. Для измерения движений применяются датчики ускорения — акселерометры и датчики угловой скорости — гироскопы. Акселерометр представляет собой миниатюрный чувствительный элемент изменяющий свои свойства под действием ускорения. Это может быть пьезоэлектрический сенсор или элемент переменной емкости — конденсатор с подвижной обкладкой. Пьезоэлектрический сенсор вырабатывает небольшое напряжение на своих электродах, которое может быть измерено и пересчитано в ускорение. Похожим образом обстоят дела с емкостью переменного конденсатора.МЭМС гироскоп чаще всего использует в конструкции действие силы Кориолиса, которая отклоняет вибрирующую пластинку, величина отклонения регистрируется и преобразуется в угловую скорость.
Как мы знаем из курса физики и математики, любой вектор может быть разложен на составляющие вектора. Так, например, ускорение и скорость раскладываются на взаимно-перпендикулярные составляющие: X, Y, Z. Чувствительные элементы МЭМС измеряют ускорение и скорость отдельно вдоль каждого из этих векторов.
Важно отметить, что сейчас встречаются микросхемы, которые содержат в себе сразу несколько МЭМС датчиков.
Например, микросхема МЭМС акселерометра производит измерение ускорения сразу по трем осям x, y, z. Это же касается и микросхем гироскопов, которые могут измерять угловую скорость сразу по всем трем осям. Встречаются даже микросхемы, которые одновременно измеряют и ускорение и скорость. Такие датчики называют шестикоординатными.
МЭМС — контроллер МЭМС датчики, как правило, оснащаются встроенным контроллером, который производит расчет ускорения или угловой скорости, обеспечивает цифровую фильтрацию и конфигурирование микросхемы.Данные внутри контроллера хранятся в специальных ячейках памяти, называемых регистрами. Они представлены в формате integer со знаком. Единица измерения, как правило, g [ускорение свободного падения — 9,8 м/c2] для акселерометров и рад/с [радиан в секунду] для гироскопов. Описание формата данных, адреса регистров, единицы измерения, диапазоны измерения и другие параметры всегда приведены в документации на соответствующую микросхему.
Также контроллер обеспечивает связь МЭМС датчика с внешним миром по одному из распространенных интерфейсов. Как правило, это SPI или I2C. SPI — это интерфейс с двумя линиями данных и одной линией тактирования. I2C — это интерфейс с одной линией данных и одной линией тактирования. Нам в принципе нужно знать только, что передавать данные от МЭМС датчика легко и приятно, для этого есть стандартизованные распространённые интерфейсы и готовые библиотеки.
Компьютер, планшет или смартфон не имеют доступных для пользователя интерфейсов SPI или I2C, поэтому, чтобы подключить датчик к ним, необходимо еще какое-нибудь согласующее устройство. Это может быть, например, микроконтроллер, соединенный с радиопередатчиком стандарта Bluetooth. На буферный микроконтроллер, как правило, возлагаются обязанности по предварительной обработке данных, для того чтобы снизить нагрузку на канал связи.
Вообще говоря, выбор канала связи — это отдельная большая задача. Конечно, этот канал желательно должен быть беспроводным, но какую из беспроводных технологий выбрать? Стандарты связи диапазона 2,4ГГц, такие как Bluetooth или WiFi, хороши тем, что поддерживаются большинством пользовательских устройств. Но с другой стороны они ограничивают дальность связи из-за малой длины волны. Конечно, есть радиомодули Bluetooth с заявленной дальностью около километра, но не будем обольщаться, ведь законы физики никто не отменял, и такую дальность можно получить только при условиях прямой видимости и достаточной высоты датчики над поверхностью земли. Важно определиться с моделью измерения и обработки данных. Одно дело, когда все вычисления производятся на смартфоне, который лежит в кармане у человека, и совсем другое дело, когда вычислительная машина стоит на расстоянии десятков метров на столе у тренера/оператора. Это больше вопрос маркетинга и выбора целевой аудитории комплекса измерения движений. Отмечу только, что в любом случае задача передать данные по назначению может быть решена и для этого есть специализированные аппаратно — программные решения.
Модель тела человека Пусть данные все-таки дошли по назначению и начинается их обработка. Для проведения расчетов и визуализации движений нам просто необходима математическая модель тела человека. Такая модель должна безусловно учитывать различные длины рук, ног, обхваты талии, груди, то есть различные антропометрические особенности людей. Возможно, такая модель должна также учитывать внутреннее строение организма. Чем сложнее модель, тем труднее, дороже и дольше ее создание. Я лично считаю что модель должна содержать только те элементы, на которые можно надеть чувствительный элемент. То есть если речь идет о руке, то целесообразно составлять ее модель из следующих частей: плечо; предплечье; кисть; пальцы; Строить модель с учетом всего множества косточек, мышц и сухожилий нецелесообразно. В качестве простейшей модели одной части тела может выступить конус. Это простая геометрическая фигура, которую без проблем можно реализовать в любой графической среде и которая не потребует много ресурсов, что особенно актуально для мобильных платформ. Собственно, объемная форма конуса используется для визуализации модели, а вектор, совпадающий с продольной осью симметрии, используется для различных расчетов. Различные длины нижней и верхней окружностей конуса легко моделируют отличия в диаметрах, например, бедра сверху и в районе колена.Конус, как элемент модели тела человека
Полная модель тела человека составленная из конусов
Согласитесь, что модель выглядит довольно узнаваемо. Эта модель была построена в среде Microsoft XNA, для отрисовки конуса использованы библиотеки Primitives3D, найденные на просторах интернета. Для расстановки элементов модели используется математический аппарат матричных вычислений среды XNA.
Немного о вычислениях Пространство, в котором расположена модель, называется мировым пространством. Чтобы перемещать элементы модели в мировом пространстве необходимо составлять матрицы перемещения, чтобы поворачивать необходимы матрицы поворота. Вообще говоря, это одни и те же матрицы, только для различных целей в них используются различные ячейки.Структура матрицы в среде XNA
Элементы, выделенные красным цветом, отвечают за поворот, элементы выделенные синим за перемещение, а черные элементы нужны для соблюдения размерности 4×4. Чтобы создать матрицу перемещения, используется метод:
Matrix.CreateTranslation (vector3) Который в качестве параметра принимает радиус-вектор требуемого положения точки. Чтобы разместить все элементы тела, нужно для каждого из них составить матрицу перемещения, назовем такую матрицу fBaseWorldi.Все, что касается движения 3D моделей, прекрасно известно разработчикам компьютерных игр и другим специалистам, работающим в области компьютерной 3D графики.
Мы же перейдем к самому интересному, а именно как же связать измерения угловой скорости и ускорения с положением модели на экране. Положение тела в пространстве может быть задано с помощью углов Эйлера, матриц перемещения и поворота, или с помощью кватернионов. Немало копий сломано в спорах о том, какой же из способов выбрать. Я пользуюсь представлением положения в виде кватернионов. От одного способа к другому легко можно перейти с помощью известных математических преобразований.
Кватернион — это набор из четырех чисел, задающих в пространстве ось, вокруг которой нужно повернуть тело и угол поворота. Кватернион записывается в виде:
q = [W, X, Y, Z], где W — это косинус половинного угла поворота; X, Y, Z — координаты оси поворота.
Кватернион предпочтительнее матриц поворота, так как матрица содержит 16 чисел, а кватернион только 4, что очевидно экономит время передачи данных и не так сильно загружает канал связи.
Внимательный читатель справедливо может возразить, что кватернион позволяет описать только вращательное движение, а как же быть с поступательным? Дело в том, что предлагаемый метод предназначен для регистрации движений без привязки к окружающей местности. А все движения человека можно построить за счет одних только вращений.
Действительно, наше тело практически не подвержено чистым (без вращения) растяжениям и сжатиям. Например, чтобы линейно переместить кисть вперед или назад, вверх или вниз, придется совершить вращательное движения предплечья в локтевом суставе или плеча в плечевом.
Осталось дело за малым, преобразовать ускорение и угловую скорость в кватернионы. Математический аппарат, который производит такие преобразования составляет святую святых фирм производящих системы измерения движений. Этот аппарат в целом известен, в интернете можно найти даже исходные коды (Open source IMU and AHRS algorithms), но как обычно все сложности кроются в деталях. Поэтому не удивляйтесь, если измерения движения будут содержать ошибки положения. Это связано с ошибками в показаниях датчиков, которые интегрируются и значительно влияют на результат. Также свою долю неточностей вносят ошибки расположения датчиков на теле человека. Неплохое решение предоставляет фирма производитель МЭМС-чипов Invensense, они производят микросхемы, в которые можно загрузить ими же поставляемую библиотеку производящую вычисления. В ранних версиях библиотека представляла собой коды, написанные на С, которые выполнялись на стороннем микроконтроллере. Теперь библиотека — это массив шестнадцатеричных чисел, которые нужно загрузить в микросхему МЭМС после подачи на нее питания. Подобное решение предоставляют и другие фирмы, например Microchip.
После того, как мы рассчитали положение части тела и выразили его в виде кватерниона, необходимо из показаний, относящихся к отдельным частям тела, составить общую модель. Тут-то и пригодится среда XNA и код Primitives3D. Используемая библиотека Primitives3D для перемещения или поворота использует данные в матричном представлении. Поэтому чтобы преобразовать полученные от датчиков кватернионы необходимо воспользоваться встроенной в XNA функцией:
Matrix.CreateFromQuaternion (qi) где qi — это кватернион от датчика.Затем нужно обязательно перенести повернутую часть тела из начала координат в соответствующую точку, где она должна находится, предплечье например «крепится» к локтю. Хотя вы уже видели на картинке полностью «собранное» тело, чтобы оно всегда было в правильном положении после прихода каждого нового кватерниона положение тела нужно рассчитывать заново. Это связано с тем, что библиотека расчета кватернионов выдает кватернион, который связывает положение тела в нулевой момент времени с текущим моментом. Чтобы произвести перенос части тела нужно всего лишь перемножить две матрицы:
Matrix.CreateFromQuaternion (qi)* fBaseWorldi Матрица fBaseWorldi постоянно корректируется, потому что если переместилось плечо, то соответственно переместится и локоть. Поэтому в программе после прихода кватерниона для какой-либо части тела следует произвести расчет матриц fBaseWorldi для всех других связанных с нею частей тела. <
[embedded content]
На видео записано движение человека, полученное с использованием семи датчиков, по три датчика на каждой руке и один на туловище в районе поясницы.
Теперь, когда мы получили запись движений тела, можно на основании этих данных произвести расчеты различных интересных величин. Например, помочь Демосфену и прикрепить к его плечу датчик, который будет контролировать правильное положение и выдавать какой-либо сигнал при отклонении от этого положения, точно также если запустить приложение на смартфоне, а несколько датчиков разместить на спине у ребенка, то это поможет ему контролировать свою осанку. А сколько еще разных полезных применений для МЭМС датчиков.
Заключение В этой статье я постарался обзорно рассмотреть основные моменты, связанные с использованием МЭМС датчиков применительно к измерению движений тела человека. Конечно, многие из упомянутых здесь вопросов требуют более подробного объяснения, кроме того, некоторые нюансы я не упомянул специально, чтобы не загромождать статью деталями.