Kazalo:

Način uporabe inercialne merilne enote?: 6 korakov
Način uporabe inercialne merilne enote?: 6 korakov

Video: Način uporabe inercialne merilne enote?: 6 korakov

Video: Način uporabe inercialne merilne enote?: 6 korakov
Video: Ави Леб: Сознание, UAP, Жак Валле 2024, November
Anonim
Način uporabe inercialne merilne enote?
Način uporabe inercialne merilne enote?

Kontekst:

Za zabavo gradim robota, ki ga želim avtonomno premikati v hiši.

Delo je dolgo in delam ga korak za korakom.

Na to temo sem že objavil 2 navodili:

  • eno o izdelavi kodirnika koles
  • eno o wifi povezavi

Mojega robota poganjata dva enosmerna motorja s pomočjo domačega dajalnika koles.

Trenutno izboljšujem premikanje in sem nekaj časa preživel z žiroskopom, merilnikom pospeška in IMU. Z veseljem bi delil to izkušnjo.

Želite izvedeti več o lokalizaciji? Tukaj je članek o tem, kako združiti umetno inteligenco in ultrazvok za lokalizacijo robota

1. korak: Zakaj uporabiti inercialno merilno enoto?

Zakaj uporabljati enoto za inercijsko merjenje?
Zakaj uporabljati enoto za inercijsko merjenje?

Zakaj sem torej uporabil IMU?

Prvi razlog je bil, da če je kodirnik kolesa dovolj natančen za nadzor naravnost, tudi po uglaševanju nisem mogel doseči natančnosti za vrtenje manj kot +5 stopinj in to ni dovolj.

Zato sem preizkusil 2 različna senzorja. Najprej uporabim magnetometer (LSM303D). Princip je bil preprost: pred vrtenjem se obrnite proti severu, izračunajte cilj in prilagodite premik, dokler cilj ni dosežen. Bilo je malo bolje kot s kodirnikom, vendar s preveč razpršenostjo. Nato sem poskusil uporabiti žiroskop (L3GD20). Načelo je bilo le vključiti hitrost vrtenja, ki jo daje senzor za izračun vrtenja. In dobro je delovalo. Rotacijo sem lahko nadzoroval pri +1 stopinjah.

Kljub temu sem bil radoveden, da preizkusim IMU. Izberem komponento BNO055. Nekaj časa sem porabil za razumevanje in preizkušanje tega IMU. Na koncu sem se odločil za izbiro tega senzorja iz naslednjih razlogov

  • Vrtenje lahko nadziram tudi z L3GD20
  • Pri premikanju naravnost lahko zaznam rahlo vrtenje
  • Za lokalizacijo robota moram dobiti severno orientacijo in umerjanje kompasa BNO055 je zelo preprosto

2. korak: Kako uporabiti BNO055 za 2D lokalizacijo?

Kako uporabiti BNO055 za 2D lokalizacijo?
Kako uporabiti BNO055 za 2D lokalizacijo?

BNO055 IMU je Boschev 9 -osni inteligentni senzor, ki bi lahko zagotovil absolutno orientacijo.

Podatkovni list vsebuje popolno dokumentacijo. Gre za visokotehnološko komponento, za precej kompleksen izdelek in porabil sem nekaj ur, da sem se naučil, kako deluje, in preizkusil različne načine njegove uporabe.

Mislim, da bi bilo koristno deliti to izkušnjo.

Najprej sem uporabil knjižnico Adafruit, ki ponuja dobro orodje za umerjanje in odkrivanje senzorja.

Na koncu in po številnih testiranjih sem se odločil

  • Knjižnico Adafruit uporabite samo za shranjevanje kalibracije
  • uporabite 3 od vseh možnih načinov BNO055 (NDOF, IMU, Compss)
  • nameni Arduino Nano za izračun lokalizacije na podlagi BNO055 izpiskov

3. korak: Strojna točka Vue

Strojna točka Vue
Strojna točka Vue
Strojna točka Vue
Strojna točka Vue
Strojna točka Vue
Strojna točka Vue

BNO055 je komponenta I2C. Za komunikacijo potrebuje napajanje, SDA in SCL.

Pazite le na napetost Vdd glede na izdelek, ki ste ga kupili. Boschev čip deluje v razponu: 2,4 V do 3,6 V in najdete komponente 3,3 V in 5 V.

Pri povezovanju Nano in BNO055 ni težav.

  • BNO055 poganja Nano
  • SDA in SCL sta povezana z 2 x 2k vlečnimi upori.
  • 3 LED, priključena na Nano za diagnozo (z upori)
  • 2 priključka za definiranje načina po zagonu
  • 1 priključek proti BNO (Gnd, Vdd, Sda, Scl, Int)
  • 1 priključek proti robotu/mega (+9V, Gnd, sda, scl, pin11, pin12)

Malo spajkanja in to je to!

4. korak: Kako deluje?

Kako deluje ?
Kako deluje ?

S komunikacijske točke vue:

  • Nano je vodja vodila I2C
  • Robot/Mega in BNO055 sta I2C sužnja
  • Nano trajno bere registre BNO055
  • Robot/Mega dvigne številčni signal, da zahteva besedo od Nano

Od točke izračuna vue: Nano v kombinaciji z BNO055 prinaša

  • Naslov kompasa (uporablja se za lokalizacijo)
  • Relativni naslov (uporablja se za nadzor vrtenja)
  • Absolutni smer in položaj (uporablja se za nadzor potez)

S funkcionalnega vidika vue: Nano:

  • upravlja kalibracijo BNO055
  • upravlja parametre in ukaze BNO055

Podsistem Nano in BNO055:

  • izračunajte za vsako robotsko kolo absolutno smer in lokacijo (s faktorjem lestvice)
  • izračunajte relativni smer med vrtenjem robota

5. korak: Arhitektura in programska oprema

Arhitektura in programska oprema
Arhitektura in programska oprema

Glavna programska oprema deluje na Arduino Nano

  • Arhitektura temelji na komunikaciji I2C.
  • Za namestitev Nano sem se odločil zaradi dejstva, da je bila Atmega, ki poganja robota, že naložena in je zaradi te arhitekture najlažje ponovno uporabiti drugje.
  • Nano bere registre BNO055, izračuna in shrani naslov in lokalizacijo v lastne registre.
  • Arduino Atmega, ki poganja robotsko kodo, pošilja podatke o kodirnikih koles v Nano in bere naslove in lokacijo znotraj registrov Nano.

Koda podsistema (Nano) je na voljo tukaj na GitHubu

Orodje za umerjanje Adafruit, če je tukaj na GitHubu (kalibracija bo shranjena v eeproomu)

6. korak: Kaj sem se naučil?

Glede I2C

Najprej sem poskušal imeti 2 masterja (Arduino) in 1 slave (senzor) na istem vodilu, vendar je na koncu mogoče in najlažje nastaviti samo Nano kot glavnega in uporabiti povezavo GPIO med dvema Arduinoma za "zahtevo žetona".

Glede BNO055 za 2D orientacijo

Lahko se osredotočim na 3 različne načine delovanja: NDOF (kombinirani žiroskop, merilnik pospeška in kompas), ko robot miruje, IMU (kombinirani žiroskop, merilnik pospeška), ko se robot premika, in kompas v fazi lokalizacije. Preklapljanje med temi načini je enostavno in hitro.

Če želite zmanjšati velikost kode in ohraniti možnost, da uporabite prekinitev BNO055 za odkrivanje trka, raje ne uporabljam knjižnice Adafruit in to storim sam.

Priporočena: