ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ
С помощью комбинированного модуля гироскопа и акселерометра можно измерять ориентацию робота в пространстве в углах поворота вокруг трех осей: продольной оси «X» (угол крена), поперечной оси «Y» (угол тангажа), вертикальной оси «Z» (угол рыскания).
Ориентация осей X и Y относительно корпуса указана на плате датчика. «Стрелка» поворота указывает в сторону увеличения угла. Ось «Z» направлено вертикально вверх относительно «лицевой» стороны платы, на которой располагаются все компоненты. Угол поворота вокруг оси увеличивается при повороте по часовой стрелке.
Модуль датчика положения использует интерфейс I2C и подключается к любому из двух соответствующих портов I2C контроллера "Трекдуино".
Схема подключения проводов:
На датчике | На контроллере (I2C) |
---|---|
VCC | 5V |
GND | GND |
SCL | SCL |
SDA | SDA |
Блок, необходимые для работы с датчиком, расположены в группе блоков «Датчики» и называется «Положение»
При работе с датчиком положения из текстовой среды необходимо вручную подключать соответствующую библиотеку gyro_accel.h
и вызывать функцию калиброки setupAccel()
в секции setup()
:
#include <accel_gyro.h> //подключение библиотеки void setup() { setupAccel();//калибровка. Датчик должен неподвижно располагаться на горизонтальной поверхности. } void loop() { //ваш код }
При использовании графического блока эти функции генерируются автоматически.
Блок и генерируемая им функция | Описание |
---|---|
float readAccelAngle(char axis, int mode) | Возвращает дробное значение типа float, соответствующее углу поворота по оси. Аргументы: char axis - инетерующая ось. Допустимые значения - 'x', 'y', 'z'.int mode - режим расчета выдаваемых значений. Допустимые значения: 0 или RAW_GYRO - только гироскоп1 или RAW_ACCEL - только акселерометр2 или FILTERED - усредненный |
Так как датчик совмещает в себе два устройства (гироскоп и акселерометр), то и выдавать показания он может основаваясь на каждом из них (режимы «только акселерометр» и «только гироскоп»), либо комбинируя эти показания для усреднения и стабилизации (режим «усредненный»)
Режим «Только акселерометр»: углы измеряются только акселерометром на основании измерения вектора силы тяжести.
Плюсы: нет накапливающейся во времени погрешности
Минусы: показания крайне нестабильны, чувствительны к вибрации и боковым ускорениям
Так как основываясь на информации о положении вектора силы тяжести невозможно определить вращение вокруг вертикальной оси Z, при попытке получить показания по оси Z в режиме «только акселерометр» вы всегда будете получать «0». Определение вращения вокруг Z возможно только в режимах «только гироскоп» и «усредненный»
Режим «Только гироскоп»: углы измеряются гироскопом путем измерения угловых скоростей и интегрирования их по времени.
Плюсы: показания стабильны и мало подвержены влиянию случайных ускорений и вибрации
Минусы: ошибка накапливается во времени. Показания зависят от временных промежутков между измерениями. Чем чаще производятся измерения, тем точнее результат.
Режим «Усредненный» (рекомендуется в большинстве случаев): показания обоих датчиков программно комбинируются, взаимно устраняя недостатки друг друга. Показания акселерометра, ошибка в которых не накапливается во времени, «фильтруются» показаниями гироскопа, таким образом скачки в показаниях при случайных ускорениях и вибрации игнорируются.
Плюсы: показания стабильны и мало подвержены влиянию случайных ускорений и вибрации.
Минусы: по оси Z все равно накапливается ошибка, так как для нее используется только гироскоп.
Генерируемый код:
#include <accel_gyro.h> void setup() { Serial.begin(115200); setupAccel(); } void loop() { Serial.print("X:"); Serial.print(readAccelAngle('x',FILTERED)); Serial.println(); Serial.print("Y:"); Serial.print(readAccelAngle('y',FILTERED)); Serial.println(); Serial.print("Z:"); Serial.print(readAccelAngle('z',FILTERED)); Serial.println(); delay( 200 ); }