Оглавление:

Как использовать инерциальный измерительный прибор?: 6 шагов
Как использовать инерциальный измерительный прибор?: 6 шагов

Видео: Как использовать инерциальный измерительный прибор?: 6 шагов

Видео: Как использовать инерциальный измерительный прибор?: 6 шагов
Видео: Гироскоп-Акселерометр MPU-6050. Первое знакомство 2024, Ноябрь
Anonim
Как использовать инерциальный измерительный прибор?
Как использовать инерциальный измерительный прибор?

Контекст:

Я создаю для развлечения робота, которого хочу автономно перемещать внутри дома.

Это долгая работа, и я делаю ее постепенно.

Я уже опубликовал 2 инструкции по этой теме:

  • один о создании колесного энкодера
  • один о подключении к Wi-Fi

Мой робот приводится в движение двумя двигателями постоянного тока с помощью моего самодельного энкодера.

В настоящее время я улучшаю управление движением и потратил некоторое время на гироскоп, акселерометр и IMU. С удовольствием поделюсь этим опытом.

Хотите узнать больше о локализации? Вот статья о том, как объединить искусственный интеллект и ультразвук для локализации робота.

Шаг 1. Зачем использовать инерциальный измерительный прибор?

Зачем использовать инерциальный измерительный прибор?
Зачем использовать инерциальный измерительный прибор?

Так почему я использовал ИДУ?

Первая причина заключалась в том, что если колесный энкодер достаточно точен для управления прямым движением, даже после настройки я не смог получить точность вращения менее + - 5 градусов, а этого недостаточно.

Итак, я попробовал 2 разных датчика. Сначала использую магнитометр (LSM303D). Принцип был прост: перед вращением получите ориентацию на север, вычислите цель и отрегулируйте движение, пока цель не будет достигнута. Было немного лучше, чем с кодировщиком, но со слишком большой дисперсией. После этого попробовал воспользоваться гироскопом (L3GD20). Принцип заключался в том, чтобы просто интегрировать скорость вращения, обеспечиваемую датчиком, для вычисления вращения. И все работало нормально. Я смог контролировать вращение на + - 1 градус.

Тем не менее мне было любопытно попробовать немного ИДУ. Выбираю компонент BNO055. Я потратил некоторое время на то, чтобы разобраться и протестировать этот IMU. В итоге я решил выбрать именно этот датчик по следующим причинам.

  • Я могу управлять вращением так же хорошо, как и с L3GD20
  • Я могу заметить небольшое вращение при движении прямо
  • Мне нужно получить ориентацию на север для определения местоположения робота, а калибровка компаса BNO055 очень проста.

Шаг 2: Как использовать BNO055 для 2D-локализации?

Как использовать BNO055 для 2D-локализации?
Как использовать BNO055 для 2D-локализации?

BNO055 IMU - это 9-осевой интеллектуальный датчик Bosch, обеспечивающий абсолютную ориентацию.

В техническом описании представлена полная документация. Это высокотехнологичный компонент, это довольно сложный продукт, и я потратил несколько часов, чтобы узнать, как он работает, и попробовать разные способы его использования.

Думаю, было бы полезно поделиться этим опытом.

Сначала я использовал библиотеку Adafruit, которая предоставляет хороший инструмент для калибровки и обнаружения датчика.

В конце и после множества тестов я решил

  • использовать библиотеку Adafruit только для сохранения калибровки
  • использовать 3 всех возможных режима BNO055 (NDOF, IMU, Compss)
  • выделить Arduino Nano для вычисления локализации на основе измерений BNO055

Шаг 3. Аппаратная точка Vue

Аппаратная точка Vue
Аппаратная точка Vue
Аппаратная точка Vue
Аппаратная точка Vue
Аппаратная точка Vue
Аппаратная точка Vue

BNO055 - это компонент I2C. Таким образом, для связи требуется источник питания, SDA и SCL.

Просто следите за тем, чтобы напряжение Vdd соответствовало купленному вами продукту. Чип Bosch работает в диапазоне: от 2,4 В до 3,6 В, и вы можете найти компоненты на 3,3 и 5 В.

С подключением Nano и BNO055 сложностей нет.

  • BNO055 питается от Nano
  • SDA и SCL подключаются с помощью подтягивающих резисторов 2 x 2 кОм.
  • 3 светодиода подключены к Nano для диагностики (с резисторами)
  • 2 разъема для определения режима после загрузки
  • 1 разъем к BNO (Gnd, Vdd, Sda, Scl, Int)
  • 1 разъем к роботу / Mega (+ 9V, Gnd, sda, Scl, Pin11, Pin12)

Немного пайки и все!

Шаг 4: Как это работает?

Как это работает ?
Как это работает ?

Из точки связи vue:

  • Nano - мастер шины I2C
  • Робот / Мега и BNO055 - подчиненные устройства I2C.
  • Nano постоянно читает регистры BNO055
  • Робот / Мега выдает числовой сигнал, чтобы запросить слово от Nano.

С точки зрения расчетов: Nano в сочетании с BNO055 обеспечивает

  • Курс компаса (используется для локализации)
  • Относительный заголовок (используется для управления поворотами)
  • Абсолютный курс и позиция (используются для управления ходами)

С функциональной точки зрения: Нано:

  • управляет калибровкой BNO055
  • управляет параметрами и командами BNO055

Подсистема Nano & BNO055:

  • вычислить для каждого колеса робота абсолютный курс и местоположение (с коэффициентом масштабирования)
  • вычислить относительный курс во время вращения робота

Шаг 5: Архитектура и программное обеспечение

Архитектура и программное обеспечение
Архитектура и программное обеспечение

Основное программное обеспечение работает на Arduino Nano

  • Архитектура основана на коммуникации I2C.
  • Я решил выделить Nano из-за того, что Atmega, которая запускает робота, была уже загружена, и эта архитектура упрощает повторное использование в другом месте.
  • Nano считывает регистры BNO055, вычисляет и сохраняет заголовок и локализацию в своих собственных регистрах.
  • Arduino Atmega, которая запускает код робота, отправляет информацию кодировщика колес в Nano и считывает заголовки и локализацию внутри регистров Nano.

Код подсистемы (Nano) доступен здесь, на GitHub

Инструмент калибровки Adafruit, если здесь, на GitHub (калибровка будет храниться в eeproom)

Шаг 6: Что я узнал?

Что касается I2C

Сначала я попытался установить 2 мастера (Arduino) и 1 подчиненный (датчик) на одной шине, но в конце можно и проще всего установить только Nano в качестве главного и использовать GPIO-соединение между двумя Arduino для «запроса токена»..

Относительно BNO055 для 2D-ориентации

Я могу сконцентрироваться на трех различных режимах работы: NDOF (объединить гироскоп, акселерометр и Compas), когда робот находится в режиме ожидания, IMU (объединить гироскоп, акселерометр), когда робот движется, и Compass во время фазы локализации. Переключение между этими режимами выполняется легко и быстро.

Чтобы уменьшить размер кода и сохранить возможность использования прерывания BNO055 для обнаружения коллизий, я предпочитаю не использовать библиотеку Adafruit и делать это самостоятельно.

Рекомендуемые: