Obsah:

Spôsob, ako použiť inerciálnu meraciu jednotku?: 6 krokov
Spôsob, ako použiť inerciálnu meraciu jednotku?: 6 krokov

Video: Spôsob, ako použiť inerciálnu meraciu jednotku?: 6 krokov

Video: Spôsob, ako použiť inerciálnu meraciu jednotku?: 6 krokov
Video: Homeowner Pushes Magical Button on Central AC Outdoor Unit 😱 How to Wire Air Handler & Thermostat 2024, November
Anonim
Ako používať inerciálnu meraciu jednotku?
Ako používať inerciálnu meraciu jednotku?

Kontext:

Staviam pre zábavu robota, ktorého chcem autonómne pohybovať v dome.

Je to dlhá práca a robím ju krok za krokom.

Na túto tému som už publikoval 2 návody:

  • jedna o výrobe kodéra kolies
  • jeden o wifi pripojení

Môj robot je poháňaný 2 jednosmernými motormi pomocou môjho doma vyrobeného kodéra kolies.

Aktuálne zdokonaľujem ovládanie pohybu a strávil som nejaký čas s gyroskopom, akcelerometrom a IMU. Rád by som sa podelil o túto skúsenosť.

Chcete vedieť viac o lokalizácii? Tu je článok o tom, ako kombinovať umelú inteligenciu a ultrazvuk na lokalizáciu robota

Krok 1: Prečo používať inerciálnu meraciu jednotku?

Prečo používať inerciálnu meraciu jednotku?
Prečo používať inerciálnu meraciu jednotku?

Prečo som teda použil IMU?

Prvým dôvodom bolo, že ak je enkodér kolies dostatočne presný na ovládanie priameho pohybu, ani po naladení som nebol schopný dosiahnuť presnosť pri otáčaní menšom ako +- 5 degresov a to nestačí.

Skúsil som teda 2 rôzne senzory. Najprv používam magnetometer (LSM303D). Princíp bol jednoduchý: pred rotáciou získajte severnú orientáciu, vypočítajte cieľ a upravujte pohyb, kým cieľ nedosiahnete. Bolo to o niečo lepšie ako s kodérom, ale s príliš veľkým rozptylom. Potom som sa pokúsil použiť gyroskop (L3GD20). Princípom bolo integrovať rýchlosť otáčania poskytovanú snímačom na výpočet rotácie. A fungovalo to dobre. Dokázal som ovládať rotáciu pri +- 1 stupňoch.

Napriek tomu som bol zvedavý vyskúšať nejaké IMU. Vyberám komponent BNO055. Strávil som nejaký čas na to, aby som porozumel a otestoval túto IMU. Nakoniec som sa rozhodol vybrať tento snímač z nasledujúcich dôvodov

  • Rotáciu môžem ovládať rovnako dobre ako pri L3GD20
  • Pri rovnom pohybe dokážem zaznamenať mierne otáčanie
  • Potrebujem získať severnú orientáciu pre lokalizáciu robota a kalibrácia kompasu BNO055 je veľmi jednoduchá

Krok 2: Ako používať BNO055 na 2D lokalizáciu?

Ako používať BNO055 na 2D lokalizáciu?
Ako používať BNO055 na 2D lokalizáciu?

BNO055 IMU je 9 -osý inteligentný senzor Bosch, ktorý by mohol poskytnúť absolútnu orientáciu.

Datasheet poskytuje kompletnú dokumentáciu. Jedná sa o high -tech komponent, je to pomerne zložitý produkt a strávil som niekoľko hodín, aby som sa dozvedel, ako funguje, a vyskúšal som rôzne spôsoby použitia.

Myslím si, že by mohlo byť užitočné podeliť sa o túto skúsenosť.

Najprv som použil knižnicu Adafruit, ktorá poskytuje dobrý nástroj na kalibráciu a objavenie senzora.

Na konci a po mnohých testoch som sa rozhodol

  • knižnicu Adafruit používajte iba na ukladanie kalibrácie
  • použite 3 zo všetkých možných režimov BNO055 (NDOF, IMU, Comps)
  • Venujte Arduino Nano na výpočet lokalizácie na základe meraní BNO055

Krok 3: Hardvérový bod Vue

Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue

BNO055 je komponent I2C. Na komunikáciu teda potrebuje napájanie, SDA a SCL.

Dávajte si pozor na napätie Vdd podľa produktu, ktorý ste si kúpili. Čip Bosch pracuje v rozsahu: 2,4 V až 3,6 V a nájdete komponenty 3,3 V a 5 V.

S pripojením Nano a BNO055 nie sú žiadne problémy.

  • BNO055 je poháňaný Nano
  • SDA a SCL sú spojené s 2 x 2 k výsuvnými odpormi.
  • 3 LED diódy pripojené k Nano na diagnostiku (s odpormi)
  • 2 konektory slúžiace na definovanie režimu po zavedení
  • 1 konektor smerom k BNO (Gnd, Vdd, Sda, Scl, Int)
  • 1 konektor smerom k robotu/Mega (+9 V, Gnd, sda, Scl, Pin11, Pin12)

Trochu spájkovania a je to!

Krok 4: Ako to funguje?

Ako to funguje ?
Ako to funguje ?

Z komunikačného bodu vue:

  • Nano je master zbernice I2C
  • Robot/Mega a BNO055 sú otroci I2C
  • Nano trvalo čítalo registre BNO055
  • Robot/Mega zdvihne číselný signál, aby si vyžiadal slovo od Nano

Z hľadiska výpočtu: Nano v kombinácii s BNO055 prináša

  • Nadpis kompasu (používa sa na lokalizáciu)
  • Relatívny nadpis (používa sa na ovládanie rotácií)
  • Absolútne nadpis a poloha (používané na ovládanie pohybov)

Z funkčného hľadiska: The Nano:

  • spravuje kalibráciu BNO055
  • spravuje parametre a príkazy BNO055

Subsystém Nano & BNO055:

  • vypočítajte pre každé koleso robota absolútny kurz a lokalizáciu (s faktorom mierky)
  • vypočítajte relatívny kurz počas otáčania robota

Krok 5: Architektúra a softvér

Architektúra a softvér
Architektúra a softvér

Hlavný softvér beží na zariadení Arduino Nano

  • Architektúra je založená na komunikácii I2C.
  • Rozhodol som sa venovať nanu, pretože Atmega, ktorá robot poháňa, bola už dosť nabitá a táto architektúra uľahčuje opätovné použitie inde.
  • Nano číta registre BNO055, vypočítava a ukladá záhlavie a lokalizáciu do vlastných registrov.
  • Arduino Atmega, ktorý spúšťa kód robota, odosiela informácie o kodéroch kolies do Nano a číta nadpisy a lokalizáciu vo vnútri nano registrov.

Tu na GitHub je k dispozícii subsytem (Nano) kód

Kalibračný nástroj Adafruit, ak je tu na GitHub (kalibrácia bude uložená v eeproom)

Krok 6: Čo som sa naučil?

Pokiaľ ide o I2C

Najprv som sa pokúsil mať 2 master (Arduino) a 1 slave (senzor) na tej istej zbernici, ale na konci je možné a najľahšie nastaviť ako hlavný iba Nano a použiť GPIO spojenie medzi 2 Arduinmi na „vyžiadanie tokenu“.

Pokiaľ ide o BNO055 pre 2D orientáciu

Môžem sa sústrediť na 3 rôzne prevádzkové režimy: NDOF (kombinovaný gyroskop, akcelerometer a kompasy), keď je robot v nečinnosti, IMU (kombinovaný gyroskop, akcelerometer), keď sa robot pohybuje, a kompas počas fázy lokalizácie. Prepínanie medzi týmito režimami je jednoduché a rýchle.

Aby sa zmenšila veľkosť kódu a zachovala sa možnosť používať na detekciu kolízií prerušenie BNO055, knižnicu Adafruit radšej nepoužívam a urobím to sám.

Odporúča: