Sadržaj:

Način korištenja inercijske mjerne jedinice?: 6 koraka
Način korištenja inercijske mjerne jedinice?: 6 koraka

Video: Način korištenja inercijske mjerne jedinice?: 6 koraka

Video: Način korištenja inercijske mjerne jedinice?: 6 koraka
Video: Pretvaranje mjernih jedinica - brzo i jednostavno! 2024, Novembar
Anonim
Način korištenja inercijske mjerne jedinice?
Način korištenja inercijske mjerne jedinice?

Kontekst:

Za zabavu gradim robota kojeg želim autonomno kretati unutar kuće.

To je dug posao i radim ga korak po korak.

Već sam objavio 2 uputstva na tu temu:

  • jedan o izradi kodera za kotače
  • jedno o wifi konekciji

Mog robota pokreću 2 istosmjerna motora uz pomoć domaćeg enkodera.

Trenutno poboljšavam kontrolu kretanja i proveo sam neko vrijeme sa žiroskopom, akcelerometrom i IMU -om. Bilo bi mi drago podijeliti ovo iskustvo.

Želite znati više o lokalizaciji? Evo članka o tome kako kombinirati umjetnu inteligenciju i ultrazvuk za lokalizaciju robota

Korak 1: Zašto koristiti inercijalnu mjernu jedinicu?

Zašto koristiti inercijalnu mjernu jedinicu?
Zašto koristiti inercijalnu mjernu jedinicu?

Zašto sam onda koristio IMU?

Prvi razlog je bio taj što je koder kotača dovoljno precizan da kontrolira ravno kretanje, čak ni nakon podešavanja nisam mogao postići preciznost za rotaciju manju od +- 5 stupnjeva, što nije dovoljno.

Pa sam isprobao 2 različita senzora. Prvo koristim magnetometar (LSM303D). Princip je bio jednostavan: prije rotacije odredite sjevernu orijentaciju, izračunajte cilj i prilagodite potez dok se cilj ne dosegne. Bilo je malo bolje nego kod kodera, ali sa previše disperzije. Nakon toga sam pokušao koristiti žiroskop (L3GD20). Princip je bio samo integriranje brzine rotacije koju daje senzor za izračunavanje rotacije. I radilo je dobro. Mogao sam kontrolirati rotaciju na +- 1 stepen.

Ipak, bio sam znatiželjan da isprobam neki IMU. Odabrao sam komponentu BNO055. Proveo sam neko vrijeme da razumijem i testiram ovaj IMU. Na kraju sam odlučio izabrati ovaj senzor iz sljedećih razloga

  • Mogu kontrolirati rotaciju, kao i sa L3GD20
  • Mogu otkriti laganu rotaciju kada se krećem ravno
  • Moram dobiti sjevernu orijentaciju za lokalizaciju robota, a kalibracija kompasa BNO055 je vrlo jednostavna

Korak 2: Kako koristiti BNO055 za 2D lokalizaciju?

Kako koristiti BNO055 za 2D lokalizaciju?
Kako koristiti BNO055 za 2D lokalizaciju?

BNO055 IMU je Bosch 9 -osni inteligentni senzor koji može pružiti apsolutnu orijentaciju.

Tehnički list pruža potpunu dokumentaciju. To je visokotehnološka komponenta, prilično je složen proizvod i proveo sam nekoliko sati da naučim kako funkcionira i isprobam različite načine njegove upotrebe.

Mislim da bi moglo biti korisno podijeliti ovo iskustvo.

Prvo sam koristio biblioteku Adafruit koja pruža dobar alat za kalibraciju i otkrivanje senzora.

Na kraju i nakon puno testova odlučio sam

  • biblioteku Adafruit koristite samo za spremanje kalibracije
  • koristite 3 od svih mogućih načina rada BNO055 (NDOF, IMU, Compss)
  • posveti Arduino Nano za izračunavanje lokalizacije na osnovu BNO055 mjerenja

Korak 3: Hardverska tačka Vue -a

Hardverska tačka Vue -a
Hardverska tačka Vue -a
Hardverska tačka Vue -a
Hardverska tačka Vue -a
Hardverska tačka Vue -a
Hardverska tačka Vue -a

BNO055 je I2C komponenta. Zato mu je potrebno napajanje, SDA i SCL za komunikaciju.

Samo pazite na Vdd napon u skladu s proizvodom koji ste kupili. Bosch čip radi u rasponu: 2,4 V do 3,6 V i možete pronaći komponente od 3,3 V i 5 V.

Nema poteškoća pri povezivanju Nano i BNO055.

  • BNO055 pokreće Nano
  • SDA i SCL su povezani sa 2 x 2k pull-up otpornicima.
  • 3 LED spojena na Nano za dijagnostiku (s otpornicima)
  • 2 konektora koji se koriste za definiranje načina rada nakon pokretanja
  • 1 konektor prema BNO (Gnd, Vdd, Sda, Scl, Int)
  • 1 konektor prema Robotu/Mega (+9V, Gnd, sda, Scl, Pin11, Pin12)

Malo lemljenja i to je to!

Korak 4: Kako to funkcionira?

Kako to radi ?
Kako to radi ?

S komunikacijske točke vue:

  • Nano je magistar I2C sabirnice
  • Robot/Mega i BNO055 su I2C robovi
  • Nano trajno čita BNO055 registre
  • Robot/Mega podiže numerički signal kako bi zatražio riječ od Nano

Od tačke proračuna vue: Nano u kombinaciji sa BNO055 isporučuje

  • Zaglavlje kompasa (koristi se za lokalizaciju)
  • Relativni naslov (koristi se za kontrolu rotacija)
  • Apsolutni smjer i položaj (koristi se za kontrolu poteza)

Sa funkcionalne tačke gledišta: Nano:

  • upravlja kalibracijom BNO055
  • upravlja parametrima i naredbama BNO055

Podsistem Nano & BNO055:

  • izračunajte za svaki robotski kotač apsolutni smjer i lokalizaciju (s faktorom razmjera)
  • izračunati relativni smjer tokom rotacije robota

Korak 5: Arhitektura i softver

Arhitektura i softver
Arhitektura i softver

Glavni softver radi na Arduino Nano -u

  • Arhitektura se temelji na I2C komunikaciji.
  • Odlučio sam se za posvećivanje Nanoa zbog činjenice da je Atmega koja pokreće robota već bila prilično učitana i da je zbog ove arhitekture najlakše za ponovnu upotrebu na drugom mjestu.
  • Nano čita registre BNO055, izračunava i pohranjuje zaglavlje i lokalizaciju u svoje registre.
  • Arduino Atmega koji pokreće kod robota, šalje podatke kodera kotača u Nano i čita naslove i lokalizaciju unutar Nano registara.

Kod podsistema (Nano) dostupan je ovdje na GitHubu

Alat za kalibraciju Adafruit ako je ovdje na GitHubu (kalibracija će biti pohranjena na eeproom -u)

Korak 6: Šta sam naučio?

Vezano za I2C

Prvo sam pokušao imati 2 master (Arduino) i 1 slave (senzor) na istoj sabirnici, ali na kraju je moguće i najjednostavnije postaviti samo Nano kao glavnog i koristiti GPIO vezu između 2 Arduina da "zatraži token".

Vezano za BNO055 za 2D orijentaciju

Mogu se koncentrirati na 3 različita načina rada: NDOF (kombinovani žiroskop, akcelerometar i kompas) kada je robot u mirovanju, IMU (kombinovani žiroskop, akcelerometar) kada se robot kreće i kompas u fazi lokalizacije. Prebacivanje između ovih načina rada je jednostavno i brzo.

Da bih smanjio veličinu koda i zadržao mogućnost korištenja prekida BNO055 za otkrivanje sudara, radije ne bih koristio biblioteku Adafruit i to činio sam.

Preporučuje se: