Интернет-лаборатория роботов ZiZiBOT.RU

Проектирование и разработки в области робототехники и автоматизации технологических процессов. Производство готовых роботов и конструкторов для творчества. Консультации и обучение по электронике и программированию.

г. Юрга,
ул.Ленинградская 38/83

+7 923-503-6074

Датчик абсолютной ориентации BNO-055

Ссылки для скачавания использованных материалов внизу статьи


До чего дошел прогресс? В свободной продаже по сравнительно низкой стоимости появился датчик производства BOSH BNO-055.
Современные датчики ориентации, применяемые в большинстве малобюджетных устройств, представляют собой электронные аналоги своих классических прототипов, но работают иначе. Например, электронный гироскоп не может показать положение устройства в пространстве, он передает угловую скорость по осям, а уже по ней следует вести непрерывный расчет поворотов устройства, что и позволяет следить за ориентацией. С электронным компасом ситуация также не однозначная, у него нет встроенной стрелки с направлением на магнитный север. Он, конечно, передает напряженности магнитного поля по осям, но расчет по ним «вектора направления», скорее всего, покажет, что полюсов несколько, и направлены электронные стрелки совсем не на север, и два разных прибора дадут различные результаты. Тоже будет и с акселерометром, электронный аналог акселерометра (на примере MPU-6050) очень сильно «шумит», и его показания нужно подвергать математической обработке, в противном случае зашкаливающие ускорения просто не возможно будет использовать.
Я хотел сказать, что подключив к своему роботу гироскоп, акселерометр, магнитометр (электронный компас), следует еще применить значительный объем математических расчетов, чтобы получить из «сырых» данных значение ориентации робота. Будет правильно, если эти занимается отдельный процессор, который не отвлекается ни на что другое и постоянно принимает информацию от датчиков ориентации, обрабатывает её и фиксирует результат.
При работе с механизмом балансировки  двухколесного робота на основе АТMega328 я замерял время, затраченное контроллером на вычисления и работу с датчиком ориентации: 1.4милСек – получение данных от MPU-6050; расчет с использование комплементарного фильтра показаний по одной оси - 0.6милСек; частота запросов к MPU-6050 – не чаще чем 1 раз в 4милСек. При этом я не мог точно знать вектор направленности моего робота, и постоянно думал о том, как сэкономить на расчетах, чтобы найти процессорное время для обработки другой информации. А с BNO-055 этого уже не требуется. Дело в том, что в BNO-055 есть свой модуль вычислений, это 32-битное ядро ARM Cortex M0, что позволяет производить большинство расчетов непосредственно внутри BNO-055 и пользоваться уже готовыми результатами.
Ниже приведена внутренняя архитектура описываемого датчика и его взаимодействие с внешним процессором, информация взята из документации BOSH.
 архитектура bn0055
Ядро получает данные: акселерометра, гироскопа, магнитометра, производит расчеты и сохраняет результаты. Результаты в дальнейшем могут быть запрошены внешними устройствами.  В документации намекается на то, что данный прибор можно использовать даже для навигации, т.е. его достаточно для нахождения не только углов поворота, но и для определения относительных координат  и маршрута (инерционной навигации). Что же, будет время, я проверю, насколько точными будут показания. Прибор может выдавать информацию: по  кватернионам, линейному ускорению, вектору гравитации, направлению движения устройства.
Согласно документации BNO-055 может  поддерживать три интерфейса обмена с внешними устройствами: I2C, HID-I2C, UART (Serial). Какой интерфейс будет применяться, задается логическими значениями на паре контактов микросхемы 5 (PS1) и  6 (PS0), если оба контакта подтянуты к нулю, то с датчиком можно будет общаться по I2C протоколу.
Ниже приведена стандартная схема подключения устройства при использовании его по I2C.
стандартная схема подключения bno-055 при использовании его по I2C

Области применения подобных устройств различны, я же попробую применить его для навигации мобильных роботов и квадрокоптеров.
Перед переходом к рассмотрению конкретного образца, приведу основные характеристики микросхемы Bosch Sensortec BNO-055:
    рабочие диапазоны акселерометра: ±2, ±4, ±8, ±16g;
    настраиваемая полоса ФНЧ акселерометра: 1 кГц – менее 8 Гц;
    рабочие диапазоны гироскопа: от ±125 до ±2000 °/с;
    настраиваемая полоса ФНЧ гироскопа: 523-12 Гц;
    рабочий диапазон магнитометра: ±1300 мкТл по осям х, у, ±2500 мкТл по оси z;
    разрешение магнитометра: ~0.3 мкТл;
    напряжение питания микросхемы: 2.4–3.6 В;
    корпус: 28-выводный LGA размером 3.8×5.2×1.13 мм;
    диапазон рабочих температур: от –40 до 85 °C.
Конечно, появился он на рынке уже несколько лет назад, но сейчас производство модулей на его основе освоили в «Поднебесной» и предложения стали доступными по цене.
Я заказал на АлиЭкспрес три модуля GY-BNO055, обошлись они мне 1725 рублей с доставкой (около 650руб за единицу).
Не откладывая в долгий ящик, я решил провести их тестирование, тем более что модули стоят не по 60 рублей, как MPU-6050, а более чем в 10 раз дороже, и тем дороже потери от приобретения фейковых (фальшивых) модулей.
И вот этот момент настал.
 gy-bno055
