Ускорение при наклоне устройства


13

В настоящее время я работаю над устройством, которое использует постоянно включенный 3D-акселерометр (с использованием шкалы + -2g) и 3D-гироскоп (с использованием шкалы + -250g).

Я могу прочитать все возможные векторы (X, Y, Z) и их ускорение (g) и угловую скорость (dps), а также угол, в котором находится устройство в данный момент. Но моя проблема заключается в том, что когда устройство находится на наклоне (0g, когда нет наклона), ускорение находится между (вниз) 0g -> - 1g или между (вверх) 0g-> 1g в зависимости от того, под каким углом устройство находится в данный момент. Ниже картина, которая, надеюсь, проясняет идею.

Надеюсь, это поможет

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

Оси X и Y дают 0g, а ось Z составляет 1g, когда устройство не имеет наклона и находится на плоской поверхности. Наклон заставляет показание оси X двигаться в направлении 1g, если наклон направлен вверх, и до -1g, когда вниз. + -1g достигается, когда устройство находится на 90 * градус от исходного положения

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

По сути, я думаю, что если бы я мог измерить только ускорение оси X (изображение), даже если датчик наклонен, как на рисунке.

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


2
Почему бы вам просто не измерить, когда не происходит интересного ускорения, и использовать это в качестве точки сравнения?
PlasmaHH

Я думаю, что это не сработает. Если устройство все еще неподвижно, оси X и Y - 0g, а ось Z - 1g. Наклон вызывает считывание оси X от -1 г до 1 г в зависимости от наклона, как я уже говорил. Торможение приводит к уменьшению измеренного значения оси X (отрицательное ускорение, поэтому автомобиль замедляется). Если устройство уже, например, наклонено вниз, так что это что-то между 0g - (-1g), как я могу сказать, что это не ускорение, вызванное торможением?
jumbojohn

Почему бы вам не рассчитать общее ускорение трех осей, а не только оси Y? Я думаю, это что-то из базового, чтобы правильно рассмотреть все три оси !? Что - то вроде этого
charansai

LSM6DSM не имеет магнитометра. Откуда вы получили эту информацию? Я думаю , что вы на самом деле использую X-NÚCLEO-IKS01A1 доску от ST, которая имеет как LSM6DSM гироскоп / акселерометр и в LIS3MDL магнитометр.
MrGerber

@MrGerber Спасибо, что заметили это. Это был мой плохой за неправильное прочтение таблицы данных датчика.
jumbojohn

Ответы:


18

Только набросок решения.

Примите во внимание все 3 оси.

Ускорение из-за силы тяжести, независимо от наклона, всегда будет равно 1G, как векторная сумма X, Y, Z, независимо от наклона. Вы можете изобразить ускорение в покое или устойчивое движение как точку на сфере с радиусом 1G. (Если вы находитесь совершенно горизонтально, эта точка будет (0, 0, -1), то есть прямо под вами).

Ускорение из-за торможения приведет к искажению самой сферы; векторная сумма X, Y, Z больше не будет 1G.

Так

Aзнак равноИкс2+Y2+Z2

A

AA

Если вы также не поворачиваете или заносите, поэтому вам нужны входы от рулевого колеса и ABS, чтобы быть уверенным; это становится проблемой слияния данных. Этот подход обеспечит оценку ускорения. Чтобы проверить правильность и уточнить эту оценку, объедините ее с другими (также ненадежными) источниками данных, как в ответе Фила Фроста, используя фильтр Калмана.


На самом деле я никогда раньше не работал с акселерометром / гироскопом, поэтому общая картина не совсем ясна, как все это работает, и математика не является одним из моих самых сильных навыков, поэтому я был бы признателен за советы / разъяснения, спасибо.
jumbojohn

Несмотря на правильность, у меня есть сильное подозрение, что поля ошибок будут важны. Также не забывайте, что вертикальное ускорение искажает сферу (например, удары скорости, выбоины), поэтому вам может потребоваться решить эту проблему в зависимости от приложения.
Крис Х

Но гравитация не постоянна, если вы смотрите достаточно сильно . В то время как самая высокая дорога в США только сокращает $ g $ примерно на 0,1%, переход от полюсов к экватору дает разницу в 0,5%. Геология также может иметь значение этого порядка . Вероятно, не изменит правила игры, но не пренебрегайте калибровкой
Крис Х

Вам нужно только изменить радиус сферы G в соответствии с вашим местоположением или измерить его перед включением двигателя; это не проблема. Я согласен, что неровности, вероятно, нужно обрабатывать вместе с полозьями и рулевым управлением.
Брайан Драммонд

Калибровка перед запуском двигателя - это то, о чем я думал. Калибровка была бы быстрой, хотя, если строитель не является конечным пользователем.
Крис Х

9

Ваша главная ошибка в том, что вы не рассматриваете ускорение как единый вектор. Когда машина находится в состоянии покоя, этот вектор всегда будет на 1 г вверх. Не смотрите только на X-компонент необработанных данных акселерометра. Сделайте реальную векторную математику.

Но моя проблема в том, что когда устройство находится на наклоне (0g, когда нет наклона), ускорение находится между (вниз) 0g -> - 1g или между (вверх) 0g-> 1g.

Нет, это главное. То, что вы говорите, может быть верным для X-компонента выходного сигнала акселерометра, но это не так для ускорения, когда автомобиль находится в состоянии покоя.

Идеальным измеренным ускорением всегда будет фактическое ускорение автомобиля (относительно земли) плюс ускорение в 1 г из-за силы тяжести. Последний всегда в направлении вверх. Если вы знаете ориентацию автомобиля, то вы можете вычесть это 1 г из-за силы тяжести, чтобы найти ускорение, которое вы на самом деле ищете.

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


Не будет ли (измеренное) ускорение под действием силы тяжести быть направлено вверх? Как, например, показания, которые вы получите от устройства в состоянии покоя в гравитации Земли, будут такими же, как и вне любого гравитационного поля, но ускорятся в (относительном к устройству) направлении «вверх»?
psmears

@psmears: да, ты прав. Сила вниз, но видимое ускорение вверх. Исправлена.
Олин Латроп

5

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

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

Фильтр Калмана общий подход здесь. Идея состоит в том, чтобы взять все имеющиеся у вас данные, которые могут изменить ориентацию автомобиля, затем выполнить средневзвешенное значение измерений, объединить это с тем, что вы знаете о физике, действующей на автомобиль, чтобы получить вероятностную оценку новая ориентация автомобиля и какой путь "вниз".

Чем больше данных у вас есть, и чем точнее вы можете смоделировать физику автомобиля, тем более точной может быть эта оценка.

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

Вы также можете предположить, что автомобиль в среднем не будет тормозить или ускоряться. Таким образом, отфильтрованный по нижним частотам выходной сигнал акселерометра может влиять на оценку направления «вниз». Это обеспечивает долговременное измерение, не подверженное инерционному дрейфу.

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

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

Вы знаете, что если водитель нажмет на тормоза, это сместит вектор ускорения, и вы можете вычесть это из оценочной составляющей «вниз».

Или, если у вас есть GPS и картографические данные, вы можете включить оценку наклона автомобиля в зависимости от местоположения. Если у вас есть точные данные, вы можете точно знать, на каком холме находится транспортное средство. Если у вас есть только данные с низкой точностью, это может быть полезно. Например, если машина находится в Канзасе, холмы маловероятны. Если машина находится в Сан-Франциско, холмы более вероятны, и вы можете придать акселерометру меньший вес.

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

И так далее. Чем больше вы знаете, тем лучше может быть ваша оценка.


3

Вам потребуется алгоритм слияния и использовать 3D-акселерометр, 3D-гироскоп и 3D-магнитные датчики. С этим алгоритмом слияния вы получаете ориентацию, гравитация Земли помогает в качестве ориентира для определения горизонта - углов тангажа / рыскания / крена. Два других датчика mag / gyro помогают отфильтровать динамическое движение. Когда ваша машина также повернет влево / вправо, центробежная сила будет добавлена. Если у вас есть ориентация, вы можете вычесть гравитационный вектор и разобрать результирующее ускорение по всем трем осям.


3

В качестве базового подхода вы можете использовать фильтр верхних частот, чтобы устранить постоянную часть ускорения (которая соответствует гравитации) и сохранить переменную часть, которая обусловлена ​​динамикой автомобиля. Предположим, rawчто это вектор, содержащий ваши измерения X, Y и Z, и accэто ускорение автомобиля без гравитации. потом

void correct_for_gravity(float *raw, float *acc)
{
   const float k = 0.9;
   static float gravity[3];

   gravity[0] = k * gravity[0] + (1 - k) * raw[0];
   gravity[1] = k * gravity[1] + (1 - k) * raw[1];
   gravity[2] = k * gravity[2] + (1 - k) * raw[2];

   acc[0] = raw[0] - gravity[0];
   acc[1] = raw[1] - gravity[1];
   acc[2] = raw[2] - gravity[2];
}

Отдельные компоненты по- accпрежнему подвержены наклону, но векторной нормы нет:

norm_acc = sqrt(acc[0]*acc[0] + acc[1]*acc[1] + acc[2]*acc[2]);

Конечно, этот метод не очень точен, особенно если наклон изменяется с высокой скоростью. Это о том, насколько наивная математика дает вам. Если вам нужна лучшая точность, узнайте, как использовать фильтр Калмана.


1

Ответ заключается в точном определении «замедления» .

Из вашего вопроса:

Устройство будет находиться в автомобиле и должно измерять ускорение при замедлении автомобиля (торможение).

Однако замедление не равно торможению . Есть два возможных определения:

  1. Скорость автомобиля относительно земли снижается.
  2. Автомобильные тормоза применяются.

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

Оказывается, обнаружение 1. значительно сложнее, чем 2. Давайте определим оси относительно ориентации автомобиля: X: направление вперед-назад, Y: направление влево-вправо, Z: направление вверх-вниз. Все оси ориентированы на автомобиль.

Решения:

  1. Для определения 1. лучший подход состоит в том, чтобы предположить, что скорость автомобиля может изменяться только в направлении X. Затем измеренное ускорение a = g + v, где g - ускорение за счет сил, противодействующих гравитации, а v - ускорение за счет изменения скорости. Можно предположить, что длина g всегда равна 9,8 м / с², а v всегда в направлении X. Итак (g_x + v_x, g_y, g_z) = (a_x, a_y, a_z) , что дает v_x = a_x - sqrt ((9,8 м / с²) ² - g_y² - g_z²) . Это будет работать только до тех пор, пока | v | меньше чем | г |или, другими словами, ускорение, вызванное двигателем или тормозами, составляет менее 1G. Должно быть довольно безопасное предположение, если только у вашей машины нет ракеты-носителя.

  2. Для определения 2. вы можете просто взять ось X непосредственно. Если автомобиль не разгоняется или не тормозит, единственная сила противодействия гравитации, действующая на него, - это нормальная сила поверхности дороги. Эта сила всегда находится в направлении z относительно автомобиля, поэтому она не меняет показания оси X. Тормоза и двигатель действуют только в x-направлении, и будут видны в этом показании.


0

Похоже, что вы используете «избыточное» устройство для вашего приложения. Вы должны использовать устройство, которое измеряет только x & y ускорение, таким образом, наклон не будет иметь никакого измеримого эффекта. Хотя общее ускорение может быть меньше или больше, из-за наклона устройство будет измерять только компоненты x & y ускорения на плоскости, на которой находится транспортное средство.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.