Отже, моя довша відповідь нижче передбачає, що плата зазнає прискорення, і протягом цього часу вам все одно потрібно мати можливість вимірювати свій крок, котитись і позіхати протягом короткого проміжку часу. Якщо дошка буде нерухомою для всіх вимірювань, то відповідь Махендри Гунавардени буде чудово працювати для вас. Якщо це збирається в такий пристрій, як сегвей, модельний літак або мультитор, або все, що рухається, ви можете продовжити читання. У цій публікації йдеться про те, як використовувати всі три датчики, хоча метод, який називається сенсорним синтезом. Сплавлення датчиків дозволяє отримати сильні сторони кожного датчика і мінімізувати наслідки слабкості кожного датчика.
Характеристики та сенсор датчиків
Спочатку зрозумійте, що акселерометр вимірює всі прикладені до нього сили, а не лише силу тяжіння. Тож у ідеальному світі з акселерометром у нерухомому положенні без будь-яких вібрацій ви могли б чудово визначити, який шлях рухається за допомогою базової тригонометрії, як показано у відповіді Махендри Гунавардени. Однак оскільки акселерометр набере всі сили, будь-які вібрації призведуть до шуму. Слід також зазначити, що якщо плата прискорюється, ви можете не просто використовувати просту тригонометрію, оскільки сила, яку прискорює акселерометр, є не тільки силою тяжіння Землі, але і силою, яка змушує вас прискорити.
Магнітометр більш простий, ніж акселерометр. Рух не спричинить проблем з цим, але такі речі, як залізо та інші магніти, в кінцевому рахунку вплинуть на ваш вихід. Якщо джерела, що викликають цю перешкоду, постійні, її не важко боротися, але якщо ці джерела не є постійними, вони створюватимуть тонни шуму, які проблематично видалити.
З трьох датчиків гіроскоп є найбезпечнішим, і вони, як правило, дуже добре вимірюють швидкість обертання. На нього не впливають такі речі, як джерела заліза, а прискорення в основному не впливають на їх здатність вимірювати швидкість обертання. Вони дуже добре допомагають повідомляти про швидкість, з якою обертається пристрій, однак, оскільки ви шукаєте абсолютний кут, вам потрібно інтегрувати швидкість, щоб отримати позицію. Це додасть помилку останнього вимірювання до помилки нових вимірювань, оскільки інтеграція - це в основному сума значень за діапазон, навіть якщо похибка одного вимірювання становить лише 0,01 градуса в секунду, у 100 вимірюваннях ваше положення можна вимкнути на 1 градус, на 1000 вимірювань, можна на 10 градусів. Якщо ви здійснюєте сотні вимірювань в секунду, Ви можете бачити, що це викликає проблеми. Це зазвичай називають гіроскопом.
Злиття датчика
Тепер у тому, що всі ці датчики працюють разом, полягає в тому, що ви можете використовувати інформацію з акселерометра та магнітометра, щоб скасувати засув гіроскопа. Це в кінцевому підсумку дозволяє вам забезпечити точність та швидкість руху гіроскопа без фатальної вади дрейфу гіроскопа.
Об'єднання даних цих трьох датчиків можна зробити більш ніж одним способом, я розповім про використання додаткового фільтра, оскільки його набагато простіше, ніж фільтр калмана та кальманові фільтри будуть витрачати набагато більше ресурсів на вбудованих системах. Часто допоміжний фільтр достатньо хороший, простіший у застосуванні (якщо ви не використовуєте попередньо вбудовану бібліотеку) і дозволяє швидше обробляти дані.
Тепер переходимо до процесу. Перші кроки, які вам потрібно зробити, - це інтегрувати вихід гіроскопа для перетворення кутової швидкості в кутове положення. Вам також, швидше за все, доведеться застосувати фільтр низьких частот на акселерометрі та магнітометрі, щоб боротися зі шумом на виході. Тут працює простий фільтр FIR, як показано нижче. За допомогою тригонометрії ви можете знайти крок і котитися за допомогою акселерометра, а прокидання за допомогою магнітометра.
filteredData = (1-weight)*filteredData + weight*newData
Вага - це лише константа, яку можна регулювати залежно від того, з якою кількістю шуму ви маєте мати справу, чим вище шум, тим меншим буде значення ваги. Тепер комбінувати дані з датчиків можна за допомогою наступного рядка коду.
fusedData = (1-weight)*gyroData + weight*accelMagData
Слід зазначити, що дані - це вектор кроку, кочення та проколювання. Ви можете просто використовувати три змінні для цього, а не масиви, якщо хочете. Для цього розрахунку гіроскоп забезпечує позицію в градусах в нахилі, нахилі та похилі, магнітометр забезпечує кут похилу, тоді як акселерометр забезпечує власні номери для нахилу та кочення.
Якщо ви все ще хочете отримати додаткову інформацію, ви можете google "злиття датчика з додатковим фільтром", про це є багато статей.