MPU-6050 — гіроскоп — акселерометр

Содержание

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

Схема підключення

MPU-6050-i2c

Для Raspberry Pi (OS: Raspbian) приклади скриптів можна завантажити так:

Калібрування

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

MPU-6050-offset1MPU-6050-offset2MPU-6050-offset3 У прикладі я передбачив процедуру калібрування. Скрипт калібрування: mpu6050_calibr.py. Калібрування виконується у два етапи. Спочатку датчик повинен бути нерухомий. Мається на увазі, що кутові швидкості дорівнюють нулю. Виконується калібрування гіроскопа. Потім виконується калібрування акселерометра. Потрібно його не поспішаючи обертати у всіх напрямках. Ця процедура триває близько хвилини. Після чого функція калібрування видає обчислені значення, які потрібно прописати в скрипті. На цьому калібрування закінчено. Після калібрування похибка значно знизитися. Дивись роботу скрипта: mpu6050_get_raw.py. У цьому скрипті в наступних рядках вказуються калібрувальні дані:

При потребі ці дані можна вручну довести до ідеальних.

Гіроскоп

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

За допомогою електронного гіроскопа можна визначити положення системи наступним чином. При включенні прийняти початкове положення за нульову позицію. Потім опитувати гіроскоп із заданим інтервалом та, знаючи інтервал і швидкість обертання, обчислювати кут, на який була повернута система і додавати до поточного положення. При цьому ми припускаємо, що між двома опитуваннями датчика система оберталась з постійною швидкістю. Такий підхід веде до неминучого накопичення помилки. Що і видно на прикладі. Дивись роботу скрипта: mpu5060_gyro.py, або скрипта pyplay_gyro.py, який графічно відображає роботу гіроскопа.

Акселерометр

Коли ми повертаємо датчик у просторі, показання акселерометра на кожній з трьох осей буде змінюватися залежно від положення. Так, за допомогою акселерометра під впливом сили тяжіння можна визначити положення системи. Дивись роботу скрипта mpu6050_accel_no_filter.py.

Ми бачимо, що значення досить зашумлені. Спробуємо їх фільтрувати. Я застосував дуже спрощений фільтр Калмана. Дивись роботу скрипта mpu6050_accel_kf.py. Дані тепер більш стабільні, проте в нашому випадку фільтр є малокорисним. Якщо датчик потрясти, ми побачимо, що кути змінюються і іноді дуже сильно, хоча ми його не повертаємо, а рухаємо з прискоренням уздовж осей. Це логічно, оскільки на акселерометр тепер крім сили тяжіння діє додаткова сила, і результуючий вектор змінює напрямок. Наочно це видно на прикладі скрипта pyplay_accel.py (в цьому скрипті фільтрація не використовується). Тут проста фільтрація тільки частково покращує ситуацію. У вирішенні цієї проблеми нам допоможе гіроскоп. Саме він може нам сказати, що система не оберталася, і тому ми можемо ці коливання відфільтрувати.

Спільне використання гіроскопа і акселерометра

MPU-6050-filter

Дивись роботу скрипта mpu6050_final.py або скрипт pyplay_final.py, який графічно візуалізує процес роботи MPU-6050

MotionApps

Хто використовує Arduino, теж без зусиль знайдуть в Інтернеті аналогічні приклади.

У особливості роботи MotionApps я не вникав. Думаю, це тема для окремої статті. Мене більше цікавила власна реалізація на Python.


Источник: blog.avislab.com