Innholdsfortegnelse:
- Trinn 1: Hvorfor bruke en treghetsmåleenhet?
- Trinn 2: Hvordan bruke BNO055 for 2D -lokalisering?
- Trinn 3: Hardware Point of Vue
- Trinn 4: Hvordan fungerer det?
- Trinn 5: Arkitektur og programvare
- Trinn 6: Hva lærte jeg?
Video: En måte å bruke en treghetsmåleenhet?: 6 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Sammenhengen:
Jeg bygger for moro skyld en robot som jeg vil flytte autonomt inne i et hus.
Det er et langt arbeid, og jeg gjør trinn for trinn.
Jeg har allerede publisert 2 instrukser om dette emnet:
- en om å lage en hjulkoder
- en om wifi -tilkobling
Roboten min drives av to DC -motorer ved hjelp av min hjemmelagde hjulkoder.
Jeg forbedrer for øyeblikket den bevegelige kontrollen og har brukt litt tid med gyroskop, akselerometer og IMU. Jeg vil gjerne dele denne opplevelsen.
Vil du vite mer om lokalisering? Her er en artikkel om hvordan du kombinerer kunstig intelligens og ultralyd for å lokalisere roboten
Trinn 1: Hvorfor bruke en treghetsmåleenhet?
Så hvorfor brukte jeg en IMU?
Den første grunnen var at hvis hjulkoderen er presis nok til å kontrollere rett bevegelse, selv etter tuning, var jeg ikke i stand til å få en presisjon for rotasjon mindre enn +- 5 degres, og det er ikke nok.
Så jeg prøvde 2 forskjellige sensorer. For det første bruker jeg et magnetometer (LSM303D). Prinsippet var enkelt: Før rotasjonen får du nord -orienteringen, beregner du målet og justerer trekket til målet er nådd. Det var litt bedre enn med koder, men med for spredning. Etter det prøvde jeg å bruke et gyroskop (L3GD20). Prinsippet var bare å integrere rotasjonshastigheten fra sensoren for å beregne rotasjonen. Og det fungerte bra. Jeg klarte å kontrollere rotasjonen på +- 1 grader.
Likevel var jeg nysgjerrig på å prøve noen IMU. Jeg velger en BNO055 -komponent. Jeg brukte litt tid på å forstå og teste denne IMU. På slutten bestemte jeg meg for å velge denne sensoren av følgende årsaker
- Jeg kan kontrollere rotasjonen så vel som med L3GD20
- Jeg kan oppdage svak rotasjon når jeg beveger meg rett
- Jeg trenger å orientere meg nordover for robotlokalisering og kompasskalibreringen av BNO055 er veldig enkel
Trinn 2: Hvordan bruke BNO055 for 2D -lokalisering?
BNO055 IMU er en 9 -akset intelligent sensor fra Bosch som kan gi absolutt orientering.
Databladet gir en komplett dokumentasjon. Det er en høyteknologisk komponent, er det et ganske komplekst produkt, og jeg brukte noen timer på å lære hvordan det fungerer og prøve forskjellige måter å bruke det på.
Jeg tror det kan være nyttig å dele denne opplevelsen.
For det første brukte jeg Adafruit -biblioteket som gir et godt verktøy for å kalibrere og oppdage sensoren.
På slutten og etter mange tester bestemte jeg meg for det
- bruk Adafruit -biblioteket bare for å lagre kalibrering
- bruk 3 av alle mulige moduser for BNO055 (NDOF, IMU, Compss)
- dedikere en Arduino Nano til å beregne lokalisering basert på BNO055 -målinger
Trinn 3: Hardware Point of Vue
BNO055 er en I2C -komponent. Så den trenger strømforsyning, SDA og SCL for å kommunisere.
Bare vær forsiktig med Vdd -spenning i henhold til produktet du kjøpte. Bosch -brikken fungerer i området: 2,4V til 3,6V, og du kan finne 3,3v og 5v komponent.
Det er ingen problemer med å koble Nano og BNO055.
- BNO055 drives av Nano
- SDA og SCL er koblet til 2 x 2k pull-up motstander.
- 3 LED koblet til Nano for diagnose (med motstander)
- 2 kontakter som brukes til å definere modus etter oppstart
- 1 kontakt mot BNO (Gnd, Vdd, Sda, Scl, Int)
- 1 kontakt mot Robot/Mega (+9V, Gnd, sda, Scl, Pin11, Pin12)
Litt lodding og det er det!
Trinn 4: Hvordan fungerer det?
Fra kommunikasjonspunktet:
- Nano er bussmester I2C
- Roboten/Mega og BNO055 er I2C -slaver
- Nano leser BNO055 -registrene permanent
- Roboten/Mega gir et numerisk signal for å be om ordet fra Nano
Fra beregningspunktet: Nano kombinert med BNO055 leverer
- Kompassoverskriften (brukes til lokalisering)
- En relativ overskrift (brukes til å kontrollere rotasjoner)
- Den absolutte kursen og posisjonen (brukes til å kontrollere trekk)
Fra funksjonelt synspunkt: Nano:
- administrerer BNO055 -kalibreringen
- administrerer BNO055 parametere og kommandoer
Delsystemet Nano & BNO055:
- beregne den absolutte kursen og lokaliseringen for hvert robothjul (med en skalafaktor)
- beregne den relative kursen under rotasjon av roboten
Trinn 5: Arkitektur og programvare
Hovedprogramvaren kjører på en Arduino Nano
- Arkitektur er basert på I2C -kommunikasjon.
- Jeg valgte å dedikere en Nano på grunn av det faktum at Atmega som driver roboten ganske allerede var lastet og denne arkitekturen gjør det enklest å gjenbruke andre steder.
- Nano leser BNO055 -registre, beregner og lagrer overskrift og lokalisering i sine egne registre.
- Arduino Atmega som kjører robotkoden, sender informasjon om hjulkodere til Nano og leser overskriftene og lokaliseringen inne i Nano -registerene.
Det er en delkode (Nano) tilgjengelig her på GitHub
Adafruit kalibreringsverktøy hvis her på GitHub (kalibrering lagres på eeproom)
Trinn 6: Hva lærte jeg?
Når det gjelder I2C
For det første prøvde jeg å ha 2 mestere (Arduino) og 1 slave (sensor) på samme buss, men på slutten er det mulig og enklest å bare sette Nano som master og bruke GPIO -tilkobling mellom de 2 Arduinoene for å "be om token".
Angående BNO055 for 2D -orientering
Jeg kan konsentrere meg om tre forskjellige løpemoduser: NDOF (kombinere gyroskop, akselerometer og kompas) når roboten er inaktiv, IMU (kombinere gyroskop, akselerometer) når roboten beveger seg og Kompass i lokaliseringsfasen. Det er enkelt og raskt å bytte mellom disse modusene.
For å redusere kodestørrelsen og beholde muligheten for å bruke BNO055 interrupt for å oppdage kollisjon, foretrekker jeg ikke å bruke Adafruit -biblioteket og gjøre det på egen hånd.
Anbefalt:
Enkel måte å bruke Makey Makey med et teknisk dekk: 5 trinn
Enkel måte å bruke Makey Makey med et teknisk dekk: Hei. Jeg så nylig et tech -deck makey makey -program i denne konkurransen som var veldig kult, men virket vanskelig, så jeg lagde en enkel måte å spille spill med et tech -deck. Hvis du liker min instruerbare, vennligst stem på den i makey makey -konkurransen
Hvordan bruke DS1307 Bruke Arduino: 7 trinn
Hvordan bruke DS1307 Bruke Arduino: DS1307 er en sanntidsklokke IC (RTC). Denne IC brukes til å gi tidsdata. Tildelt tid starter fra sekunder, minutt, timer, dager, dato, måned og år. Denne IC krever ytterligere eksterne komponenter som Crystal og 3,6V batterier. Krystall
Hvordan bruke en tenåring til å skrive ut bilder på Splatoon 2 Bruke SplatPost -skriveren: 10 trinn
Hvordan bruke en tenåring til å skrive ut bilder på Splatoon 2 Bruke SplatPost -skriveren: I denne instruksen vil jeg vise hvordan du bruker SplatPost -skriveren av ShinyQuagsire. Uten klare instruksjoner ville noen som ikke har erfaring med kommandolinjen ha litt problemer. Målet mitt er å forenkle trinnene ned til poi
Neopixel Ws2812 Rainbow LED-glød med M5stick-C - Kjører Rainbow på Neopixel Ws2812 Bruke M5stack M5stick C Bruke Arduino IDE: 5 trinn
Neopixel Ws2812 Rainbow LED-glød med M5stick-C | Running Rainbow på Neopixel Ws2812 Bruke M5stack M5stick C Bruke Arduino IDE: Hei folkens i denne instruksen, vi lærer hvordan du bruker neopixel ws2812 LED eller led strip eller led matrise eller led ring med m5stack m5stick-C utviklingstavle med Arduino IDE, og vi skal lage et regnbuemønster med den
Hvordan bruke Wiimote som en datamus ved å bruke stearinlys som sensor !!: 3 trinn
Slik bruker du Wiimote som en datamus ved å bruke stearinlys som en sensor !!: Denne guiden viser deg hvordan du kobler din Wii -fjernkontroll (Wiimote) til din PC og bruker den som en mus