Рассчитать скорость по акселерометру

Я пытаюсь использовать свой акселерометр на своем мобильном устройстве (точнее, на смарт-часах), чтобы рассчитать скорость поворота руки человека.

Данные, возвращаемые акселерометром, находятся в м / с 2 .

Поскольку ускорение руки человека непостоянно, я не могу использовать уравнение v0 + atдля расчета скорости.

Я никогда не был хорош в физике, так как мне рассчитать скорость с различным ускорением?

Вы должны вычислить числовой интеграл. В самой простой форме это просто сумма отсчетов ускорения, умноженная на временной шаг. Сказав это, ваш акселерометр измеряет ускорение по трем осям, которые вращаются относительно реальной физической системы отсчета. Кроме того, акселерометр не может различать гравитацию ( грамм г ) и ускорение 1 g по направлению к полу. Компенсация этих вещей и компонентов ошибки акселерометра является сложной вычислительной задачей.
@CuriousOne Я понимаю, что будут погрешности, поэтому я не ищу ничего чрезвычайно точного, я собираюсь сообщить пользователю, что это расчетная скорость
Проблема заключается не в небольших ошибках, а в одном из десятикратно превышающих сигнал, зависящих от ориентации вашего устройства, наложенной на то, что вы пытаетесь измерить. Если у вас уже есть код, исправляющий это, проблема довольно сложна.
@CuriousOne - это грамм проблема? - в подъёме, когда я опускаюсь, мой желудок чувствует ускорение вниз, даже когда оно меньше грамм . Думаю, акселерометр в телефоне тоже должен это чувствовать. Что вы думаете?
@tom: Проблема не в том, что акселерометр не может измерить гравитационное ускорение, проблема в том, что он не может определить разницу между гравитационным ускорением и фактическим ускорением в инерциальной системе, в которой вы хотите провести измерение. Чем глубже Причина этого в том, что поверхность земли НЕ является инерциальной системой, нам просто нравится притворяться, что это так. И если вы посмотрите на распространение ошибки постоянного ускорения в один g, векторно наложенного на небольшое (0,01-0,1 g) ускорение, которое нас обычно интересует, результирующие ошибки огромны.
@CuriousOne спасибо за ответ, интересный момент - интересно, не слишком ли это пессимистично, но думаю, лучший способ узнать это - попробовать и посмотреть, возвращается ли скорость, когда телефон перемещается и возвращается в состояние покоя. ноль или нет.
@tom: я не пытался звучать пессимистично, я просто разрабатываю реальную проблему. Я совершенно уверен, что можно сделать очень разумную работу, если мобильный телефон имеет высококачественное оборудование, что более вероятно для iPhone, чем для Android. Некоторое время назад я пытался сделать это на телефонах Android и столкнулся с очень неприятными проблемами как на аппаратном, так и на программном уровне. Сказав это, я не очень старался (примерно одна неделя полного рабочего дня). Я уверен, что кто-то, кто действительно заботится и вкладывает несколько месяцев в исследования и разработки, может заставить его работать достаточно хорошо.
@CuriousOne - снова интересно. Возможно, по мере совершенствования технологий это скоро станет реалистичным на Android... спасибо за ваше понимание.
@tom: Это не столько технология, сколько проблема экономики / лицензирования. В любой момент времени существует не более нескольких полностью охарактеризованных дизайнов iPhone, над которыми Apple имеет полный контроль. Платформа Android, с другой стороны, состоит из тысяч устройств без каких-либо жестких технических требований к акселерометрам, кроме возможности отличить верх от низа. К сожалению, это видно. Сказав это, этот сайт должен быть о физике. Мы не должны обсуждать это здесь.

Ответы (2)

Вам нужно интегрировать ускорение, чтобы получить скорость.

в ( т ) знак равно т знак равно 0 т а . г т

Есть несколько способов сделать это численно.

Я предполагаю, что вы получаете эти показания регулярно с интервалом в дельта т , Например дельта т знак равно 100 м с или что-то вроде того.

О самом простом способе сделать это

в ( т ) знак равно в ( 0 ) + а × дельта т

куда в ( т ) это скорость во времени т . но есть и более изощренные способы сделать это — я не буду их здесь повторять, но вы, возможно, захотите посмотреть на использование правила Симпсона, которое описано здесь .

Проблема усложняется тем, что скорость является трехмерной, поэтому вам необходимо интегрировать каждое из трех измерений x, y и z, разделенных.

Это зависит от того, как телефон дает вам информацию об ускорении, но если вы получите а Икс , а у а также а г через равные промежутки времени вы можете сделать следующее...

vx += ax * dt;
vy += ay * dt;
vz += az * dt;

если вы получаете ускорение в виде необработанного числа и угла, вам придется преобразовать, я думаю, полярные координаты в компоненты xyz, чтобы иметь возможность их сложить.

Общая скорость, | в | дается, конечно, | в | знак равно в Икс 2 + в у 2 + в г 2

Я бы, конечно, попробовал начать с в знак равно 0

Curious One поднимает очень интересный вопрос о грамм - лучший способ проверить это - закодировать и попробовать - встряхните телефон и посмотрите, возвращается ли скорость к нулю, когда он находится в состоянии покоя после встряхивания или перемещения....

... вы можете опубликовать свои результаты, если вы сделаете это и попробуете?

Еще одна проблема — скручивание телефона и скручивание акселерометра — это потребует от вас подумать об угловом ускорении и т. д., но основные принципы, изложенные здесь, будут такими же, если вам нужно подумать об углах.

Да, информация поступает очень быстро, около 20 выборок каждые 1000 мс. Информация с датчика представлена ​​в виде а Икс , а у , а г . Я уже провел некоторые тесты, чтобы увидеть, насколько дрейф в датчике, когда он неподвижен, и есть значительный дрейф, я собираюсь провести своего рода калибровку, чтобы попытаться отфильтровать шум.

Вот почему, когда вы хотите численно интегрировать вертикальное ускорение, вы должны вычесть 1 г из вертикального ускорения, которое вы измеряете с помощью акселерометра.

Почему нужно вычесть 1 г?
Поскольку 1 г не дает никакой «видимой» скорости, но, как сказано выше, акселерометр не может отличить гравитацию от других ускорений. Таким образом, вы вычитаете 1g, зная, что любое другое наблюдаемое ускорение, кроме этого, создаст реальную скорость, указывающую в каком-то направлении: если измеренное ускорение меньше 9,8, то скорость отрицательна, поэтому указывает на пол, если она больше 9,8. это будет положительная скорость, указывающая на потолок/небо. (Условно вектор 1g указывает от пола к потолку). надеюсь, я был достаточно ясен!