Осмотр модуля выявил различия со всеми фото на сайтах продавцов, а именно не были установлены (впаяны) перемычки (правее стрелок ориентации).  Я предположил, что этими перемычками задается интерфейс работы с внешними устройствами, а детальное рассмотрение дорожек подтвердило мои предположение. При разомкнутых перемычках состояние было не документированными, при замкнутых (на землю) должен работать по I2C.
Собранная мною тестовая схема приведена ниже. Я использовал то,  что было под рукой - Arduino Nano. Питание платы также осуществлялось от 3.3В Arduino Nano. Nano была подключена к ноутбуку, от него и получала питание.
 схема arduino nano bno055
Сканирование I2C портов показало мою правоту. До замыкания перемычек прибор не был виден.
Ссылка на программу для Arduino IDE сканирования I2C портов.
Проверка всех трех приобретенных модулей показала, что один из модулей неисправен, я конечно выставил претензию продавцу, но пока стоимость оставшихся образцов возросла до 850 рублей.
Так как я промучился с неисправным модулем до вечера, у меня не осталось времени для самостоятельного изучения регистров BNO-055. К  счастью была найдена готовая библиотека от Adafruit. Она с небольшими правками примеров подошла к моим модулям. Ссылки внизу статьи.
Правки касались I2C адреса прибора, в библиотеке от Adafruit адрес был 0x28, а адрес моих модулей 0x29, меняем строку в примерах:
Adafruit_BNO055 bno = Adafruit_BNO055(55);
на
Adafruit_BNO055 bno = Adafruit_BNO055(55, 0x29);
или
Adafruit_BNO055 bno = Adafruit_BNO055();
на
Adafruit_BNO055 bno = Adafruit_BNO055(55, 0x29);
Теперь рассмотрим, как это все работает:
1.    Нужно установить библиотеку Adafruit_BNO055-master.zip в среду Arduino IDE;
2.    Нужно установить библиотеку AdaSensor.zip в среду Arduino IDE;
3.    После установки библиотек станут доступны примеры использования BNO-055: rawdata, sensorapi, restore_offsets, bunny.
3.1.    Rawdata позволяет отследить работу прибора при передачи им данных от отдельных датчиков и расчетных характеристик (потребуется удалять комментарии).
3.2.     Sensorapi инкапсулирует и представляет информацию в виде классов.
3.3.     restore_offsets позволяет восстанавливать информацию по калибровки из внешних источников, это актуально, поскольку BNO055 не имеет своей энергонезависимой памяти и все данные по калибровки прибора будут утеряны после подключения питания. Сама же калибровка занимает довольно продолжительное время и до ее завершения данные будут искажены.
3.4.     Bunny позволяет визуализировать изменение положения прибора в виде образа кролика в среде processing .

 

 

Вертим кролика


Для этого потребуется установить  среду программирования processing (загрузить и распаковать в какую-нибудь папку) https://processing.org/download/. После первого запуска папке «Документы» появится папка «Processing», а в ней папка «Libraries».

«Документы» появится папка «Processing», а в ней папка «Libraries»
Скачать библиотеку Saito's OBJ Loader:
https://github.com/adafruit/Adafruit_BNO055/blob/master/OBJLoader/OBJLoader.zip
Скачать последнюю версию библиотеки GP4 GUI:
https://sourceforge.net/projects/g4p/files/?source=navbar
Скопировать полученные архивы в папку «Libraries». Далее я их распаковал в текущую папку, требуется , чтобы папка «GP4» и папка «OBJLoader» были в «Libraries», а их содержимое было как на рисунках:
Скачать последнюю версию библиотеки GP4 GUI:

Скачать библиотеку Saito's OBJ Loader:

 

Теперь распакуем Adafruit_BNO055-master.zip в отдельную папку, найдем и откроем пример bunny, поменяем адрес прибора, как указано выше, сохраним себе в рабочий директорий и загрузим в Arduino. Если все прошло удачно можно приступать к визуализации.
Запускаем среду Processing (Processing.exe) открываем скетч для Processing, расположенный внутри папки bunny (processing/cuberotate/cuberotate.pde).

processing/cuberotate/cuberotate.pde

 

cuberoate


Запускаем на выполнение загруженный скетч, наслаждаемся вращением кролика при помощи BNO-055. При этом самого прибора касаться нельзя, он очень чувствительный и чуть что зависает напрочь. Лучше всего BNO-055 и Arduino расположить на одной подставке, которую и вращать. За провода между BNO-055 и Arduino также держаться нельзя.
 наслаждаемся вращением кролика при помощи BNO-055
У меня Processing заработал не сразу, по началу возникала ошибка 1114, я поменял настройки энергосбережения ПК в «Высокую производительность» , что изменило настройки переключаемой графики на внешнюю карту и это помогло (подобная ошибка характерна для систем с переключаемой графикой).
На сегодня все, как только установлю прибор на робота, отпишусь.

Ссылки на скачивание:

Библиотека для BNO055 Adafruit_BNO055-master.zip
Дополнительная библиотека классов AdaSensor.zip
Программа сканирования портов scani2c.zip
Документация BOSH BST_BNO055_DS000_12.pdf
Документация BOSH BST-BNO055-HS000-00.pdf
Документация adafruit-bno055-absolute-orientation-sensor-1006287.pdf

 


X

Написать сообщение:

Укажите свой номер телефона или e-mail для обратной связи
- e-mail
ИЛИ
- номер телефона

Текст сообщения: