Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
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
- jedan o wifi vezi
Mog robota pokreću dva 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 li znati više o lokalizaciji? Evo članka o tome kako kombinirati umjetnu inteligenciju i ultrazvuk za lokalizaciju robota
Korak 1: Zašto koristiti inercijsku mjernu jedinicu?
Zašto sam onda koristio IMU?
Prvi razlog bio je taj što ako je koder kotača dovoljno precizan da kontrolira ravno kretanje, čak i nakon ugađanja nisam mogao postići preciznost za rotaciju manju od +- 5 stupnjeva, a to nije dovoljno.
Pa sam isprobao 2 različita senzora. Prvo koristim magnetometar (LSM303D). Princip je bio jednostavan: prije rotacije postavite sjevernu orijentaciju, izračunajte cilj i prilagodite potez dok se cilj ne dosegne. Bilo je malo bolje nego s enkoderom, ali s previše disperzije. Nakon toga sam pokušao upotrijebiti žiroskop (L3GD20). Princip je bio samo integriranje brzine rotacije koju daje senzor za izračunavanje rotacije. I radilo je dobro. Uspio sam kontrolirati rotaciju pri +- 1 stupnju.
Ipak, bio sam znatiželjan isprobati neki IMU. Biram komponentu BNO055. Proveo sam neko vrijeme kako bih razumio i testirao ovaj IMU. Na kraju sam odlučio odabrati ovaj senzor iz sljedećih razloga
- Mogu kontrolirati rotaciju, kao i s 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?
BNO055 IMU je Boschev 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 kako bih naučio kako radi i isprobao različite načine njegove uporabe.
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
- koristiti 3 od svih mogućih načina rada BNO055 (NDOF, IMU, Compss)
- posvetiti Arduino Nano za izračunavanje lokalizacije na temelju BNO055 poruka
Korak 3: Hardverska točka Vue
BNO055 je komponenta I2C. Za komunikaciju mu je potrebno napajanje, SDA i SCL.
Samo pazite na Vdd napon prema proizvodu koji ste kupili. Bosch čip radi u rasponu: 2,4 V do 3,6 V, a 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 spojeni su 2 x 2k pull-up otpornicima.
- 3 LED spojena na Nano za dijagnostiku (s otpornicima)
- 2 konektora za definiranje načina rada nakon pokretanja
- 1 konektor prema BNO (Gnd, Vdd, Sda, Scl, Int)
- 1 priključak prema Robotu/Mega (+9V, Gnd, sda, Scl, Pin11, Pin12)
Malo lemljenja i to je to!
Korak 4: Kako to funkcionira?
S komunikacijske točke vue:
- Nano je magistar I2C sabirnica
- Robot/Mega i BNO055 su I2C robovi
- Nano trajno čita registre BNO055
- Robot/Mega podiže numerički signal kako bi zatražio riječ od Nano
Od točke proračuna vue: Nano u kombinaciji s 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)
S funkcionalne točke gledišta: Nano:
- upravlja kalibracijom BNO055
- upravlja parametrima i naredbama BNO055
Podsistem Nano & BNO055:
- izračunati za svaki kotač robota apsolutni smjer i lokalizaciju (s faktorom razmjera)
- izračunati relativni smjer tijekom rotacije robota
Korak 5: Arhitektura i softver
Glavni softver radi na Arduino Nano -u
- Arhitektura se temelji na I2C komunikaciji.
- Odlučio sam se posvetiti Nanou zbog činjenice da je Atmega koja pokreće robota već bila prilično učitana i da je zbog ove arhitekture najjednostavnije ponovno korištenje na drugom mjestu.
- Nano čita registre BNO055, izračunava i pohranjuje zaglavlje i lokalizaciju u vlastite 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 eeproomu)
Korak 6: Što 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 za "traženje tokena".
Vezano za BNO055 za 2D orijentaciju
Mogu se koncentrirati na 3 različita načina rada: NDOF (kombinirati žiroskop, akcelerometar i kompas) dok je robot u mirovanju, IMU (kombinirani žiroskop, akcelerometar) dok se robot kreće i kompas tijekom faze lokalizacije. Prebacivanje između ovih načina rada je jednostavno i brzo.
Kako bih smanjio veličinu koda i zadržao mogućnost korištenja prekida BNO055 za otkrivanje sudara, radije ne koristim biblioteku Adafruit i to činim sam.