Obsah:

Způsob použití inerciální měřicí jednotky?: 6 kroků
Způsob použití inerciální měřicí jednotky?: 6 kroků

Video: Způsob použití inerciální měřicí jednotky?: 6 kroků

Video: Způsob použití inerciální měřicí jednotky?: 6 kroků
Video: Apple Vision Pro Unpacked - what YOU can expect 2024, Listopad
Anonim
Způsob použití inerciální měřicí jednotky?
Způsob použití inerciální měřicí jednotky?

Kontext:

Stavím pro zábavu robota, kterého chci autonomně pohybovat v domě.

Je to dlouhá práce a dělám ji krok za krokem.

Na toto téma jsem již publikoval 2 pokyny:

  • jedna o výrobě kodéru kol
  • jedna o wifi připojení

Můj robot je poháněn dvěma stejnosměrnými motory pomocí mého domácího kodéru kol.

V současné době zlepšuji ovládání pohybu a strávil jsem nějaký čas s gyroskopem, akcelerometrem a IMU. Rád se o tuto zkušenost podělím.

Chcete vědět více o lokalizaci? Zde je článek o tom, jak kombinovat umělou inteligenci a ultrazvuk k lokalizaci robota

Krok 1: Proč používat inerciální měřicí jednotku?

Proč používat inerciální měřicí jednotku?
Proč používat inerciální měřicí jednotku?

Proč jsem tedy použil IMU?

Prvním důvodem bylo to, že pokud je kodér kol dostatečně přesný na ovládání přímého pohybu, ani po vyladění jsem nebyl schopen dosáhnout přesnosti pro rotaci menší než +- 5 degresů a to nestačí.

Zkusil jsem tedy 2 různé senzory. Nejprve používám magnetometr (LSM303D). Princip byl jednoduchý: před rotací získat severní orientaci, vypočítat cíl a upravit pohyb, dokud cíle nedosáhne. Bylo to trochu lepší než s kodérem, ale s příliš velkým rozptylem. Poté jsem zkusil použít gyroskop (L3GD20). Princip spočíval pouze v integraci rychlosti otáčení poskytované senzorem pro výpočet rotace. A fungovalo to dobře. Dokázal jsem ovládat rotaci při +- 1 degre.

Přesto jsem byl zvědavý vyzkoušet nějaké IMU. Vybírám komponentu BNO055. Strávil jsem nějaký čas, abych porozuměl a otestoval tuto IMU. Nakonec jsem se rozhodl vybrat tento senzor z následujících důvodů

  • Dokážu ovládat rotaci i L3GD20
  • Při přímém pohybu mohu detekovat mírné otáčení
  • Potřebuji získat severní orientaci pro lokalizaci robota a kalibrace kompasu BNO055 je velmi jednoduchá

Krok 2: Jak používat BNO055 pro 2D lokalizaci?

Jak používat BNO055 pro 2D lokalizaci?
Jak používat BNO055 pro 2D lokalizaci?

BNO055 IMU je 9osý inteligentní senzor Bosch, který by mohl zajistit absolutní orientaci.

Datasheet poskytuje kompletní dokumentaci. Jedná se o vysoce technologickou součást, je to poměrně složitý produkt a strávil jsem několik hodin, abych se naučil, jak funguje, a vyzkoušel různé způsoby použití.

Myslím, že by mohlo být užitečné sdílet tuto zkušenost.

Nejprve jsem použil knihovnu Adafruit, která poskytuje dobrý nástroj pro kalibraci a objevování senzoru.

Na konci a po mnoha testech jsem se rozhodl

  • knihovnu Adafruit použijte pouze k uložení kalibrace
  • použijte 3 ze všech možných režimů BNO055 (NDOF, IMU, Compss)
  • věnovat Arduino Nano pro výpočet lokalizace na základě měření BNO055

Krok 3: Hardware Point of 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 komponenta I2C. Ke komunikaci tedy potřebuje napájení, SDA a SCL.

Věnujte pozornost napětí Vdd podle zakoupeného produktu. Čip Bosch pracuje v rozsahu: 2,4 V až 3,6 V a najdete komponenty 3,3 V a 5 V.

Pro připojení Nano a BNO055 nejsou žádné potíže.

  • BNO055 je poháněn Nano
  • SDA a SCL jsou spojeny s 2 x 2k pull-up rezistory.
  • 3 LED připojené k Nano pro diagnostiku (s odpory)
  • 2 konektory slouží k definování režimu po spuštění
  • 1 konektor směrem k BNO (Gnd, Vdd, Sda, Scl, Int)
  • 1 konektor směrem k robotu/Mega (+9V, Gnd, sda, Scl, Pin11, Pin12)

Trochu pájení a je to!

Krok 4: Jak to funguje?

Jak to funguje ?
Jak to funguje ?

Z komunikačního bodu vue:

  • Nano je master sběrnice I2C
  • Robot/Mega a BNO055 jsou slave I2C
  • Nano trvale čte registry BNO055
  • Robot/Mega zvedne numerický signál, aby si vyžádal slovo od Nano

Z bodu výpočtu vue: Nano v kombinaci s BNO055 přináší

  • Nadpis kompasu (používá se k lokalizaci)
  • Relativní nadpis (používá se k ovládání rotací)
  • Absolutní nadpis a pozice (slouží k ovládání tahů)

Z funkčního bodu vue: The Nano:

  • spravuje kalibraci BNO055
  • spravuje parametry a příkazy BNO055

Subsystém Nano & BNO055:

  • vypočítat pro každé kolo robota absolutní směr a lokalizaci (s faktorem měřítka)
  • vypočítat relativní směr během otáčení robota

Krok 5: Architektura a software

Architektura a software
Architektura a software

Hlavní software běží na Arduino Nano

  • Architektura je založena na komunikaci I2C.
  • Rozhodl jsem se věnovat Nano kvůli tomu, že Atmega, která robota provozuje, byla již dost nabitá a tato architektura usnadňuje opětovné použití jinde.
  • Nano čte registry BNO055, vypočítává a ukládá záhlaví a lokalizaci do vlastních registrů.
  • Arduino Atmega, který spouští kód robota, odesílá informace o kodérech kol do Nano a čte nadpisy a lokalizaci uvnitř nano registrů.

Zde na GitHubu je k dispozici subsytem (Nano) kód

Kalibrační nástroj Adafruit, pokud je zde na GitHubu (kalibrace bude uložena na eeproom)

Krok 6: Co jsem se naučil?

Ohledně I2C

Nejprve jsem se pokusil mít 2 master (Arduino) a 1 slave (senzor) na stejné sběrnici, ale nakonec je možné a nejjednodušší nastavit jako master pouze Nano a použít GPIO spojení mezi 2 Arduiny pro „vyžádání tokenu“.

Pokud jde o BNO055 pro 2D orientaci

Mohu se soustředit na 3 různé provozní režimy: NDOF (kombinovaný gyroskop, akcelerometr a kompas), když je robot nečinný, IMU (kombinovaný gyroskop, akcelerometr), když se robot pohybuje, a kompas během lokalizační fáze. Přepínání mezi těmito režimy je snadné a rychlé.

Aby se zmenšila velikost kódu a zachovala se možnost použít k detekci kolize přerušení BNO055, raději nepoužívám knihovnu Adafruit a dělám to sám.

Doporučuje: