Гироскоп и акселерометр для Arduino: MPU6050, ADXL345, MPU9250
Чтобы понять, как устройство ориентировано в пространстве, используют три разных измерителя, и путать их не стоит. Акселерометр меряет ускорение — в покое он чувствует притяжение Земли и по нему определяет, где низ. Гироскоп меряет скорость вращения. Магнитометр работает как компас и показывает на север.
По отдельности каждый врёт по-своему, поэтому в реальных задачах их совмещают: показания дополняют друг друга, а алгоритм сводит их в один устойчивый угол.
Разборы конкретных моделей
Что выбрать
Акселерометр и гироскоп в одном корпусе, подключение по I2C, цена копеечная. Стандартный выбор для самобалансирующихся роботов, квадрокоптеров и датчиков наклона. Компаса нет, поэтому азимут он не знает.
Три оси ускорения, очень низкое потребление, умеет сам определять удар, свободное падение и двойное постукивание по корпусу. Берут для датчиков вибрации, счётчиков шагов и охранных систем.
То же, что MPU6050, плюс встроенный магнитометр. Умеет абсолютную ориентацию, включая курс относительно севера. Дороже и требует калибровки компаса восьмёркой в воздухе.
Внутри девять осей и вычислитель, который сам сводит их в готовые углы. Не нужно писать фильтры и разбираться в кватернионах — датчик выдаёт крен, тангаж и курс напрямую. Стоит в десять раз дороже MPU6050.
Дрейф нуля и почему одного гироскопа мало
Гироскоп меряет не угол, а скорость вращения. Чтобы получить угол, показания приходится складывать по времени, и вместе с ними накапливается ошибка: за минуту неподвижно лежащий датчик может «повернуться» на несколько градусов. Это называется дрейфом нуля.
Акселерометр от дрейфа свободен — он всегда знает, где низ, потому что чувствует притяжение. Зато он реагирует на любую тряску и вибрацию, и при движении его показания скачут.
Решение — объединить оба. Быстрые изменения берут от гироскопа, медленную поправку — от акселерометра. Простейший вариант такого объединения называется комплементарным фильтром и умещается в одну строку кода; более точный — фильтр Калмана.