
Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:04

Контекст:
Я создаю для развлечения робота, которого хочу автономно перемещать внутри дома.
Это долгая работа, и я делаю ее постепенно.
Я уже опубликовал 2 инструкции по этой теме:
- один о создании колесного энкодера
- один о подключении к Wi-Fi
Мой робот приводится в движение двумя двигателями постоянного тока с помощью моего самодельного энкодера.
В настоящее время я улучшаю управление движением и потратил некоторое время на гироскоп, акселерометр и IMU. С удовольствием поделюсь этим опытом.
Хотите узнать больше о локализации? Вот статья о том, как объединить искусственный интеллект и ультразвук для локализации робота.
Шаг 1. Зачем использовать инерциальный измерительный прибор?

Так почему я использовал ИДУ?
Первая причина заключалась в том, что если колесный энкодер достаточно точен для управления прямым движением, даже после настройки я не смог получить точность вращения менее + - 5 градусов, а этого недостаточно.
Итак, я попробовал 2 разных датчика. Сначала использую магнитометр (LSM303D). Принцип был прост: перед вращением получите ориентацию на север, вычислите цель и отрегулируйте движение, пока цель не будет достигнута. Было немного лучше, чем с кодировщиком, но со слишком большой дисперсией. После этого попробовал воспользоваться гироскопом (L3GD20). Принцип заключался в том, чтобы просто интегрировать скорость вращения, обеспечиваемую датчиком, для вычисления вращения. И все работало нормально. Я смог контролировать вращение на + - 1 градус.
Тем не менее мне было любопытно попробовать немного ИДУ. Выбираю компонент BNO055. Я потратил некоторое время на то, чтобы разобраться и протестировать этот IMU. В итоге я решил выбрать именно этот датчик по следующим причинам.
- Я могу управлять вращением так же хорошо, как и с L3GD20
- Я могу заметить небольшое вращение при движении прямо
- Мне нужно получить ориентацию на север для определения местоположения робота, а калибровка компаса BNO055 очень проста.
Шаг 2: Как использовать BNO055 для 2D-локализации?

BNO055 IMU - это 9-осевой интеллектуальный датчик Bosch, обеспечивающий абсолютную ориентацию.
В техническом описании представлена полная документация. Это высокотехнологичный компонент, это довольно сложный продукт, и я потратил несколько часов, чтобы узнать, как он работает, и попробовать разные способы его использования.
Думаю, было бы полезно поделиться этим опытом.
Сначала я использовал библиотеку Adafruit, которая предоставляет хороший инструмент для калибровки и обнаружения датчика.
В конце и после множества тестов я решил
- использовать библиотеку Adafruit только для сохранения калибровки
- использовать 3 всех возможных режима BNO055 (NDOF, IMU, Compss)
- выделить Arduino Nano для вычисления локализации на основе измерений BNO055
Шаг 3. Аппаратная точка 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 и делать это самостоятельно.
Рекомендуемые:
Карманный прибор для проверки температуры воздуха своими руками: 6 шагов

Карманный прибор для проверки температуры воздуха своими руками: для этого мы будем использовать дисплей Nokia 5110, цифровой модуль температуры и Arduino Uno. Также нужен разъем на 9В с проводами, а не бочка, с выключателем и проводами. Может понадобиться паяльник, а можно и просто провода скрутить
ЦИФРОВОЙ МНОГОФУНКЦИОНАЛЬНЫЙ ИЗМЕРИТЕЛЬНЫЙ ИНСТРУМЕНТ: 21 шаг (с изображениями)

ЦИФРОВОЙ МНОГОФУНКЦИОНАЛЬНЫЙ ИЗМЕРИТЕЛЬНЫЙ ИНСТРУМЕНТ: Всем привет. Мне всегда было нужно устройство, которое помогло бы мне выровнять платформу 3D-принтера, и какое-то другое устройство, которое помогло бы мне получить приблизительную длину изогнутой поверхности, чтобы я мог легко вырезать наклейку нужной длины, чтобы
Простой и дешевый прибор для измерения температуры с использованием термистора: 5 шагов

Простой и дешевый прибор для измерения температуры с использованием термистора: простой и дешевый датчик температуры, использующий термистор NTC Термистор изменяет свое сопротивление со временем, используя это свойство, мы создаем датчик температуры, чтобы узнать больше о термисторе https://en.wikipedia.org/wiki/ Термистор
Как использовать терминал Mac и как использовать ключевые функции: 4 шага

Как использовать терминал Mac и как использовать основные функции: мы покажем вам, как открыть терминал MAC. Мы также покажем вам несколько функций Терминала, такие как ifconfig, изменение каталогов, доступ к файлам и arp. Ifconfig позволит вам проверить ваш IP-адрес и ваш MAC-адрес
Создайте свой собственный DMX-прибор - Arduino: 7 шагов (с изображениями)

Создайте свой собственный DMX-прибор - Arduino: Добро пожаловать на мою вторую страницу с инструкциями. Я многому научился на этом сайте, и мне кажется, что это отличное место для демонстрации моих проектов. Я надеюсь, что вы найдете этот проект интересным и полезным. Мне не терпится узнать, что вы думаете. Дайте мне знать в комментариях, просьба