Уважаемые робототехники!
Предлагаю Вашему вниманию свою разработку – модуль измерения угла наклона/поворота по 2-м осям:
Модуль сделан на основе акселерометра и гироскопа с последующей обработкой данных на процессоре. Как видно из названия, измеряет:
1. Углы наклона, т.е. угол между осью (X и Y) и ее проекцией на горизонтальную плоскость.
ИЛИ
2. Углы поворота (иногда их называют углами Эйлера, иногда pitch и roll, иногда тангаж и крен). Совсем коротко, что это такое:
Любой поворот можно разложить на три составляющие - повороты отдельно по каждой из осей X,Y,Z. Это и есть углы Эйлера. Т.к. акселерометр не может измерить поворот вокруг вертикальной оси, (модуль измеряет только наклон), поворот будет разложен на две составляющие: X и Y, которые и измеряются модулем. Более подробно про углы Эйлера здесь
Простейший пример применения углов Эйлера – дублирование движения одного устройства другим.
Функционально модуль состоит из трехосевого акселерометра LIS332AX и двухосевого гироскопа LPR410AL, результаты измерений с которых поступают на процессор PIC18F25K20. В процессоре реализован цифровой фильтр, объединяющий данные с акселерометра и гироскопа с последующей передачей суммарного результата пользователю по каналу I2C и каналу UART. К модулю придается компьютерная программа, позволяющая проводить анализ поведения объекта в реальном времени, а также задавать режимы работы модуля. Программа получает данные из модуля через COM-порт, при этом пользовательский внешний процессор может одновременно работать через I2C, что является полезной функцией при отладке алгоритмов движения объекта.
Xарактеристики модуля:
1.Диапазон измерения углов наклона ±90º
2.Диапазон измерения углов поворота pitch ±90º, roll ±180º
3.Точность измерения: не хуже ±1º, типовая ±0,3º
4.Диапазон рабочей угловой скорости: 0 – 380 º/сек.
5.Рабочее напряжение: 3.3 В.
6.Питание: 3.3 – 16 В. На плате установлен регулятор напряжения LF33, дающий возможность пользователю питать свои схемы от 3.3В.
7.Выходные порты: I2C (ведомый), UART. При стыковке UART с 5-ти вольтовой схемой по линии Tx может потребоваться преобразователь уровня (зависит от внешнего процессора).
8.Данные, выдаваемые пользователю: углы наклона, прямые откалиброванные результаты измерений с акселерометра по осям X, Y, Z, и с гироскопа по осям X и Y. Возможна выдача не всех данных, а только заданных пользователем. Вместо углов наклона пользователь может получать углы поворота (тангаж (pitch) и крен (roll)).
9.При работе по I2C данные выдаются пользователю по запросу. Возможно подключение нескольких модулей на одну шину. При этом пользователь должен задать I2C-адрес каждого модуля.
10.Частота запросов внешнего процессора по шине I2C: при запросе менее 5-ти каналов - 200Гц, при запросе 5-ти и более - 180Гц.
11.Скорость работы шины I2C типовая - 100 кбит/c, максимальная 200 кбит/c.
12.При работе через UART данные могут выдаваться как по запросу, так и с заданной частотой в диапазоне от 16 до 200Гц.
13.Температурный диапазон -40... +85. (согласно техописаниям на микросхемы, реальные термоиспытания не проводились)
14.Размеры, мм: 41x47.
Область применения – шагающие роботы, балансирующие роботы, плавающие и летающие модели, различные механические устройства, требующие позиционирования (в некоторых случаях модуль можно использовать вместо датчиков положения – получится дешевле).
Как это работает.
Рассмотрим график измерения угла наклона по одной оси с помощью только акселерометра. Модуль был прикреплен к поворотной платформе, собранной на сервоприводах Dynamixel. Модуль из нулевого положения с постоянной скоростью поворачивался сначала на +45°, затем на -45°. График:
На графике видна сильная зашумленность во время движения, и умеренная зашумленность в состоянии покоя. Особенно сильный шум в начале и в конце поворота. Таким образом, измерение угла только с помощью акселерометра приемлимо в приложениях с невысокими требованиями к точности. Поэтому для измерения положения динамических объектов целесообразно применять гироскоп. Он, в отличие от акселерометра, измеряет не ускорение и не угол, а угловую скорость. Поэтому он значительно меньше подвержен шумам вибрации. Для получения угла из угловой скорости показания гироскопа необходимо проинтегрировать и добавить к ним начальный угол (т.е. угол покоя гироскопа). Интегрирование производится по алгоритму:
Angle = Angle + Gyro*Tick
Где Angle – измеренный ранее угол (при первом вычислении он должен быть равен начальному углу), Gyro – угловая скорость с гироскопа, Tick - период измерения.
График угла, измеренный только по данным с гироскопа (в сравнении с углом по акселерометру; коричневый - гироскоп, зеленый - акселерометр):
Как видно, шумы на графике практически отсутствуют, но при этом происходит накопление ошибки интегрирования, что приводит к изменению постоянной составляющей и уходу результата. Поэтому на длительном интервале времени измерять угол с помощь гироскопа нельзя.
Уменьшить этот эффект можно хорошей калибровкой гироскопа и точной оцифровкой. Однако полностью устранить его не удастся. Для того, что бы полностью избавиться от ухода постоянной составляющей, необходимо объединить результаты измерений акселерометра и гироскопа. Иными словами, само измерение угла нужно производить гироскопом, т.к. у него очень маленькие шумы, а постоянную составляющую необходимо брать от акселерометра. Именно это и происходит в цифровом фильтре процессора модуля. Результат вычислений процессора приведен на следующем графике в сравнении с предыдущими графиками:
Ну вот, вкратце вроде все...
Детальная информация у меня на сайте