Рисование в 2D-пространстве с помощью акселерометра (гироскопа?)

Я пытаюсь создать приложение, которое будет отслеживать движение устройства в 2D-пространстве. Проведя исследование в Интернете, все, что я смог найти, это один из способов сделать это — дважды интегрировать линейное ускорение, но ошибка ужасна.

Есть ли решения этой проблемы? Я хотел бы иметь возможность перемещать свой телефон вверх, что приведет к рисованию вертикальной линии на экране в зависимости от того, насколько далеко был перемещен телефон. Затем, если я сдвину телефон влево, будет нарисована горизонтальная линия, что позволит мне рисовать на экране, используя движения телефона.

Можно ли это вообще сделать? Если да, то какое направление мне выбрать в развитии? Я не знаю, с чего начать...

РЕДАКТИРОВАТЬ: Подробнее о проекте:

Я пытаюсь сделать приложение для упражнений, которое будет отслеживать движение ноги/руки: например, когда вы делаете скручивания живота, а телефон прикреплен ремешком к вашей лодыжке.

Приложение будет отслеживать повторяющиеся движения ноги.


person LucasSeveryn    schedule 03.02.2013    source источник


Ответы (2)


К сожалению, акселерометры в этих телефонах далеки от того, что вам нужно для реализации инерциального измерительного устройства. Большая проблема заключается в том, что, поскольку вы интегрируете дважды, интеграция всегда идет с постоянным интегралом (x, dx) = x ^ 2/2 + c, эта константа делает это сложным. Что еще хуже, вы получаете это дважды, один раз при интегрировании, чтобы получить скорость, и один раз, чтобы получить положение.

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

Изменить: я должен уточнить, что константа, о которой я упоминал выше, - это место, где накапливается ошибка. Если вы можете обнулить ее с нулевой скоростью, то вы периодически сбрасываете накопленную ошибку из сохраненной текущей скорости. Ошибка в положении все еще будет накапливаться, однако это не позволит ему смещаться, когда они держат его относительно неподвижно, что может сделать его пригодным для рисования.

person Shawn    schedule 03.02.2013
comment
Эй, ноль скорости - это возможное решение моей проблемы. Я пытаюсь сделать приложение для упражнений, которое будет отслеживать движение ноги, например, когда вы делаете скручивания живота, а телефон прикреплен ремешком к вашей лодыжке. Звучит глупо, но мне это интересно :) - person LucasSeveryn; 04.02.2013
comment
Интересно, однако имейте в виду, что причина, по которой эта штука с обувью сработала, заключалась в том, что у них был переключатель, который контактирует с землей и точно сообщает датчику, когда он не движется. У вас могут возникнуть проблемы с хрустом, так как вы на самом деле ни на что не ставите ногу. Однако при таком повторяющемся движении, когда вы меняете направление, вы, безусловно, можете подсчитать количество скручиваний, подобно тому, как шагомер считает шаги. Вы также можете определить свою нулевую скорость, когда ускорение прекращается из-за периодического характера движения, но это будет более сложно. - person Shawn; 04.02.2013

Я не знаю другого способа, кроме двойного интегрирования ускорения.

Более того, я думаю, что это невозможно, если вы не знаете о других датчиках, которые могут быть в вашем устройстве (например, на одном из моих устройств у меня есть 7 (семь) датчиков, связанных с различными физическими сигналами, которые устройство может получать).

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

person andr    schedule 03.02.2013