Гироскопический датчик: Гироскоп — Википедия – Гироскоп в телефоне — что это за датчик, зачем нужен?
Гироскопический датчик Lego Mindstorms EV3 образовательный набор
Содержание статьи
Гироскопический датчик EV3 поставляется в составе образовательного конструктора Lego Mindstorms EV3. В домашней версии Lego EV3 датчика гироскопа нет. Если есть необходимость, его можно купить отдельно.
Датчик гироскоп — это цифровой датчик
Принцип работы гироскопического датчика
Принцип работы датчика заключается в том, что он способен отслеживать вращение. Датчик гироскопа EV3 способен обнаружить вращение всего по одной оси. На верхней стороне датчика мы можем увидеть две стрелки. Эти стрелки показывают нам плоскость работы гироскопического датчика.
- При вращении датчика в плоскости стрелок на верхней части датчика он может определять угловую скорость вращения. Она измеряется в градусах в секунду. 440 градусов в секунду является максимальной угловой скоростью, которую модет измерить датчик.
- Кроме скорости вращения датчик может определять угол вращения. Измерение угла вращения происходит в градусах. Точность измерения гироскопического датчика +/- 3 градуса если поворот на 90 градусов.
Особенности датчика гироскопа EV3
Для правильной работы датчика его нужно включать в контроллер EV3 в полностью неподвижном состоянии. Когда мы устанавливаем гироскопический датчик на робота обязательным условием является полная неподвижность робота в его начальном состоянии. Робот должен стоять без движения, иначе датчик будет работать некорректно. При помощи этого датчика можно легко программировать повороты робота вокруг оси. Датчик имеет частоту дискретизации 1 килогерц.
Сенсор подключается к блоку программирования EV3 плоским черным соединительным кабелем, который входит в набор. Гироскопический датчик можно подключить к любому входному порту, который обозначен цифрами от 1 до 4. Но по умолчанию датчик подключается во второй порт. Программное обеспечение контроллера Lego EV3 автоматически определяет порт подключения датчика.
Одной из особенностей датчика гироскопа EV3 является проблема дрейфа. Она состоит в том, что, когда датчик в покое т.е. неподвижен, его показания изменяются и постоянно увеличиваются. Эта проблема может быть решена несколькими способами, но это лучше рассматривать в отдельной статье.
Области применения гироскопического датчика
Гироскопические датчики широко распространены и применяются как в быту, так и в промышленных и военных областях. В быту, например, гироскопы стабилизируют поведение радиоуправляемых моделей самолетов и вертолетов. Навигация и управление транспортными средствами также использует датчики гироскопы. В легковых автомобилях датчики активируют подушки безопасности при опрокидывании.
Системы навигации и системы реагирования на чрезвычайные ситуации используют гироскопические датчики для повышения надежности работы оборудования. Роботы, роботизированные платформы в военной области используют датчики гироскопы в системах управления и наведения. Подводные лодки, самолеты, автономные подводные аппараты и многое другое не могут эффективно работать без применения гироскопических датчиков.
Практически на всех смартфонах также установлен датчик гироскопа. Он часто используется в мобильных играх, функциях автоповорота изображения и многих других. Можно привести еще множество примеров использования датчика гироскопа. Но в нашем случае мы изучаем очень простой датчик, который позволяет понять основные принципы работы гироскопов.
Гироскопический датчик EV3
Сравнение характеристик микромеханических гироскопов / Habr
Недавно узнал о том, что фирма STMicroelectronics анонсировала трехосевой гироскоп A3G4250D, удовлетворяющий жесткому стандарту для автомобильного применения (AEC-Q100). Обещана стоимость $6 при заказах от 1000 шт. Класс цены понятен. Захотелось сравнить паспортные характеристики этого датчика с маститыми моделями от Analog Devices Inc. и других производителей. Пока разбирался с даташитами выяснил, что набор паспортных характеристик ADI и STM, к примеру, неодинаковый. Попутно решил выяснить по каким все-таки попугаям стоит сравнивать датчики, т.е. что является наиболее серьезной проблемой микромеханики. В итоге набрался материал для поста, а может и двух. В данном будет вводная. Сравнение a la «[30 коп. пучок] Vs. [Чугунный мост]» к сожалению не уместилось.Введение
О принципах работы разных классов микромеханических гироскопов и акселерометров можно написать не одну статью. Существует несколько обособленных видов/классов приборов. Если не вдаваться в подробности, грубо можно сказать следующим образом.
Чувствительным элементом (ЧЭ) микромеханического гироскопа является инерционная масса, закрепленная внутри корпуса на пружинах (упругих консолях полупроводника и пр.). Эта чувствительная масса приводится в колебательное движение по одной из осей датчика. Эта ось является осью возбуждения (входной осью). По этой оси задается рабочий режим. Измерения же производятся по перпендикулярной к ней оси (выходной). Принцип действия заключается в том, что при вращении корпуса вокруг его измерительной оси ( ее еще называют осью чувствительности) чувствительный элемент помимо колебаний вдоль
Так упрощенно работает одноосевой датчик. У двух и трехосевых датчиков комплекс из ЧЭ и измерительной системы как бы обрамляется еще одной системой подвеса/измерителей. Т.е. одна сборка ЧЭ/Подвес/Измерители (пусть это будет сборка для оси Х) сама является колеблющимся ЧЭ для другой сборки (напр., по ОY), которая входит в сборку для измерения по OZ. Возможна, наверняка, и раздельная система.
Специалист по микромеханике в тексте выше сможет найти достаточно некорректностей. Написано грубо и для простоты восприятия. И написано это, чтобы плавно перейти к описанию одной из серьезнейших проблем микромеханики, а именно чувствительность к линейным ускорениям.
В теории колеблющийся ЧЭ не должен чувствовать ускорений и не должно у него быть перекрестных связей (в случае двух- или трехосевых датиков) с другими осями чувствительности (ОЧ). Но вследствие неидеальностей создания трехмерной структуры внутри интегральной микросхемы центры масс ЧЭ смещаются, появляются остаточные напряжения в материале, пружины имеют неодинаковые упругости и т.д. В результате ЧЭ для ОХ начинает реагировать на воздействия по OY, линейные ускорения начинают искажать показания гироскопа. Т.е. в измерениях появляется приращение угловой скорости которого на самом деле нет (случайный дрейф).
Сделать производство ЧЭ идеальным невозможно (или не целесообразно), поэтому в конструкции датчиков появляются дополнительные элементы, нужные для уменьшения чувствительности к упомянутым паразитным воздействиям. В первую очередь простотой и даже самим наличием элементов режекции паразитных воздействий как раз и отличаются дешевые (до $10-15) датчики от датчиков среднего ($30-100) и верхнего ($100+) ценовых диапазонов.
В одной из хабрастатей я обсуждал вопрос пренебрежимости реакции недорогих гироскопов на паразитные воздействия (тут например). Понятно, что для статичного квадракоптера незачем изгаляться. Но ведь это лишь демо-устройство будет использоваться в статике. UAV должен перемещаться, причем иметь достойные динамические характеристики. Иначе зачем он сможет быть использованным?
Про реакцию на вибрации, которые имеют высокую интенсивность в квадракоптерах к примеру, особо рассказывать не нужно. Все знают что это такое. Поэтому считаю, что вопрос чувствительности гироскопов к ускорению и вибрациям очень важен для создания подвижного объекта с нормальной динамикой.
Погрешности микромеханических гироскопов
Первое, что бросается в глаза разработчикам в даташитах к датчикам, это так называемая «стабильность нуля». Ведь кажется, что именно этот параметр в конечном итоге определяет чувствительность датчика, т.е. минимальное входное воздействие, которое датчик почувствует. Так из-за низкой стабильности нуля многих моделей ММГ, до сих пор многие считают, что микромеханические гироскопы (ММГ) не чувствуют вращение Земли. Есть модели ММГ имеющие стабильность нуля немногим более 2 °/час (Земля, как известно вращается со скоростью 15 °/час). Но на практике это не означает, что измерить вращение Земли все-таки удастся.
Как бы то ни было, разработчик смотрит на стабильность нуля. Это понятный параметр, показывающий в каких пределах будет колебаться нуль шкалы датчика в лабораторных условиях. Однако это параметр стабильности «сферического коня в вакууме». В реальности заявленной стабильности не будет. Почему? Да потому, что там указана стабильность (вернее нестабильность) обусловленная внутренними источниками погрешностей. В каких условиях датчик будет работать производитель не сможет предугадать, как и вызванные этими условиями девиации.
Есть два подхода борьбы с погрешностями: аппаратный и алгоритмический (читай программный). Второй подход подразумевает добавление в прошивку БЦЭВМ специальных программных модулей для коррекции ошибок, вызванных паразитными процессами. И этот подход не рекомендуется как оптимальный. В первую очередь сам датчик должен гасить шумы. Центральный мозг должен заниматься не вычищением основного мусора, а финишной обработкой и обсчетом высокоуровневых алгоритмов (навигация, стабилизация, автоматизация). Есть разного рода методические погрешности. Они легко описываются некими формулами, вот их легко компенсировать программно.
Температурный гистерезис нуля
ММГ имеют погрешности нуля, которые варьируются в зависимости от температуры внутри корпуса. Для проведения термокомпенсации в ММГ встроены температурные датчики. Их точность особого значения не имеет, важна лишь повторяемость показаний. Но с термокомпенсацией есть проблема — гистерезис. Гистерезис в данном случае — это разница между требуемым значением коррекции для конкретной температуры в двух случаях — когда прибор достигает этой температуры охлаждаясь и в случае, когда он нагревается до той же температуры. См. график ниже.
На этом графике показан температурный гистерезис нуля для ММГ ADXRS453 при изменении температуры от +25°С к +130°С, потом к -45°С и обратно к +25°С. Этот гистерезис имеет место не зависимо от того включен датчик во время колебания температуры или нет. К тому же гистерезис зависит от того, насколько широк диапазон изменения температур.
Ситуация сложная? Нет, не очень. В общем случае ММГ не должны использоваться для определения углов ориентации при отсутствии некоторой внешней референсной системы, которая позволяет сбросить накопившуюся погрешность до некоторого низкого уровня. По той же системе можно определить и текущее смещение нуля. Таким образом,
Погрешности из-за вибраций
Как было написано выше, сферический ММГ в вакууме измеряет лишь вращение и ничего другого. Однако из-за несимметричности ЧЭ и неидеальности изготовления все ММГ чувствуют ускорения. Под чувствительностью к ускорениям чаще всего понимают чувствительность к линейному ускорению (g-чувствительность) и к линейным вибрациям (g²-чувствительность). На объекты, движущиеся в поле тяготения Земли, в любом случае действует ускорение (кроме случаев свободного падения). Чувствительность к линейным ускорениям часто оказывается главным источником погрешностей.
ММГ в самом низком ценовом диапазоне оптимизированы прежде всего по стоимости, но не по сопротивлению вибрациям. Они имеют относительно простую механическую систему. Она хоть и отличается живучестью (выдерживает гигантские перегрузки в 10’000 g), но не защищена от вибраций. Малая масса чувствительного элемента -> широкая полоса пропускания. В таких гироскопах чувствительность к ускорению (acceleration effect в даташитах) может быть равна 1000 °/час/g (или 0.3 °/сек/g). И это значение вполне себе нормальное для такого класса датчиков. Но это на порядок выше, чем следует ожидать от точных датчиков. От дешевых датчиков не стоит ожидать стабильности нуля в контексте чувствительности к ускорениям. Даже малые вращения в поле тяготения Земли приводят к огромным погрешностям из-за их чрезвычайной чувствительности к ускорению и вибрациям. К слову сказать, «aceleration effect» я не нашел в даташите к A3G4250D от STMicroelectronics. Этот параметр не специфицируется для данного класса датчиков. Он просто подразумевается большим. Ниже представлена сравнительная таблица для некоторых моделей ММГ более высокого класса.
В этой таблице представлены датчики, относящиеся к классу точных. И даже для них оба параметра не всегда указываются производителем.
Часто для компенсации чувствительности к ускорению пользуются коррекцией по показаниям акселерометра. Ниже пример из комментариев к хабрапосту «Использование инерциальной навигационной системы (ИНС) с несколькими датчиками на примере задачи стабилизации высоты квадрокоптера» на тему квадрокоптеров:
Если дрифт постоянный и всегда в одну сторону — это всего лишь говорит о неправильной калибровке 0. В MultiWii 0 гир калибруется при каждом включении, но неидеально (округляется до целого), если ввести хотя бы десятые становится намного лучше. Но в данном применении гироскопа, даже ощутимый дрейф не страшен, так как есть референсная ориентация (компасс и акселерометр) по которой он исправляется.
Но оказывается дрейф из-за чувствительности к ускорениям зависит от частоты с которой это ускорение меняется. Ниже представлены графики зависимости выходного сигнала ММГ CRG20-01 (в штучных поставках в виде demo-board обойдется, если не ошибаюсь, в районе $100-150 с доставкой) от частоты изменения приложенного ускорения.
На графике видно, что от амплитуды ускорения погрешность не зависит. А вот от частоты зависимость имеется. И просто так эту погрешность не скомпенсируешь (большая вариация и сложная кривая изменения чувствительности). Скомпенсировать g²-чувствительность, если она постоянна, несложно. Но опять же не все производители в даташитах указывают графики для этого параметра. Разработчику часто приходится самому экспериментально строить эти графики. И часто это производится в полевых условиях на уже запущенных в эксплуатацию приборах.
Еще одна засада с коррекцией по акселерометрам — согласование фаз. В общем случае собственные частоты акселерометра и гироскопа не совпадают, да и частотные характеристики вообще. Поэтому при различных частотах вибраций ММА и ММГ будут выдавать разные смещения по фазе выходного сигнала относительно вибраций на входе. В конечном итоге коррекция по акселерометру может увеличить! погрешность вместо ее гашения. Случится это, если разница между смещениями по фазе ММА и ММГ будет приближаться к значению 3,14 радиан (180 градусов).
В итоге, т.к. чувствительность к вибрациям и ускорениям сильно варьируется даже в рамках одной модели датчика или она слишком велика, производитель ее просто не указывает. Правда нужно заметить, на самом деле достаточно трудно протестировать датчики на чувствительность к вибрациям. Проблемы носят как технический, так и методологический характер.
Для снижения чувствительности к вибрациям можно, конечно крепить датчики через резиновый изолятор. Но сделать так, чтобы этот подвес имел равномерное распределение характеристик для широкого диапазона частот, да еще и не менял их при старении очень сложно.
Ниже представлено сравнение погрешностей из-за чувствительности к ускорению и вибрациям, когда не используется g-компенсация (в гр/сек).
А в следующей таблице представлены погрешности, которые остаются даже после введения g-компенсации (в гр/сек).
Как видим даже при введении g-компенсации погрешность от чувствительности к ускорениям все равно может быть больше погрешности от температурной нестабильности нуля (см. график гистерезиса выше).
Выводы
Написанное выше говорит о том, что не всегда самый очевидный параметр точности является и главным критерием выбора датчиков. «Под свечей всегда темно», — говорит народная мудрость. То, что недостаточно четко описано в даташите или вообще не указано может сыграть решающую роль в успешности проекта. Можно заострить внимание на стабильности нуля и дисперсии шумов, а ведь их можно победить несложными алгоритмами (усреднять во времени или с использованием избыточных измерительных блоков). Зато погрешность от вибраций, как мы увидели выше на примере CRG20-01, может оказаться трудным описать в алгоритме. Долгое время стабильность нуля является золотым стандартом выбора ММГ. Однако на практике большее влияние на точность может оказать чувствительность к ускорениям и вибрациям.
Заключение
Хотел сделать пост, содержащий две части — 1) Обоснование выбора критерия сравнения и 2) Сравнение по ТТХ моделей от Analog Devices Inc., Silicon Sensing, Sensonor и STMicroelectronics. Однако и так получилось «многабукв». Если будет интересно, постараюсь в скором времени сравнить по даташитам датчики упомянутых фирм с разъяснением о физическом смысле основных характеристик.
UPD: поправлены некоторые опечатки и грамматические ошибки.
Использование гироскопического датчика Lego mindstorms EV3
Содержание урока
Введение:
Завершающий урок цикла «Первые шаги» посвятим изучению гироскопического датчика. Данный датчик, как и ультразвуковой, присутствует только в образовательной версии набора Lego mindstorms EV3. Тем не менее, пользователям домашней версии конструктора советуем тоже обратить внимание на данный урок. Возможно, что прочитав о назначении и использовании этого датчика, вы пожелаете его приобрести в дополнение к своему набору.
10.1. Изучаем гироскопический датчик
Гироскопический датчик (Рис. 1) предназначен для измерения угла вращения робота или скорости вращения. Сверху на корпусе датчика нанесены две стрелки, обозначающие плоскость, в которой работает датчик. Поэтому важно правильно установить датчик на робота. Также для более точного измерения крепление гироскопического датчика должно исключать его подвижность относительно корпуса робота. Даже во время прямолинейного движения робота гироскопический датчик может накапливать погрешность измерения угла и скорости вращения, поэтому непосредственно перед измерением следует осуществить сброс в 0 текущего показания датчика. Вращение робота против часовой стрелки формирует отрицательные значения измерений, а вращение по часовой стрелке — положительные.
Рис. 1
Рассмотрим программный блок «Гироскопический датчик» (Рис. 2) Желтой палитры. Этот программный блок имеет три режима работы: «Измерение», «Сравнение» и «Сброс». В режиме «Измерение» можно измерить «Угол», «Скорость» или одновременно «Угол и скорость».
Рис. 2
Давайте закрепим гироскопический датчик на нашем роботе (Рис. 3), подсоединим его кабелем к порту 4 модуля EV3 и рассмотрим примеры использования.
Рис. 3
Задача №22: написать программу движения робота по квадрату с длиной стороны квадрата, равной длине окружности колеса робота.
Решение:
- Перед началом движения сбросим датчик в 0, используя программный блок «Гироскопический датчик» Желтой палитры;
- Мы уже знаем: чтобы проехать прямолинейно требуемое расстояние — необходимо, воспользовавшись программным блоком «Независимое управление моторами», включить оба мотора на 1 оборот.
- Для поворота робота на 90 градусов в этот раз воспользуемся гироскопическим датчиком:
- используя программный блок «Независимое управление моторами», заставим робота вращаться вправо вокруг своей оси;
- используя программный блок «Ожидание» в режиме «Гироскопический датчик», будем ждать, пока значение угла поворота не достигнет 90 градусов;
- Выключим моторы;
- Используя программный блок «Цикл» в режиме «Подсчет», повторим шаги 1 — 3 четыре раза.
Попробуйте решить Задачу №22 самостоятельно, не подглядывая в решение.
Решение Задачи №22 Рис. 4
«Первые шаги» — послесловие
Десятый урок завершает курс «Первые шаги». На протяжении всех уроков вы познакомились с конструктором Lego mindstorms EV3, со средой программирования, научились использовать моторы и датчики. Если вы успешно одолели курс «Первые шаги», то впереди вас ждет знакомство с решением популярных задач робототехники в рамках курса «Практика». Удачи!
Использование инерциальной навигационной системы (ИНС) с несколькими датчиками на примере задачи стабилизации высоты квадрокоптера
В данной статье я постараюсь рассказать о своем опыте создания и реализации алгоритма для обработки сигналов с нескольких стандартных датчиков, входящих в состав ИНС (в английской версии IMU), для решения задачи стабилизации высоты многороторного летательного аппарата (в моем случае — квадрокоптера). На хабре уже был ряд статей, описывающих, что это за игрушка и как её сделать самому. Как программисту по профессии, мне было интересно не только его собрать, но и поковыряться в «мозгах» и сделать что-то полезное для сообщества. В качестве «мозгов» я выбрал Arduino и замечательный проект MultiWii. Он полностью открытый, динамично развивается, но в нем пока есть «белые пятна». Например, неудовлетворительно работает стабилизация положения по высоте. И я решил разобраться, можно ли с имеющимся оборудованием улучшить эту часть системы.Для начала немного вводной информации, чтобы прояснить, с чем предстоит иметь дело.
Мультиротор — аппарат с несколькими (3, 4, 6, 8) моторами с пропеллерами, каждый из которых создает вертикальную регулируемую тягу. В отличие от вертолета, стабилизация тут полностью электронная, и занимается ей микропроцессор при помощи ИНС (полетный контроллер).
Какие задачи необходимо решать в полете?
- Определение ориентации (углов по трем осям относительно земли) и стабилизация по ним
- Определение высоты и стабилизация по ней
- Определение координат и полет по заданным точкам
- Прием команд с пульта управления и выдача управляющих сигналов на моторы
Что мы имеем в распоряжении?
На данный момент в легкой доступности имеем стандартный набор сенсоров:
- довольно хорошие 3-х осевые гироскопы.
- средние по качеству 3-х осевые акселерометры
- средний по качеству 3-х осевой магнетометр
- средний или плохой барометр
Такой набор в сборе с Arduino-подобным процессором или в виде отдельной платки можно найти за сумму 70-100$
У каждого датчика свои возможности и слабые стороны. По отдельности ни один из них не может решить ни одну и перечисленных выше задач, поэтому системы ИНС всегда строятся из комбинации датчиков, и самое интересное тут — это вычислительные алгоритмы, позволяющие соединить сильные стороны каждого из датчиков для устранения их недостатков.
Первая задача — стабилизация ориентации — довольно успешно решается гироскопами. Гироскопы очень точно меряют угловую скорость и после интегрирования можно получить углы. Но у них есть проблема — показания уплывают со временем. Для коррекции этого дрифта применяется акселерометр, который всегда (ну или почти всегда в долгосрочной перспективе) знает, где земля. Но акселерометр ничего не почувствует, если его крутить вокруг оси Z, поэтому нам нужен магнетометр, который всегда знает, где север.
Вторая задача — нахождение высоты — частично решается барометром. Если обнулить показания на земле, то при подъеме на каждый метр мы знаем, насколько изменятся его показания (естественно, если мы не летаем 12 часов и не начала меняться погода). Но по условию задачи барометр у нас плохой, и он выдает высоту +-1м с диким шумом амплитудой примерно в этих же пределах. В реальности мой датчик показывает следующее (на 10-й секунде перемещен на 1метр):
На помощь барометру может прийти сонар, который меряет высоту с очень высокой точностью (даже тот, что я приобрел за 5$, выдает точность ± 3мм по заявлению производителя). Но сонар способен работать только невысоко над землей (2-10м), меряет долго (до 200мс), чувствителен к качеству поверхности, к углу наклона, и может терять сигнал.
Третья задача — определение координат — не решается никак указанными выше датчиками. Акселерометр в комбинации с гироскопом может выдать линейные горизонтальные ускорения, но тут есть две проблемы: постоянно действующий огромный (по сравнению с тем, что будем измерять) вектор 1G, и отсутствие привязок для коррекции. Так что определение координат остается прерогативой GPS-сенсора, и на высокую точность тут рассчитывать не приходится.
Во всех любительских полетных контроллерах задача нахождения ориентации решена хорошо и на ней останавливаться не буду. Задача довольно простая и расписана в интернете (один, два). В MultiWii используется красивое решение без сложностей типа кватернионов и матриц DCM (не забываем, что считать все это будет простенький 16-Мегагерцовый процессор), на основе упрощений для малых углов и комплементарного фильтра.
Итак, ориентацию аппарата в пространстве мы знаем с высокой степенью точности. Теперь можно перейти к основной теме статьи, т. е. постараться улучшить результаты, которые выдает барометр (или сонар), чтобы их можно было скормить ПИД-регулятору. Для этого показания должны поступать без задержек, быть точными в короткой перспективе и не сильно уплывать со временем. Тема ПИД-регуляторов заслуживает отдельного пристального изучения, так как он широко используются в системах управления процессами. Я рекомендую сначала ознакомиться с их определением, чтобы лучше понять рассуждения, изложенные ниже.
Сглаживаем
Чем нам не подходят показания барометра в текущем виде? Ну во первых, сильная зашумленность сигнала будет вызывать лишние управляющие воздействия на моторы. Применив фильтр низких частот, мы уменьшим шум, но потеряем быстроту измерения. А это значит, что любые кратковременные возмущения останутся без внимания, резкие возмущения отработаются с большой задержкой, и самое главное, мы не получим дифференциальную составляющую (D) для ПИД-регулятора. А как следует из теории, регулятор без этой составляющей склонен к слабозатухающим осцилляциям вокруг целевой величины, что и наблюдается на практике.
Интегрируем
Хорошо, оставим барометр и возьмем акселерометр. Вроде все просто — из значения по оси Z вычтем константу 1G, получим линейное вертикальное ускорение. Дважды проинтегрируем его (фактически просуммируем в измерительном цикле) и получим скорость и относительное смещение. Для ПИД-регулятора это лакомые показатели, с ними можно построить хорошую динамическую модель. Но и тут не все так хорошо, как хотелось бы. Наклон аппарата вызовет изменение проекции вектора ускорения А на ось Z. Вибрации от мотора или изменение температуры могут вызвать «сдвиг» чувствительности, и наша константа 1G уже не будет соответствовать реальности. Но даже в случае идеально неподвижного аппарата и точно выставленной 1G, любой сенсор выдает шум. А ведь даже крохотная ошибка в течение десятка секунд двойного интегрирования вырастает до размера слона, и вот мы видим скорость 10м/с и высоту 20м (хотя от земли ещё даже не оторвались).
Комплементарный фильтр
Если объяснять по простому — этот фильтр применяется к двум величинам, измеряемых разными датчиками, и корректирует одну из них так, что она медленно стремится ко второй. В измерительном цикле фильтр реализуется простой формулой:
При этом влияние величины A2 на A1 пропорционально разнице между ними и определяется коэффициентом k (чем больше, тем слабее влияние).
Если применить этот фильтр к высоте, найденной акселерометром, и показаниям барометра, получится интересная штука: дрифт акселерометра будет постоянно корректироваться барометром, а показания барометра будут сглаживаться (так как для A2 этот фильтр работает как фильтр низких частот). Но корректироваться будет только второй интеграл, а первый по прежнему спокойно «дрейфовать» в бесконечность, и в итоге из-за малого коэффициента k барометр просто не сможет повлиять на ситуацию.
Почему этот фильтр прекрасно работает для пары гироскоп + акселерометр? Потому что там мы корректируем первый интеграл, и он в конце концов перестает «уплывать», когда величина коррекции за время одного цикла сравняется с величиной ошибки гироскопа, прибавляемой в этом же цикле при интегрировании.
ПИД-регулятор приходит на помощь
Но и из пары барометр+акселерометр можно извлечь нечто полезное, если применить к ним ПИД-регулятор (да-да, область их применения крайне обширна).
Итак, в чем главное слабое место нашего интегратора ускорения? В микро-ошибке, которая может возникнуть по разным причинам, описанным выше, при вычитании константы 1G. Если записать искомое ускорение в виде:
то, регулируя величину bias, можно управлять и первым интегралом (скоростью), и вторым (смещением). Итак, цель нашего ПИД-регулятора найдена. Но надо ещё знать ошибку. Сделаем допущение, что bias зафиксируется после наступлении некоей стабилизации параметров системы (температурных, вибрационных и т. д.). Когда bias будет найден, показания акселерометра станут очень близки к истине и можно применить комплементарный фильтр, скрестив их с барометром. Величина коррекции этого фильтра и будет ошибкой, от которой будет отталкиваться ПИД-регулятор (он стремится свести ошибку к 0 за счет регулирования целевой переменной).
Дальше находим все три составляющие ПИД-регулятора. Пропорциональная (P) — это сама ошибка. Интегральная (I) — просто интегрируем её. Дифференциальная (D) — по теории надо дифференцировать ошибку. Но в ней сидят ужасные шумы барометра и акселерометра. Такое дифференцировать страшно, поэтому применим хитрость — возьмем за D-составляющую найденную акселерометром скорость с отрицательным знаком. Так как D призвана ввести затухание в регулятор, скорость тут вполне сгодится — чем она больше, тем больше надо её «погасить».
Умножим каждый из компонентов на свои коэффициенты, сложим и получим bias. Но тут применим вторую хитрость — не будем прибавлять bias напрямую к ускорению, а прибавим только I-часть. Именно она описывает величину постоянно действующей ошибки, что соответствует нашему допущению о медленном изменении bias.
P и D части прибавим к скорости, умножив на dT (так как позаимствовали их из ускорения).
Так как основная задача регулятора — найти постоянную составляющую ошибки, я решил настроить его достаточно «мягко», чтобы по минимуму влиять на кратковременные изменения. Но тут остается широкое поле для экспериментов, и все буде определяться поведением реальных датчиков.
А как же гироскоп?
Выше я упомянул, что для определения высоты нам понадобится ещё и гироскоп. Действительно, описанный выше алгоритм будет работать, только если вектор A (в локальной системе) смотрит точно вдоль оси Z. Как только аппарат наклонится, произойдут две неприятные вещи: проекция A на ось Z изменится и ПИД-регулятор начнет заново медленно и мучительно искать bias. И вторая — любое горизонтальное ускорение начнет давать ненулевую проекцию на локальную ось Z. При углах наклона в 45° уже и не поймешь, где какое ускорение.
Но так как мы знаем точную ориентацию локальной системы относительно глобальной, нет ничего сложного восстановить справедливость — просто спроектируем локальный вектор A на локальный вектор G (изначально найденный акселерометром и заботливо вращаемый гироскопом), который всегда смотрит в землю.
Операция эта простая и вытекает из определения векторного произведения:
Сделать это надо до вычитания 1G.
Теперь можно посмотреть на код и результаты.
#define ACC_BARO_CMPF 300.0f
#define ACC_BARO_P 30.0f
#define ACC_BARO_I (ACC_BARO_P * 0.001f)
#define ACC_BARO_D (ACC_BARO_P * 0.001f)
#define VEL_SCALE ((1.0f — 1.0f/ACC_BARO_CMPF)/1000000.0f)
#define ACC_SCALE 9.80665f / acc_1G / 10000.0f
err = (alt - BaroAlt)/ACC_BARO_CMPF; // P term of error
errI+= err * ACC_BARO_I; // I term of error
accZ = (accADC[0]*EstG.V.X + accADC[1]*EstG.V.Y + accADC[2]*EstG.V.Z) *
InvSqrt(fsq(EstG.V.X) + fsq(EstG.V.Y) + fsq(EstG.V.Z))
- errI - acc_1G;
// Integrator - velocity, cm/sec
vel+= (accZ - err*ACC_BARO_P - vel*ACC_BARO_D) * cycleTime * ACC_SCALE;
// Integrator - altitude, cm
alt+= vel * cycleTime * VEL_SCALE;
// Apply ACC->BARO complementary filter
alt-= err;
errPrev = err;
Данные сенсоров приходят в следующих переменных:
EstG.V – вектор G (он получен ранее при нахождении ориентации)
accADC – чистые данные с акселерометра
BaroAlt – данные с барометра, конвертированные в cm
На выходе получаем accZ, vel, alt.
Как видно, вычислительная сложность алгоритма довольно простая и Arduino его «переварит» легко (особенно если перевести в целочисленную арифметику, но тогда код станет плохо читаем).
PS: в видео есть фраза об отключении алгоритма при определенном угле наклона, и и-за этого возникает выброс ошибки. На самом деле это ограничение не нужно — алгоритм работает стабильно при любом угле от 0° до 360°
Если к этому алгоритму подключить сонар (вмето BaroAlt взять SonarAlt), то кривая высоты выглядит практически идеально. Таким образом, на низкой высоте используем сонар, при появлении ошибок или близко к пределу измерений переключаемся на барометр (предварительно согласовав высоты в период поступления достоверных данных с сонара).
К сожалению, погода пока не дает провести полетные испытания нового алгоритма. Как только появятся результаты, выложу графики сонара, отлаженный исходный код всего проекта и полетное видео.
Квадрокоптер своими руками: Часть II.1 / Habr
ВНИМАНИЕ, статья устарела, но её всё еще можно использовать в ознакомительных целяхВ прошлой статье я рассказал про набор деталек для построения своего квадрокоптера, а теперь настала пора поговорить о датчиках и мозгах.
Датчики и способы их добывания
Самый простой вариант — это купить готовую платку с 4мя основными датчиками (9DOF):
- гироскоп — для измерения углового ускорения
- акселерометр — для измерения ускорения и гравитации (по сути можно узнать угол наклона)
- барометр — для измерения высоты и удержания коптера на этой самой высоте
- магнитометр (компас) — для удержания направления движения
Так же сейчас появилась еще одна платка, на которой помимо четырех датчиков располагается GPS приемник, который пригодится для автономного полета.
Если вы решили покупать именно такую плату с датчиками (то вы сделали правильный выбор!), дальше про датчики можно не читать, но если вдруг у вас уже есть в наличии хотя бы гироскоп с акселерометром или хотите поиграть с удачей при заказе Wii Motion Plus из китайских магазинов, тогда дочитывайте эту часть статьи до конца.
Добываем гироскоп ITG3200
Возможно вы недавно купили себе Wii Motion Plus для своей игровой консоли с сайтов вроде dealextreme или buyincoins, тогда откройте его и посмотрите какой чип гироскопа там используется, скорее всего это будет ITG3205, он же ITG3200:
воспользуюсь изображением с форума http://forum.xufo.net/bb/viewtopic.php?p=171796
Если ваша плата выглядит именно так, то вам очень повезло и следующим шагом будет допиливание этого WMP до хорошего гироскопа:
красным отмечено место перерезания дорожки, так же на обратной стороне есть дорожка ведущая к чипу, её тоже перепиливаем и на обратной стороне есть удобное место для припаивания проводка GND (земля, общий)
Добываем акселерометр BMA020 или BMA180
А вот тут уже и сложнее и проще одновременно, мне повезло и добрый пользователь с форума rcdesign.ru напаял мне BMA020 на платку с минимальной обвязкой, которую я посадил на тонкий 2х сторонний скотч:
Вы можете поискать отдельно датчик и самостоятельно сделать подобную платку или попросить друзей или купить готовую с датчиком BMA020 или BMA180.
Другие варианты датчиков
На самом деле подойдут любые доступные гироскоп с акселерометром с шиной I2C, но придется переписывать соответствующие части кода или вставить уже готовый код из проекта MultiWii, например для гироскопа L3G4200D или аналогового акселерометра adxl335. Но иногда придется повозиться с ориентацией осей датчиков (менять знаки и оси в коде) и борьбой с вибрацией.
Сборка мозгов
Для удобства монтажа все что надо можно разместить на какой нибудь платке прототипирования, у меня например получилось вот так (не красиво, зато работает, слева сверху модуль связи, оставшиеся от прошлого проекта — не используется):
Распиновка подключения может немного отличаться, так как прошивка периодически меняется, но на момент написания статьи моторы, датчики, приемник и т.д. следует подключать так (из release note):
Моторы (вид сверху, перед коптера вверху, направление вращения и соотвествующие пропеллеры можно посмотреть на этой картинке или этой) |
|
---|---|
Передний левый | 2 |
Передний правый | 5 |
Задний левый | 6 |
Задний правый | 3 |
Приемник (хотя бы первые 4, можно взять разъем от IDE шлейфа и отрезав лишнее вставить в приемник) |
|
Throttle | A8 |
Roll | A9 |
Pitch | A10 |
Yaw | A11 |
Mode (Aux1) | A12 |
Aux2 | A13 |
Cam1 | A14 |
Cam2 | A15 |
Питание мозгов и приемника | |
Arduino можно питать от контроллера скорости (если имеет преобразователь питания), подпаяв выход питания к USB и Vin, другой вариант — питать напрямую от аккуулятора через специальный разъем питания на плате | |
Приемник запитываем от Arduino через соответствующие выходы +5v и GND | |
Другое | |
Переход в режим командной строки (ага, будет консолька) и настройки для удобства можно поставить перемычку или выключатель |
A5 замыкать с GND |
Модуль GPS | RX2, TX2 |
Модуль Xbee | RX3, TX3 |
Сонар/дальномер | 9 — tx, 10 — echo |
Светодиоды (не забываем про резисторы последовательно) | 13,30,31 |
Настройка прошивки и загрузка
Эта часть статьи может стать не актуальна, поэтому следите за веткой форума ArduCopter Mega: порт на обычную Arduino (тестим)
- Скачиваем архив с прошивкой и распаковываем
- Папку libraries следует скопировать поверх (с заменой) такой же папке в Arduino IDE (arduino-0022)
- В папке libraries/AP_ADC в файле AP_ADC_ADS7844.cpp выбрать тип датчика: раскомментировать один из вариантов #define FFIMU, #define ALLINONE или одновременно #define ALLINONE и #define BMA_020 для варианта с датчиками ITG3200 и BMA020
- Если у вас нет барометра (как у меня), то придется закоментировать код работы с шиной I2C с этим датчиком в файле libraries/APM_BMP085/APM_BMP085.cpp
- Открыть через Arduino IDE любой из файлов в папке MegaPirate
- Во вкладке APM_Config.h выбрать тип своего коптера, для этого после #define FRAME_CONFIG вставьте один из вариантов: QUAD_FRAME TRI_FRAME HEXA_FRAME Y6_FRAME OCTA_FRAME, а так же тип ориентации рамы #define FRAME_ORIENTATION, выставив PLUS_FRAME или X_FRAME
- Если у вас нет GPS, лучше в начале изменить значение #define GPS_PROTOCOL на GPS_PROTOCOL_NONE, чтобы не ждать 10-15 секунд инициализации GPS (когда его нет!)
- Теперь можно подключить Arduino Mega и загрузить этот скетч в контроллер
Настройка коптера
После успешной загрузки скетча-прошивки в Arduino можно скачивать программу настройки (внимание, работает только в Windows и сильно кривовато в Linux с Wine) и замыкать контакт A5 с GND.
После запуска программы в меню Options выбираем COM-порт Arduino:
В меню Action выбираем AC2 Setup
И видим огромную кнопку, на которую нужно нажать и следовать инструкциям, особенно важно не пропустить первое окошко с кучей текста, в котором вас попросят двигать ручки пульта до их минимальных и максимальных значений, а так же другое окошко, в котором вас попросят убедится, что коптер стоит ровно для калибровки датчиков.
После завершения настройки можно размыкать A5 с GND и в меню выбрать пункт AC2 Sensor, чтобы проверить адекватность работы датчиков во вкладке Raw Sensor: повороты платки с датчиками должны четко отрабатываться — как повернули, так стрелка и встала, если она доплывает или перелетает значение, то есть проблемы с датчиками или коэффициентами в вашем коде.
Так же тут же стоит проверить работу приемника в соседней вкладке и если уровни двигаются как надо, то отклоняем джойстик газа (в пульте Mode 2 левый) вниз вправо на 2 секунды (надеюсь на этом этапе у вас не подключен аккумулятор и не стоят пропеллеры), светодиод на контроллере должен начать мигать. А теперь медленно двигаем ручку газа вверх, при этом в левом столбце уровни должны примерно одинаково увеличиваться.
Результат
Ну вот вроде бы и всё =) Теперь можно нацеплять пропеллеры (не перепутайте куда какие, какого вращения и проверьте чтобы моторы крутились в нужную сторону) и попробовать взлететь, для этого поставьте коптер подальше от себя (или держите его в руке над головой), наклоните левую ручку вниз-вправо на 2 секунды и медленно прибавляйте газу. Если коптер взлетает — это уже хорошо, если его начинает трясти, то требуется регулировать PIDы, для этого в меню Action выберите пункт PID Config — AC2, ужаснитесь количеству циферок и начинайте настраивать значения под себя. О том как это делать я не могу рассказать, так как делалось практически методом тыка, но стоит начать с параметра P. У меня хорошо летает вот с такими настройками:
После посадки не забудьте выключит моторы, отклонив ручку левого джойстика вниз-влево на те же 2 секунды и убедитесь что светодиод статуса больше не мигает.
Удачи в сборке и настройке своего коптера и не забывайте читать о новых фишках на форуме.
Небольшое видео падения коптера в кусты
А так же адекватный полет с GoPro на борту
Возможно следующая статья будет о полностью автономном полете, но не раньше чем через месяц, следите за вашей хабралентой.
Получение данных с MEMS гироскопа (часть I) / Habr
Введение
Основной целью на данном этапе было получение данных с MEMS гироскопа, подключенного к макетной плате по I2C шине. В этой статье мне хотелось бы рассказать, что получилось. Кому интересно прошу под кат(осторожно трафик).Что для этого потребовалось приобрести
- Макетная плата STM32L-DISCOVERY
Почему же выбор пал именно на неё? Потому что в ней было соотношение довольно таки оптимальное цены и её возможностей из доступных на тот момент времени.
- MEMS гироскоп L3G4200D
Среди трех осевых гироскопов особо выбора не было поэтому взяли этот, так как суть заключалась пока просто изучить что и как работает, этого вполне было достаточно.
- Пара конденсаторов и резисторов
Что для этого пришлось сделать
- Разработать плату для MEMS гироскопа
Для подключения гироскопа требовалось сделать печатную плату для подключения по шине I2C согласно Datasheet’у.
- Изготовить её (сразу две на всякий случай)
- Припаять MEMS гироскоп в печке
- Припаять конденсаторы, резистор и шлейф
- На этом этапе вспомнилось, что для I2C требуется подтягивающие резисторы на питание, пришлось пренебречь эстетическим видом 🙁 получилось вот так:
- Осталось подключить к макетной плате питание и I2C шлейф
Что для этого пришлось программно реализовать
- Получение данных с гироскопа по прерыванию на макетную плату по шине I2C, для этого потребовалось использовать библиотеку «Stm32 peripheral library»
- Передача данных на компьютер: макетная плата определяется как HID устройство и предоставляет компьютеру сформированный пакет данных с гироскопа, для этого была использована библиотека «STM32L1xx USB full-speed device library»
- Получение данных на компьютере с HID устройства, на ПК приложение писалось на C# и требовалась библиотека которая бы помогла общаться с HID устройством, в этом нам помог GNU проект «USB Generic HID Communications 2_0_0_0»
Что в итоге получилось
- В одном случае было реализовано интегрирование данных с гироскопа прямо на контроллере макетной платы и дальнейшая передача на компьютер уже значений углов, ниже пример видео:
- На самом деле, данные с гироскопа сильно зашумлены и требуют основательной математической обработки.
- Сейчас для более подробного анализа на компьютер принимаются сырые данные с гироскопа, вот как они выглядят:
Данные с оси X, гироскоп вращается
Данные с оси Y, гироскоп вращается
Данные с оси Z, гироскоп вращается
Заключение
В заключении хотелось бы сказать, что работы над проектом еще идут и хотелось бы получить более точные значения от гироскопа путем применения различных фильтров, избавится от шумов и более качественно проинтегрировать данные что бы в итоге получить углы ориентации гироскопа. Если у кого то есть советы по этому поводу то я с радостью их выслушаю. В следующей части я постараюсь рассказать о том что получилось с обработкой этих данных. Всем спасибо за внимание.Гироскопический датчик на гироскопе ENC-03J
Электронные гироскопы преобразователи наклона и угловой скорости в электрический ток. Так же как и механические (ротационные), пьезокерамические электронные гироскопы служат для контроля положения и угловых скоростей с малым временем отклика (до 50 Гц). Электронные датчики-гироскопы марки ENC-03J и ENC-03M появились в розничной торговой сети совсем недавно. Они предназначены для работы в качестве датчиков изменения наклона, а также компенсации дрожания руки (штатива) в видеокамерах и высокотехнологичных фотоаппаратах.
Что и говорить, в современных промышленных устройствах профессионального и бытовою назначения электронные датчики-гироскопы архиважны. Отличием электронных гироскопов от механических собратьев является компактность и малый вес (размер 12 х 8 мм, масса в зависимости от модели 120 г), отсутствие изнашивающихся элементов, высокая скорость отклика (минимум инерции), низкое напряжение питания (2,75,5 В), малый ток потребления (0,515 мА). Диапазон рабочих температур (-5…+75 °С) позволяет производить контроль параметров в широком спектре климатических условий и географических поясов.
Кроме того, электронные гироскопы выпускаются также и в ЧИП-исполнении, что позволяет использовать их для поверхностного монтажа.
На основе такого электронного датчика создано простое устройство, которое посредством светоизлучающего светодиода сигнализирует об изменении своего, ориентированного на горизонтальную поверхность положения. Схема прибора показана на рис. 2.21.
Рис. 2.21. Электрическая схема гироскопа
Основу устройства составляет пьезокерамический гироскоп ENC-03J производства фирмы «Murata» (Япония). При горизонтальном положении прибора постоянное напряжение на выводе 4 датчика U1 составляет 1,31,4 В при Un = 5 В. Коэффициент усиления операционного усилителя DA1 приблизительно равен единице. На вывод 3 датчика U1 поступает напряжение сравнения через низкочастотный фильтр R3C3, который одновременно играет роль обратной связи операционного усилителя.
При изменении горизонтального положения датчика (отклонении от 0 °) напряжение на выходе U1 (вывод 4) изменяется в соответствии с коэффициентом преобразования (0,67 мВ/° отклонения в секунду). Частота опроса состояния составляет около 50 Гц. Максимальная угловая скорость относительно строго горизонтального положения (уровень 0) составляет ±300 °/с. Разделительный конденсатор С1 (образующий совместно с резистором R1 частотный фильтр с полосой среза около 0,3 Гц), не пропускает постоянную составляющую напряжения на вход операционного усилителя DA1. При изменении горизонтального положения датчика на выходе DA1 (вывод 6) присутствует напряжение высокого уровня, которое открывает ключевой транзистор VT1, вследствие чего зажигается светодиод HL1.
Все постоянные резисторы типа МЛТ-0,25 или MF-25. Конденсатор С1 неполярный типа К10-17, С2 оксидный полупроводниковый танталовый, типа К52-х или К53-х, СЗ типа КМ-6Б.
Оксидный конденсатор С4 типа К50-20 сглаживает пульсации источника питания. Если применяется автономный источник питания батарея или аккумулятор, данный конденсатор из схемы исключается. Светодиод HL1 любой типа АЛ307Б или аналогичный. Для лучшего визуального контроля можно использовать светодиод с эффектом мигания. Вместо операционного усилителя КР140УД1208 можно применять КР140УД12, КР140УД20 с любым буквенным индексом. Транзистор VT1 любой кремниевый п-р-п типа с коэффициентом усиления более 40.
Устройство в налаживании не нуждается. В связи с высокой чувствительностью пьезокерамического датчика U1 необходимо жестко крепить его к корпусу устройства, который, в свою очередь, должен иметь максимально ровную горизонтальную поверхность. При Монтаже элементов устройства не перегревайте выводы датчика жалом разогретого паяльника (время пайки не более 1 с).
Пользоваться датчиком просто достаточно установить его на контролируемой поверхности (если предполагается контроль наклона и стабилизации) или поместить в другую (нежидкую!) контролируемую среду для контроля вибрации.
Источник питания для устройства стабилизированный с постоянным напряжением 35 В. Ток потребления всего узла с датчиком ENC-03J не превышает 5 мА.
Рис. 2.22. Схема включения датчика ENV-05F-03
При использовании в качестве вибродатчика аналогичного прибора ENV-05F-03 параметры устройства улучшаются (повышается точность показаний чувствительность). Отрицательным моментом такой замены может показаться параметр максимальной угловой скорости у этого прибора он меньше: ±80 °. Однако применение датчика ENV-05F-03 позволяет избавиться от операционного усилителя (схема включения показа на рис. 2.22).
На кремниевых диодах собран преобразователь напряжения «переменный/постоянный ток», выход которого можно подключить к управляющему узлу, например к точке А (рис. 2.21).
Кашкаров А. П. 500 схем для радиолюбителей. Электронные датчики.