Съдържание:

Начин за използване на инерционна измервателна единица?: 6 стъпки
Начин за използване на инерционна измервателна единица?: 6 стъпки

Видео: Начин за използване на инерционна измервателна единица?: 6 стъпки

Видео: Начин за използване на инерционна измервателна единица?: 6 стъпки
Видео: 機械設計技術 強度計算のやり方とInventor構造解析を比較 Compare strength calculation method and Inventor structural analysis 2024, Ноември
Anonim
Начин за използване на инерционна измервателна единица?
Начин за използване на инерционна измервателна единица?

Контекстът:

Изграждам за забавление робот, който искам да се движи автономно в къща.

Това е дълга работа и върша стъпка по стъпка.

Вече публикувах 2 инструкции по тази тема:

  • един за направата на енкодер на колела
  • един за wifi връзката

Моят робот се задвижва от 2 DC двигателя с помощта на домашния ми енкодер на колела.

В момента подобрявам движещото се управление и прекарах известно време с жироскоп, акселерометър и IMU. С удоволствие ще споделя този опит.

Искате ли да знаете повече за локализацията? Ето една статия за това как да комбинирате изкуствен интелект и ултразвук за локализиране на робота

Стъпка 1: Защо да използвате инерционна измервателна единица?

Защо да използвате единица за инерционно измерване?
Защо да използвате единица за инерционно измерване?

И така, защо използвах IMU?

Първата причина беше, че ако енкодерът на колелото е достатъчно прецизен, за да контролира правото движение, дори след тунинг не успях да получа точност за въртене под +- 5 градуса и това не е достатъчно.

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

Въпреки това ми беше любопитно да опитам някои IMU. Избирам компонент 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.4V до 3.6V и можете да намерите 3.3v и 5v компонент.

Няма трудности при свързването на Nano и BNO055.

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

Малко запояване и това е всичко!

Стъпка 4: Как работи?

Как работи ?
Как работи ?

От точката на комуникация на vue:

  • Nano е майсторът на автобуса I2C
  • Роботът/Mega и BNO055 са I2C роби
  • Nano постоянно чете регистрите BNO055
  • Роботът/Мега издига цифров сигнал, за да поиска думата от Nano

От точката на изчисление на vue: Nano в комбинация с BNO055 доставя

  • Заглавието на компаса (използва се за локализация)
  • Относителна заглавие (използва се за контрол на завъртанията)
  • Абсолютната позиция и позиция (използва се за контрол на ходовете)

От функционална гледна точка на vue: The Nano:

  • управлява калибрирането на 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 връзката между 2 Arduinos, за да „поиска токена“.

Относно BNO055 за 2D ориентация

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

За да намалите размера на кода и да запазите възможността да използвате прекъсване BNO055 за откриване на сблъсък, предпочитам да не използвам библиотеката Adafruit и да го правя сам.

Препоръчано: