Прискорення, коли пристрій увімкнено


13

Зараз я працюю над пристроєм, який використовує завжди увімкнений 3D-акселерометр (використовуючи шкалу + -2 г) та 3D-гіроскоп (використовуючи шкалу + -250 г) -сенсор.

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

Сподіваємось, це допомагає

Пристрій розташується в автомобілі і повинен вимірювати прискорення при уповільненні руху автомобіля (гальмо). Однак якщо пристрій вже нахилений, акселерометр вимірює деяке прискорення, яке викликає нахил, і це важко визначити, чи має пристрій справді деяке прискорення чи це просто нахил, що викликає прискорення.

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

Я роздумував над тим, як усунути це прискорення, яке викликає нахил, і лише виміряти реальне прискорення пристрою, але просто не можу придумати цю проблему за допомогою наступних даних, які я можу отримати.

В основному я думаю, що якби я міг виміряти лише прискорення осі X (зображення), навіть якщо датчик знаходиться в нахилі, як на фотографії.

Сподіваюся, це повідомлення не надто важко зрозуміти через мої знання англійської мови та те, як я намагаюся пояснити свою проблему.


2
Чому б ти просто не виміряти, коли не відбувається цікавого прискорення, і не використовувати це як точку порівняння?
ПлазмаHH

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

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

У LSM6DSM немає магнітометра. Звідки ви взяли цю інформацію? Я думаю , що ви насправді використовую X-NÚCLEO-IKS01A1 дошку від ST, яка має як LSM6DSM гіроскоп / акселерометр і в LIS3MDL магнітометр.
Г-н Гербер

@MrGerber Дякую, що помітили це. Мені було погано неправильно читати таблицю даних датчика.
jumbojohn

Відповіді:


18

Лише ескіз рішення.

Візьміть до уваги всі 3 осі.

Прискорення за рахунок сили тяжіння, незалежно від нахилу, завжди будуть 1G, як векторна сума X, Y, Z, незалежно від нахилу. Ви можете зобразити прискорення в спокої або рівномірному русі як точку на кулі з радіусом 1G. (Якщо ви ідеально горизонтальні, ця точка буде (0, 0, -1), тобто безпосередньо під вами).

Прискорення через гальмування спотворить саму сферу; векторна сума X, Y, Z більше не буде 1G.

Так

A=X2+Y2+Z2

дає загальне прискорення. Якщо вона дорівнює G, ви перебуваєте в спокої; інакше ви прискорюєтесь, а - векторна сума G та справжнє прискорення.A

Тепер ви повинні знайти справжнє прискорення, яке зазвичай буде вектором у прямому (або задньому) напрямку, що пояснює різницю між і G. Вам потрібно відняти деяку точку на G-сфері від , щоб знайти (сподіваємось, унікальний рішення) вектор із лише компонентом X (вперед / назад). Це ваше прискорення. (Тригонометрію я залишу як просту головоломку, сподіваюся, ідея зрозуміла).AAA

Якщо ви також не повертаєте чи не ковзаєте, тому вам потрібні входи від керма та ABS для впевненості; що стає проблемою злиття даних. Цей підхід забезпечить оцінку прискорення. Щоб перевірити обґрунтованість та уточнити цю оцінку, поєднайте її з іншими (теж ненадійними) джерелами даних, як у відповіді Філа Фроста, використовуючи фільтр Калмана.


Насправді я ніколи раніше не працював з акселерометром / гіроскопом, тому з великої картини не зовсім зрозуміло, як ці речі працюють, а математика - це не одна з моїх найсильніших навичок, тому я би вдячний поради / уточнення, дякую.
jumbojohn

Незважаючи на правильність, у мене є сильні підозри, що похибки будуть важливими. Також не забувайте, що вертикальне прискорення буде спотворювати сферу (наприклад, удари швидкості, вибоїни), тому вам може знадобитися вирішити це залежно від програми.
Кріс Х

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

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

Калібрування перед запуском двигуна - це те, про що я думав. Калібрування повинно бути швидким, якщо будівельник не є кінцевим користувачем.
Кріс Х

9

Ваша головна помилка - не трактувати прискорення як єдиний вектор. Коли машина знаходиться в спокої, цей вектор завжди буде на 1 г вгору. Не дивіться лише на компонент X вихідних даних акселерометра. Зробіть реальну векторну математику.

Але моя проблема полягає в тому, що коли пристрій увімкнено (0 г, коли немає нахилу), прискорення знаходиться між (вниз) 0 г -> - 1 г або між (вгору) 0 г-> 1 г.

Ні. Це справа. Те, що ви говорите, може бути правдою для 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 | менше, ніж | г |або, іншими словами, прискорення за рахунок двигуна чи гальм менше 1 Г. Має бути досить безпечним припущенням, якщо ваш автомобіль не має ракетного підсилювача.

  2. Для визначення 2. ви можете просто взяти зчитування з осі x безпосередньо. Якщо автомобіль не розганяється і не гальмує, то єдиною силою протидії гравітації, яка діє на нього, є нормальна сила дорожнього покриття. Ця сила завжди знаходиться в напрямку z відносно автомобіля, тому воно не змінює показання осі x. Гальма і мотор діють лише в напрямку x, і будуть прямо видні в цьому читанні.


0

Здається, ви використовуєте пристрій "overkill" для своєї програми. Ви повинні використовувати пристрій, який вимірює лише прискорення х і у, таким чином нахил не матиме вимірюваного ефекту. Хоча загальне прискорення може бути меншим або більшим, через нахил прилад вимірює лише x & y компоненти прискорення на площині, на якій знаходиться автомобіль.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.